1.兄弟A(=== 和 !==) 和兄弟B(==和!=)
A和B是孪生兄弟,A判断运算数据类型和值,而B是判断值相同不相同,如果类型不一致,首先会强制转换类型,再进行判断值。
严格相等 ===
举例说明:
var num = 0;
var obj = new String("0");
var str = "0";
var b = false;
console.info(num === num); // true
console.info(obj === obj); // true
console.info(str === str); // true
console.info(num === obj); // false
console.info(num === str); // false
console.info(obj === str); // false
console.info(null === undefined); // false
console.info(obj === null); // false
console.info(obj === undefined); // false
在日常中使用全等操作符几乎总是正确的选择。对于除了数值之外的值,全等操作符使用明确的语义进行比较:一个值只与自身全等。对于数值,全等操作符使用略加修改的语义来处理两个特殊情况:第一个情况是,浮点数 0 是不分正负的。区分 +0 和 -0 在解决一些特定的数学问题时是必要的,但是大部分境况下我们并不用关心。全等操作符认为这两个值是全等的。第二个情况是,浮点数包含了 NaN 值,用来表示某些定义不明确的数学问题的解,例如:正无穷加负无穷。全等操作符认为 NaN 与其他任何值都不全等,包括它自己。(等式 (x !== x
) 成立的唯一情况是 x 的值为 NaN)
非严格相等 ==
相等操作符比较两个值是否相等,在比较前将两个被比较的值转换为相同类型。在转换后(等式的一边或两边都可能被转换),最终的比较方式等同于全等操作符 === 的比较方式。 相等操作符满足交换律。

在上面的表格中,ToNumber(A)
尝试在比较前将参数 A 转换为数字,这与 +A(单目运算符+)的效果相同。通过尝试依次调用 A 的A.toString 和 A.valueOf 方法,将参数 A 转换为原始值。
一般而言,根据 ECMAScript 规范,所有的对象都与 undefined
和 null 不相等。但是大部分浏览器允许非常窄的一类对象(即,所有页面中的 document.all 对象),在某些情况下,充当效仿 undefined
的角色。相等操作符就是在这样的一个背景下。因此,IsFalsy(A)
方法的值为 true ,当且仅当 A 效仿 undefined。在其他所有情况下,一个对象都不会等于 undefined 或 null。
var num = 0;
var obj = new String("0");
var str = "0";
var b = false;
console.info(num == num); // true
console.info(obj == obj); // true
console.info(str == str); // true
console.info(num == obj); // true
console.info(num == str); // true
console.info(obj == str); // true
console.info(null == undefined); // true
// both false, except in rare cases
console.info(obj == null);
console.info(obj == undefined);
最后,查看
JS比较表
其实,很容易发现,===和 == 的区别真的很大,强烈推介使用===,而不是==
网友评论