繁体   English   中英

Javascript数组到布尔类型强制没有意义

[英]Javascript array to boolean type coercion not making sense

当我运行以下代码行时:

var x = []; console.log(!x); console.log(x == false);
> false
> true

我假设使用! 会强制类型正确,类似于PHP中的工作方式,并且这两个控制台日志将返回相同的输出。 有人可以告诉我这是怎么回事吗?

TL; DR:一个值转换成布尔值是从进行比较的值,以布尔因为JavaScript有隐式类型转换非常不同。

有人可以告诉我这是怎么回事吗?

!x!Boolean(x) ,即x被显式转换为布尔值。

通过宽松的比较,情况会有所发展:

如果两个操作数的数据类型不同,则JS会将它们都转换为相同的类型。 但是,如果任何一个操作数是布尔值,则该值将转换为数字,而与另一个操作数的值无关。 这又意味着另一个操作数也将转换为数字。
因此[] == falseNumber([]) == Number(false)

松散比较的算法可以在ECMAScript规范中找到。

另请参见为什么{} == false评估为false,而[] == false评估为true? ,其中列出了转换步骤。

我假设使用! 会正确强制类型,类似于在PHP中的工作方式。

虽然肯定有一些相似之处,但是类型转换规则是完全独立的。


有意见的建议:这是一个很好的示例,说明为什么应尽可能避免隐式类型转换。

实际上,我认为它确实可以按照您的想法工作:

 var x = []; document.writeln(!x); document.writeln(x == false); 

好的,所以我认为我发现了问题:

var x=[];
alert(x==false);// true;
x=[1];
alert(x==false);// false;

即使定义了x,除非它具有内容,否则它不会返回true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM