Skip to content

Instantly share code, notes, and snippets.

@fluency03
Last active February 7, 2019 09:03
Show Gist options
  • Save fluency03/d5179210b93135e74603c0fa87a632b1 to your computer and use it in GitHub Desktop.
Save fluency03/d5179210b93135e74603c0fa87a632b1 to your computer and use it in GitHub Desktop.
== vs ===
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)
*/
/*
相等操作符比较两个值是否相等,在比较前将两个被比较的值转换为相同类型。在转换后(等式的一边
或两边都可能被转换),最终的比较方式等同于全等操作符 === 的比较方式。 相等操作符满足交换律。
*/
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