今天看了Expressions and Operators。有了C++的基础感觉学这章比较轻松,这次备忘的是Relational Expressions。其实最主要的是区分'=='和'==='这两个关系操作符的区别。简单的说'==='是严格相等,不会进行类型的转换,而'=='则会进行类型的转换。看下面的代码:
<script> var a = 1; var b = '1'; if(a==b){ alert('123'); } else{ alert('321'); } if(a===b){ alert('1234'); } else{ alert('4321'); } </script> //结果输出是123和4321。
具体的区别是,对于'===':
- 如果两个操作数他们不具有相同的类型,则他们不相等;
- 如果两个操作数都是null或者undefined,那么他们相等;
- 如果两个操作数都是布尔型值true和false,那么他们相等;
- 如果其中一个操作数值是NaN,那么他们就不相等。NaN和任何值都不相等包括他自己;
- 如果两个操作数是数值型而且其值相等,则他们相等。0和-0是相等的;
- 如果两个操作数是字符串而且他们对应位置的字符相等,则他们相等,如果两个字符串编码不一样则他们不相等;
- 如果两个操作数指的是相同的类,数组和函数那么他们相等。如果他们指向不同的类,即使类属性相同,他们也不相等。
对于'==':
- 如果两个操作数他们有同样的类型,则按照上面严格相等来判断他们是不是相等。
- 如果他们类型不相等,会使用以下的规则和类型转换来判断他们是否相等:
- 如果一个值是null,另一个值是undefined,则他们相等。
- 如果一个是string型,另一个是数值型,那么就会将string型转换为数值型再进行比较。
- true会转换为数值1,false会转换为数值0,来比较。
- 如果一个是类类型,另一个是数值或者字符,则会按照Javascript_备忘录2中的变量类型转换规则,转换之后再进行比较。
- 任何以上没提到的操作数的类型组合都是不相等的。