JavaScript数组的布尔求值

JavaScript数组的布尔求值,javascript,arrays,boolean-expression,Javascript,Arrays,Boolean Expression,前几天我遇到了一只有趣的虫子。我正在测试一个数组,看看它的计算结果是否为布尔值false,但是直接计算它总是返回true: > !![] true 好的,所以基本上我放在那里的任何数组都会是true的,对吧?我在JavaScript控制台中运行此命令只是为了好玩: > [] == true false 这是怎么回事?它与将值转换为布尔值的算法有关 通过查看,我们可以看到点编号9。是唯一一个定义类型(左侧值)为Object时应该发生什么的编号。但是,它指定右侧值必须是字符串

前几天我遇到了一只有趣的虫子。我正在测试一个数组,看看它的计算结果是否为布尔值false,但是直接计算它总是返回true:

> !![]
  true
好的,所以基本上我放在那里的任何数组都会是
true
的,对吧?我在JavaScript控制台中运行此命令只是为了好玩:

> [] == true
  false
这是怎么回事?

它与将值转换为布尔值的算法有关

通过查看,我们可以看到点编号9。是唯一一个定义类型(左侧值)为Object时应该发生什么的编号。但是,它指定右侧值必须是字符串或数字

九,。如果类型(x)是对象,类型(y)是字符串或数字, 返回比较结果ToPrimitive(x)==y

查看
[]==true

typeof[]
'object'
所以我们很好,但是
typeof true
不是
'string'
'number'
,它是
'boolean'
,所以它返回到最后一个语句,point number10。

十,。返回false


但是
!![]
翻译成
!!布尔([])
,由于
[]
是一个thruty值(对象是),因此它与写入
相同!!true
,返回关于这类问题的
true

,我想你会喜欢这个演讲:你可能想看看这个问题的答案:你看过我的答案了吗?