问答

{} [] 0 1 的 if 或者二目运算符的判断使用

作者:admin 2021-09-18 我要评论

为什么 []==false 的结果是true,({})==true 或者false的结果都为false... []和{}是true的话,那么 []==true 或者 ({})==true的结果应该是true。可是事实却不是的...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

为什么 []==false 的结果是true,({})==true 或者false的结果都为false...
[]和{}是true的话,那么 []==true 或者 ({})==true的结果应该是true。可是事实却不是的,所以判断一个参数是否存在或者参数值是否相等怎么保证没有失误呢?到底什么时候该用 == 什么时候该用 === ?

image.png

###

建议看下类型转化

1.[]会转数字为0布尔值就是false
2.{}会转数字为NaN布尔值就是true

###

这个就是对象的隐式转换。

所有的对象(array, object, function等)经过Boolean转换都会变成true,所以[] ? 1 : 2就相当于true ? 1 : 2if({[]){...}同理。对象同数组。

对象进行运算时(包括与非对象进行==判断),会先运行toString方法,进行类型转换,再进行运算。

[]运行toString是空字符串,'' == false // true
{}运行toString是字符串[object Object]

'[object Object]' == false // false;
'[object Object]' == true // false;

修改下对象的toString方法,就可以很好的验证

var a = {}
a.toString = function(){
    console.log('tostring');
    return ''
}
a == false; //tostring true
a === ''; //false  //这里没有运行toString

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • {}  [] 0 1 的 if 或者二目运算符的判

    {} [] 0 1 的 if 或者二目运算符的判

  • TS中的Literal Types能获取其取值范围

    TS中的Literal Types能获取其取值范围

  • 代理IP让网络爬虫更快速抓取数据  ?

    代理IP让网络爬虫更快速抓取数据 ?

  • vue使用vw vh适配中出现的问题

    vue使用vw vh适配中出现的问题

腾讯云代理商
海外云服务器