神奇的JS

我们知道在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()方法,用得到的基本类型值按照前面的规则进行比较。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容