三等于运算符

引言

在javascript中,你可能会写出以下两段代码:


if (x == y) {
	// do something here
}
或者



if (x === y) {
	// do something here
}
这两端代码的区别是:第二段代码使用了三等于运算符,也称为严格相当或恒等于运算符。对于Javascript初学者来说,可能提倡使用三等于运算符,不用双等运算符。但就是不明白为什么,他们两者的区别又是什么?


两者区别

在使用双等运算符的比较中,如果被比较的两个值相等,将返回true(真)。但有种情况:在类型不同的两个值之间比较时,就会发生强制转换。每个JavaScript值属于一个特定的“类型”。这些类型是:数字,字符串,布尔值,函数和对象。所以,如果你尝试用字符串(string)和数字(number)进行比较,浏览器在比较之前,就会尝试把字符串转换成数字,再进行比较。同样,如果用真(true)或假(false)与数字(number)进行比较,它会把真或假转化为1或0 。

这会带来不可预知的后果,下面是一些例子:

console.log(99 == "99"); // true  
console.log(0 == false); // true
尽管看起来没有问题,但它可以引起麻烦,例如:
console.log(' \n\n\n' == 0); // true  
console.log(' ' == 0); // true
鉴于此,多数javascript专家建议使用三等运算符,不用双等运算符。因为三等运算符从来不会强制类型转换。这意味着:使用三等运算符,上面四个例子将会得到正确的结果。
console.log(99 === "99"); // false
console.log(0 === false); // false
console.log(' \n\n\n' === 0); // false
console.log(' ' === 0); // false
不等于又是什么情况?

这次用不等于测试上面的例子:

console.log(99 != "99"); // false
console.log(0 != false); // false
console.log(' \n\n\n' != 0); // false
console.log(' ' != 0); // false
注意,每个例子的最终结果都应该是真(true),但事实相反,因为受到了强制转换的影响。

如果改成双等运算符,将得到正确的结果:

console.log(99 !== "99"); // true
console.log(0 !== false); // true
console.log(' \n\n\n' !== 0); // true
console.log(' ' !== 0); // true
总结

建议总是使用严格相等运算符,这将有助于你的代码保持数据完整性。


转载于:https://my.oschina.net/u/1162598/blog/161017

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值