2019-01-04
回答
三个等号 === 表示严格相等,也就是说类型和值都必须相同。两个等号 == 会使其中一边的类型进行强制转换,使等号两边的类型都相等后再对数值进行比较。
加分回答
- 尽量使用全等操作符。因为其没有隐式转换,这样结果会比较容易预测、计算也会比较快
- 除了等于操作符,还可以使用
Object.is进行同值比较。他有着自己的特殊用途,不应说他更宽松或更严格于其他等于操作符 - 附表一张
| x | y | == | === | Object.is |
|---|---|---|---|---|
| undefined | undefined | true | true | true |
| null | null | true | true | true |
| true | true | true | true | true |
| false | false | true | true | true |
| "foo" | "foo" | true | true | true |
| { foo: "bar" } | x | true | true | true |
| 0 | 0 | true | true | true |
| +0 | -0 | true | true | false |
| 0 | false | true | false | false |
| "" | false | true | false | false |
| "" | 0 | true | false | false |
| "0" | 0 | true | false | false |
| "17" | 17 | true | false | false |
| [1,2] | "1,2" | true | false | false |
| new String("foo") | "foo" | true | false | false |
| null | undefined | true | false | false |
| null | false | false | false | false |
| undefined | false | false | false | false |
| { foo: "bar" } | { foo: "bar" } | false | false | false |
| new String("foo") | new String("foo") | false | false | false |
| 0 | null | false | false | false |
| 0 | NaN | false | false | false |
| "foo" | NaN | false | false | false |
| NaN | NaN | false | false | true |
ME!
链滴