var foo=[0];
if(foo) alert('first');
if(foo==true) alert('second');
请告诉我,为什么第二个警报不起作用?在第一次提醒foo
投射到Boolean
,所以
Boolean(foo);
//true
如果“foo”为“true”,为什么第二个警报不起作用?
答案 0 :(得分:5)
下面,
if(foo)会发出警报,因为foo不为null且条件的计算结果为true。
但是,这并不意味着foo本身等于true,因此第二个警报不显示。
答案 1 :(得分:1)
因为最初foo
是Array
,而不是Boolean
,您将foo
与布尔值进行比较。 if (...)
- 语句的计算结果为true或false,foo == true
的计算结果为false。如果您使用if (!!foo == true)
(或仅if (!!foo)
)或if (foo != null)
或if (foo)
,则会触发第二次提醒。
答案 2 :(得分:1)
因为foo
转换为布尔值(适用于数组)与foo
转换为true
之间存在差异。
在后一种情况下,它是没有转换的比较,而foo
显然与true
不同。请注意,仍会进行转化:foo == true
为false
,最终会false
转换为if
。 :)