很多人在刚开始学习JavaScript的时候,应该都很惊讶得发现竟然还有 === 这种操作符。
在JavaScript中的确存在 == 和 === 两种比较操作符,它们的区别是:
== 要先转换需要比较的两个操作数,然后在进行比较;
=== 不进行任何转换,直接进行比较;
说通俗点就是:用 == 进行比较的两个操作数,只要值相等,类型不等都会返回 true;而 === 要求类型和值都相等才会返回 ture;
在用 == 进行比较的时候,转化规则如下:
true会转化成1,false转化成0;
如果是字符串和数值进行比较,字符串会转化成数值;
如果其中一个是对象,会默认调用对象的valueOf方法取出其原始值;
null == undefined 得到的结果是ture;
如果一个操作数是NaN,那么始终返回false,因为根据ECMA标准,NaN不等于任何值和对象,包括它自己,就是说即使用 NaN == NaN 也是返回false;
如果两个操作数都是对象,那么判断这两个对象是否指向同一个对象,是返回true,否则返回false(因为JavaScript中的对象都是引用传递,并且属于共享对象的方式,所以两个指向同一个对象的变量实际是共享同一个对象的地址);