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