1

我正在使用 lint 和以下内容:

if (json.RowKey != json.NewRowKey)

它给了我一个信息:

Expected '!==' and instead saw '!='.

有人可以解释这是什么意思吗?

4

4 回答 4

1

==将尝试在比较它们之前将两个操作数的类型转换为相同。因此"2" == 2true

===不会尝试转换两个操作数的类型,因此如果它们不是同一类型,则它们永远不会是===. 因此"2" === 2false

最好使用===and!==作为您的默认选择,并且仅在您明确希望允许类型转换时使用==or 。!=如果您不期望这两个操作数是不同的类型,那么===and!==更有可能做您所期望的。

当事情并不真正相等并且您的代码不打算让它们相等时,这可以避免编码错误。

一些奇怪的事情会发生==(并且不会发生===),您可能不会想到并可能导致麻烦。所有这些评估为true

null == undefined
false == '0' 
0 == '0' 
0 == ''

这里写了更多细节:JavaScript 比较中应该使用哪个等号运算符(== vs ===)?

于 2012-09-25T05:28:55.417 回答
1

!== 不相等(既不是值也不是类型) 例如: var x = 5; x !== "5" returns true var x = 5; x !== 5 returns false

于 2012-09-25T05:41:00.700 回答
0

这是一个警告,告诉您应该考虑使用!==运算符而不是!=.

从表面上看,他们都在做同样的事情——比较这两个项目是否不相等。但是,!==首先要确保两个项目的类型相同(也就是说,如果要比较的一个项目是字符串而另一个项目是数字,它不会尝试将字符串转换为数字),所以它是通常使用起来更安全,可以帮助您避免比较错误。

有关更多详细信息,请参阅此处:JavaScript 比较中应使用哪个等号运算符 (== vs ===)?

于 2012-09-25T05:30:14.910 回答
0

是的,

if("1" == 1) //Returns true because it will convert the second 1 into a string to match

"1" !== 1 //Returns false because the first 1 is a string and the second 1 is an integer. 

我们正在谈论变量类型;使用两个等号,javascript(和 php)将为您对变量进行类型转换(将整数 1 转换为字符串 1 以进行匹配并为真),但使用第二个语句,它不会。

1 === 1 //True
1 === "1" //False
1 == "1" //True
1 == 1 //True

希望我的回答对你有意义。

于 2012-09-25T05:34:03.493 回答