js 的 ==undefined 和 ===undefined 有什么区别?

if (v == undefined) {
    console.log("==")
}

if (v === undefined) {
    console.log("===")
}

上面两个 if 判断有什么区别?

阅读 2.7k
3 个回答

== 为相等比较,会有隐式转换(将被比较的值转换为相同类型);

=== 为严格相等比较,两个被比较的值必须类型一致;

var num = 0;
var obj = new String("0");
var str = "0";
var b = false;

console.log(num === num); // true
console.log(obj === obj); // true
console.log(str === str); // true

console.log(num === obj); // false
console.log(num === str); // false
console.log(obj === str); // false
console.log(null === undefined); // false
console.log(obj === null); // false
console.log(obj === undefined); // false

相关文档

相等(==) - JavaScript | MDN
严格相等(===) - JavaScript | MDN
JavaScript 中的相等性判断 - JavaScript | MDN

nullundefined在进行逻辑比较时不会发生类型转换,但是null == undefinedtrue。所以通常使用if (v == undefined)判断v是否取值为null或者undefined

console.log(null == void 0) // true
console.log(null === void 0) // false

完整可参考JS-相等性判断

=== 会比较类型,类型相同再比较值;== 不关注类型,只要值通过隐式转换之后相等即判等

所以 null == undefined 结果为 true,但 null === undefined 结果为 false。nullundefeind 都表示空或不存在的意思,但是 nullobject 类型,undefined 是专门的 undefined 类型。

由于隐式转换常常会因为开发者不够谨慎造成一些预料之外的错误,所以现代规范一般会禁止使用 ==。当然规范是团队制定的,不同团队有不同的规范,也没有定数。反正我建议不使用 ==!=

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题