我们知道在JS中会有一些判断是与非的问题,这里专门有一些这种问题,在解决问题的同时让我深入理解一些JS的转换。 Yes 0r no ,that's a problem.
图片来自网络1、[ ]==![ ] 数组等于非数组?!
==会自动转换类型,所以在判断[ ]==![ ]会转换两者的类型。
[ ]是object类型,![ ] 是Boolean类型,比较时会把Boolean转换为Number类
型,而Object转换成Number或String,则取决于另外一个比较对象的类型。
这里比较对象是Boolean,所以object也会转化为Number。
Boolean与Number的转换,true为1,false为0,所以![ ]在比较的时候转换
为Number值为0;
[ ]是很明显的空对象,对于对象,当将其转换成Number时,会先调用对象
的valueOf()方法及toString( ),返回对象的原始值,再进行转换。最终[ ]会
返回""空字符串,""会转化Number值为0。
所以0==0,即[ ] == ! [ ] 为true
2、!!'false' == !!'true' true是false ?!
'false'不是一个空字符串,因此他的值为真值
所以,!!'false'返回true
!!'true'同样返回true
所以true==true,!!'false' == !!'true'返回true
3、‘foo’ + ’bar‘ 返回值
字符串的拼接,所以返回值为 foobar ;
4、‘foo’ ++ ’bar‘ 返回值为 ??
该表达式可以转换为 'foo'+(+'bar'),+‘bar’将 “bar” 转换为NaN。
所以’foo‘++'bar'返回 fooNaN
5、1<2<3 和 3>2>1 的返回值是什么呢 ?
我们知道1<2,在这里比较的时候从左到右可以看到1<2的时候返回的是true,true与3相比较会把true转化成num类型的1当然1<3 所以第一个返回值是true,同理第二个为false.
所以:
图片来啦在转换不同的数据类型时,相等或者不相等应遵循一下几条规则:
1. 如果有一个操作数是布尔值,则在比较相等之前将其转换为数值————false转换为0,true转换为1;
2. 如果一个操作数是字符串,另一个操作符是数值,则在比较相等之前先将字符串转换为数值;
3. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较。
网友评论