js真假之空数组的转换

萌新小白rai
  • 142
let obj ={
        a :true,
        b:[]
    }
if(obj.a && obj.b){
  console.log(324)
}
//这里为什么会输出324呢? 明明obj.b是个空数组怎么会是真呢?

//如果整个流程是这样的话?
obj.b => [] => Boolean([]) => true
//为啥单单比较
[]===[]
//就是false呢?

**

补充:如果我要实现一般情况的那种都为true才执行1的功能,该如何修改呢?这个数组有些时候是非空数组

**

回复
阅读 2k
7 个回答
✓ 已被采纳

贴你链接,你不好好看

理解下这个,再回看你的问题
图片描述

下面的值为false:

false
null
undefined
""  即空字符串
0
NaN

------------来源 JavaScript语言精粹 P12

obj.b 是空数组,但还是一个数组对象

另外:关于 [] == false 是 true 的问题
参考 https://www.cnblogs.com/nanch...

[] typeof => "object" 然后再来转换为true
null对象除外

clipboard.png

if里面的转换和==比较的隐式转换不一样;
if条件里面只要是Object类型就是true,可参见To Boolen表;
==的隐式类型转换式通过ToPrimitive的流程,可见其他回答下的文章链接;
[]===[]:两个[]的引用地址不一样当然是false

obj.a = true 不用说
obj.b = [] 会隐式转换成true

这些用多了其实就可以直接记下来了

比如,
空数组
空对象
包含空格的字符串
非零的数字
都是true

clipboard.png

这就是js和python的不同之处了。空数组、空对象都是true

任何对象转化布尔型都为true

宣传栏