Pog*_*dis 6 javascript resharper
最近在JavaScript中我已经养成了使用习惯
if(data !== "")
Run Code Online (Sandbox Code Playgroud)
检查数据是否为空|| undefined || 空白字符串.
当我尝试使用
if(data !== null)
//work here
Run Code Online (Sandbox Code Playgroud)
Resharper向我抛出了一个可怕的错误
"限定符可以为null或undefined"
我添加了一个jFiddle只是为了澄清:JsFiddle
我的问题是:这是一个ReSharper错误还是背后有什么东西?
Jus*_*ner 11
首先,你的习惯是错误的.使用:
if(data !== "")
Run Code Online (Sandbox Code Playgroud)
只检查一个空字符串.如果data
是undefined
或null
,if块仍将执行,因为!==
检查相等而不执行任何类型转换.
其次,ReSharper没有问题.它试图告诉你,你可能犯了一个错误.if(data !== null)
只会检查null.undefined
并且空字符串仍将返回true并导致块执行.ReSharper警告你,你可能犯了一个错误(因为你很少需要检查null
).
记住这一点undefined !== null !== ""
.您可以尝试几个正在提及的快捷方式,但如果您真的希望您的代码是彻底的,只需检查所有三个.如果您担心代码太长,请将检查移至实用程序方法:
function hasValue(var data) {
return (data !== undefined) && (data !== null) && (data !== "");
}
Run Code Online (Sandbox Code Playgroud)
简而言之,var
就是null
它不指向任何地方.另一方面,var
等""
于是指向包含空字符串的变量的已定义var.这本质上是不同的.
[编辑]
正如@jfriend00正确指出的那样,null
是javascript中的特定值.那么null
差异就是一个不同的值""
,它是一个空字符串,因此不是null.
var
未初始化的正确值是undefined
.