美文网首页
神奇的JS

神奇的JS

作者: _ALIVE | 来源:发表于2017-08-30 21:04 被阅读33次

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

    相关文章

      网友评论

          本文标题:神奇的JS

          本文链接:https://www.haomeiwen.com/subject/jgnxjxtx.html