什么';这有什么问题吗'';在javascript中(与空字符串相比)?
jsbin开始警告我,什么';这有什么问题吗'';在javascript中(与空字符串相比)?,javascript,Javascript,jsbin开始警告我,x!=''不好,我应该用x!=''替换它 为什么? 换句话说,false(以及其他falsy值,如0)将强制为空字符串。==和==运算符(严格相等运算符)确保所比较的对象是同一类型的 要进一步说明为什么会出现这种情况,您需要转到规范(由T.J.Crowder在评论中链接)。“”部分告诉我们以下内容: 如果类型(x)是布尔值,则返回比较结果到数字(x) ==y 这一节告诉我们: 如果参数为true,则结果为1。如果 这个论点是错误的 在上面的示例中,参数是false,因此我
x!=''代码>不好,我应该用x!=''替换它代码>
为什么?
换句话说,false
(以及其他falsy值,如0
)将强制为空字符串。==
和==
运算符(严格相等运算符)确保所比较的对象是同一类型的
要进一步说明为什么会出现这种情况,您需要转到规范(由T.J.Crowder在评论中链接)。“”部分告诉我们以下内容:
如果类型(x)是布尔值,则返回比较结果到数字(x)
==y
这一节告诉我们:
如果参数为true,则结果为1。如果
这个论点是错误的
在上面的示例中,参数是false
,因此我们现在比较+0!=''代码>。将数字与字符串进行比较时,遵循以下规则:
如果类型(x)是数字,类型(y)是字符串,则返回
比较x==ToNumber(y)
调用将导致+0
,就像调用false
一样:
为空或仅包含空白的StringNumericLiteral为空
转换为+0
现在我们正在比较+0!=+0,因此我们进入“x和y属于同一类型”部分,该部分告诉我们:
如果x与y的数值相同,则返回true
所以+0
等于+0
,因为我们使用的是=
返回false
哇,看看所有相关问题就知道了。这么多题为“这个javascript代码怎么了”的问题。如果你费心查找之间的差异=代码>和==代码>然后你会在几秒钟内得到答案。我对一个12.7k的用户期望更高,他已经在这里工作了三年多。闭嘴者-不要基于用户来结束一个问题。这个问题是有效的。可能重复的,,@outis:谢谢你找到了真正的副本()。@ripper234:所以你需要知道每一个都做了什么(我建议读一下-|),然后决定在任何给定的情况下使用哪一个。两者都有各自的用途,尽管人们通常会倾向于严格的用法(=
和!=
)。
var x = false;
console.log(x !== ''); //true
console.log(x != ''); //false