误解JavaScript类型系统

时间:2011-03-16 10:13:24

标签: javascript type-conversion

var foo=[0];
if(foo) alert('first');
if(foo==true) alert('second');

请告诉我,为什么第二个警报不起作用?在第一次提醒foo投射到Boolean,所以

Boolean(foo);
//true

如果“foo”为“true”,为什么第二个警报不起作用?

3 个答案:

答案 0 :(得分:5)

下面,

if(foo)会发出警报,因为foo不为null且条件的计算结果为true。

但是,这并不意味着foo本身等于true,因此第二个警报不显示。

答案 1 :(得分:1)

因为最初fooArray,而不是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 == truefalse,最终会false转换为if。 :)