刚才看犀牛书,看到这个知识点,记录一下:
严格相等运算符“===”
- 如果两个值类型不相同,在它们不相等
- 如果两个值都是null或者都是undefined,则它们不相等
- 如果两个值都是布尔值true或者都是布尔值false,则它们相等
- 如果其中一个是NaN,或者两个值都是NaN,则它们不相等。NaN和其他任何值都是不相等的,包括它本身!通过x !== x来判断,只有x为NaN的时候,这个表达式的值才为true
- 如果两个值为数字,则它们相等。如果一个值是0,另一个值是-0,则它们相等
- 如果两个值为字符串,且所含的对应位上的16位数完全相等,则它们相等。如果它们的长度或内容不同,则它们不等
- 如果两个引用值指向同一个对象,数组或者函数,则它们相等。如果指向不同的对象,则它们不等,尽管两个对象具有完全一样的属性。
相等运算符“==”
相等运算符和严格相等运算符类似,但是并不严格。如果两个操作数并不是同一类型,那么相等运算符会尝试进行一些类型转换。
- 如果两个操作数的类型相同,则和上文所述的严格相等的比较规则一样。如果严格相等,则比较结果为相等。如果它们不严格相等,则比较结果为不相等。
- 如果两个操作数类型不同,“==”相等操作符也可能认为它们相等。
- 如果一个值是null,一个值是undefined,则相等
- 如果一个值是数字,一个是字符串,先将字符串转为数字,然后再进行比较
- 如果其中一个值是true,则将其转为1,再进行比较。如果其中一个是false,则将其转为0,再进行比较
- 如果一个值是对象,另一个是数组或字符串,则将对象使用toString()/valueOf()转为原始值,再进行比较。
小例子
说出下面表达式的结果:
“1” == true
---end---
网友评论