如何在JavaScript中使用10 ==“10”的情况下工作==?
当我们比较10 ==“10”。 JavaScript给出的输出为真。这是否意味着第一个操作数10(Number
)被转换为“10”(String
),反之亦然?如何在JavaScript中使用10 ==“10”的情况下工作==?
做的双等于尝试是,将其转换两个操作数常见的数据类型。它会尝试将这两个值转换为整数。如果其中一个被转换为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
==
指检查为值。
===
表示检查值以及类型。
所以当比较10 =='10'
时,JavaScript引擎只检查值,因此true
。
10 === '10'
will yeild false
。 阅读mozilla的equality comparison了解更多信息。
==
运营商将在之后进行任何必要的类型转换后进行比较。 ===
运营商不会做转换,所以如果两个值不是相同的类型===
将简单地返回false
不管。在我们的案例10 == "10"
类型转换后,比较的两边都是相等的,所以它返回true
。
*经过类型转换*转换后的哪一种类型? – 2016-11-26 12:04:30
我不知道这是否完全是一个问题,但如果是的话;首先我需要说你的观点是正确的,一个隐式类型转换发生在这里,因为==检查不是相同的平等,第二你可能会发现有用这些链接:
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。
最后一句应该是个问题吗? – melpomene
使用==运算符仅检查两个值是否相等。它完全无视这种类型。===运算符检查类型和值使它成为一个更严格的运算符 – Jackthomson
@TheSETJ我猜它不是完全重复的,因为OP想知道'=='如何工作 – Rajesh