effective javascript(四)——避免对于混合类型使用==运算符

先来看一个简单的例子:

"1.0e0" == {valueOf: function () { return true;}}
结果为:true

这两个看似毫无关系的对象,使用”==”符号的结果却是true。js的隐式强制转换看似比较方便,也埋下了许多隐患。左边的等式被转换为1,右边的匿名函数结果为true,同样被转换为1,所有结果为true。
所有在作相等运算符的时候,尽量使用“===”符号,避免强制转换隐藏的问题。

js中的“==”运算符部分强制转换规则如下:

null == undefined // true
null == "sss" // false
undefined == "sss" // false
undefined == NaN // false
undefined == true // false
undefined == 1 // false

null和undefined与其他类型使用“==”都返回false,但是null与undefined使用“==”返回true。

再来看一个关于date的例子:

var date = new Date("2017/4/15");
date == "2017/4/15" //false

new的date对象和字符串对象是不相等的,因为date对象被转换成了别的格式。

date.toDateString() = "Sat Apr 15 2017"

再次补充说明:js中的强制转换有些隐藏的处理,可能导致意外的情况发生,尽量避免使用”==”运算符。


end…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值