https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness
Last active
February 7, 2019 09:03
-
-
Save fluency03/d5179210b93135e74603c0fa87a632b1 to your computer and use it in GitHub Desktop.
== vs ===
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
console.log(1 === 1) // true | |
console.log(1 === 2) // false | |
console.log(1.1 === 1.10) // true | |
console.log(Number(1) === 1) // true | |
console.log(Number(1) === Number(1)) // true | |
console.log(Number(1) === new Number(1)) // false | |
console.log(new Number(1) === new Number(1)) // false | |
console.log(Number(1.10) === 1.1) // true | |
console.log(1 === '1') // false | |
console.log(1 === "1") // false | |
console.log(-0 === +0) // true | |
console.log(-0.0 === +0.0) // true | |
console.log(NaN === NaN) // false | |
console.log(NaN === 1) // false | |
console.log(null === null) // true | |
console.log(undefined === null) // false | |
console.log(undefined === 1) // false | |
console.log(undefined === "1") // false | |
console.log("Chang" === "Chang") // true | |
console.log('chang' === 'chang') // true | |
console.log("Chang" === 'Chang') // true | |
console.log(1 === 2) // false | |
console.log({name:"jerry"} === {name: "jerry"}) // false | |
console.log(0 === false) // false | |
console.log(1 === true) // false | |
console.log("" === false) // false | |
console.log('' === false) // false | |
console.log(Infinity === Infinity) // true | |
console.log(Infinity === -Infinity) // false | |
console.log(-Infinity === Infinity) // false | |
console.log([] === []) // false | |
console.log([0] === [0]) // false | |
console.log({} === {}) // false | |
console.log(Symbol() === Symbol()) // false | |
/* | |
严格相等 === | |
全等操作符比较两个值是否相等,两个被比较的值在比较前都不进行隐式转换。如果两个被比较的值 | |
具有不同的类型,这两个值是不全等的。否则,如果两个被比较的值类型相同,值也相同,并且都 | |
不是 number 类型时,两个值全等。最后,如果两个值都是 number 类型,当两个都不是 NaN, | |
并且数值相同,或是两个值分别为 +0 和 -0 时,两个值被认为是全等的。 | |
在日常中使用全等操作符几乎总是正确的选择。对于除了数值之外的值,全等操作符使用明确的语义 | |
进行比较:一个值只与自身全等。 | |
对于数值,全等操作符使用略加修改的语义来处理两个特殊情况: | |
1. 第一个情况是,浮点数 0 是不分正负的。区分 +0 和 -0 在解决一些特定的数学问题时是必要 | |
的,但是大部分情况下我们并不用关心。全等操作符认为这两个值是全等的。 | |
2. 第二个情况是,浮点数包含了 NaN 值,用来表示某些定义不明确的数学问题的解,例如:正无穷 | |
加负无穷。全等操作符认为 NaN 与其他任何值都不全等,包括它自己。(等式 (x !== x) 成 | |
立的唯一情况是 x 的值为 NaN) | |
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
相等操作符比较两个值是否相等,在比较前将两个被比较的值转换为相同类型。在转换后(等式的一边 | |
或两边都可能被转换),最终的比较方式等同于全等操作符 === 的比较方式。 相等操作符满足交换律。 | |
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
console.log(!undefined) // true | |
console.log(!null) // true | |
console.log(!false) // true | |
console.log(!0) // true | |
console.log(!"") // true | |
console.log(![]) // false | |
console.log(![[]]) // false | |
console.log(!{}) // false | |
console.log(![0]) // false | |
console.log(![1]) // false | |
console.log(!NaN) // true | |
console.log(!true) // false | |
console.log(!false) // true | |
console.log(!1) // false | |
console.log(!-1) // false | |
console.log(!"true") // false | |
console.log(!"false") // false | |
console.log(!"1") // false | |
console.log(!"0") // false | |
console.log(!"-1") // false | |
console.log(!Infinity) // false | |
console.log(!-Infinity) // false |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment