【JavaScript基础】== 和===

学习地址: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness#%E4%B8%A5%E6%A0%BC%E7%9B%B8%E7%AD%89

相等判断方式有三种:

(1)strict Equality 严格相等 ===

不进行类型转换,直接比较;
引用类型比较其地址位置

// 严格相等 Strict Equality
// 基础类型不进行类型转换 - Number, Boolean, String, Null, undefined
console.log(undefined === undefined); // true
console.log(null === null); // true
console.log(undefined === null); // false
console.log(0 === false); // false
console.log(false === null); // false
console.log("1" === "1"); // true
console.log("1" === 1); // true
console.log("1" === new String("1")); // true

// 引用类型,指向引用地址 Object, Array, Date
console.log([1, 2] === [1, 2]); // false
var array = [2, 3];
console.log(array === [2, 3]); // false
console.log(new Date() === new Date()); // false

(2)Abstract Equality 非严格相等 ==

隐式转换后,进行严格相等比较;
如何转换? 优先将a == b中(a,b)中能转换成number的值转换成number;

// NaN和谁比都是为false;
// undefined, null除了和自身以及彼此比,都是为false;
// Number, String, Boolean 都是优先转为Number再进行比较,如果不能,则用String进行比较
console.log(1 == "1"); // true
console.log(0 == false); // true
console.log(1 == false); // false
console.log(undefined == false); // false
console.log(null == false); // false
console.log(null == null); // true 
console.log(NaN == NaN); // false
console.log(null == undefined); // true 

toPrimitive () : 通过尝试调用 A 的A.toString() 和 A.valueOf() 方法,将参数 A 转换为原始值(Primitive)。

console.log(["1"] == "1"); // true
console.log({} == {}); // false 类型一样,直接比较严格相等比较
let a = ["1,2,3", "4,5"];
console.log(a == "1,2,3,4,5"); // true
console.log(a == ["1,2,3", "4,5"]); // false
let obj = { a: "1,2,3" };
console.log(obj == '{a: 1,2,3}'); // false
console.log(obj == 'a: 1,2,3'); // false
console.log(obj == '1,2,3'); // false
console.log(obj == obj.toString()); // true

例外:
窄对象 document.all == undefined

技巧: a !== a // true -> a= NaN

(3)Same Value同值相等 Object.is(a, b)

Same Value: 等价于 ===
例外:+0/-0, NaN和NaN

console.log(+0 === -0); // true
console.log(Object.is(+0, -0)); // false
console.log(NaN === NaN); // false 
console.log(Object.is(NaN, NaN)); // true

Same-Value-Zero 同零值相等
与同值相等类似,不过 +0 == -0 // true
即,只增加NaN == NaN的判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值