2016-11-26 240 views
-2

当我们比较10 ==“10”JavaScript给出的输出为真。这是否意味着第一个操作数10(Number)被转换为“10”(String),反之亦然?如何在JavaScript中使用10 ==“10”的情况下工作==?

+2

最后一句应该是个问题吗? – melpomene

+1

使用==运算符仅检查两个值是否相等。它完全无视这种类型。===运算符检查类型和值使它成为一个更严格的运算符 – Jackthomson

+0

@TheSETJ我猜它不是完全重复的,因为OP想知道'=='如何工作 – Rajesh

回答

3

在此document10 == "10"使用表意味着代码表现为A === ToNumber(B)即字符串被转换为数字

0

做的双等于尝试是,将其转换两个操作数常见的数据类型。它会尝试将这两个值转换为整数。如果其中一个被转换为int,则两者都将被转换并且输出将被返回。如果两者均失败,则会执行字符串比较。

console.log(10 == "10") 
 
console.log(true == "true") 
 
console.log({} == '[object Object]')

原因第二返回false是因为parseInt(true)将返回1 parseInt('true')将返回NaN

你可以阅读以下链接算法:The Abstract Equality Comparison Algorithm

1

==指检查为值。

===表示检查值以及类型。

所以当比较10 =='10'时,JavaScript引擎只检查值,因此true

10 === '10' will yeild false。 阅读mozilla的equality comparison了解更多信息。

2

==运营商将在之后进行任何必要的类型转换后进行比较===运营商不会做转换,所以如果两个值不是相同的类型===将简单地返回false不管。在我们的案例10 == "10"类型转换后,比较的两边都是相等的,所以它返回true

+0

*经过类型转换*转换后的哪一种类型? – 2016-11-26 12:04:30

0

我不知道这是否完全是一个问题,但如果是的话;首先我需要说你的观点是正确的,一个隐式类型转换发生在这里,因为==检查不是相同的平等,第二你可能会发现有用这些链接:

JavaScript comparison operators: Identity vs. Equality

Which equals operator (== vs ===) should be used in JavaScript comparisons?

JavaScript - === vs == operators performance

Equality comparisons and sameness

更新:我做了正确的我对CON错误版本和演员,感谢@melpomene。

相关问题