Javascript 为什么是!==&引用&引用;不等于!==无效的
最近在JavaScript中,我养成了使用Javascript 为什么是!==&引用&引用;不等于!==无效的,javascript,resharper,Javascript,Resharper,最近在JavaScript中,我养成了使用 if(data !== "") 检查数据是否为空| | |未定义| |空白字符串 当我尝试使用 if(data !== null) //work here Resharper对我犯了一个可怕的错误说 “限定符可以为null或未定义” 我添加了一个jFiddle只是为了澄清: 我的问题是:这是一个重竖琴错误还是背后有什么原因 简言之,var在不指向任何地方时为null。 另一方面,等于“的var是一个定义的var,指向包含空字符串的变量。这本
if(data !== "")
检查数据是否为空| | |未定义| |空白字符串
当我尝试使用
if(data !== null)
//work here
Resharper对我犯了一个可怕的错误说
“限定符可以为null或未定义”
我添加了一个jFiddle只是为了澄清:
我的问题是:这是一个重竖琴错误还是背后有什么原因 简言之,
var
在不指向任何地方时为null
。
另一方面,等于“
的var
是一个定义的var,指向包含空字符串的变量。这本质上是不同的
[编辑]
正如@jfriend00正确指出的,null
是javascript中的一个特定值。不同之处在于,null
是与“
不同的值,后者是空字符串,因此不为null
未初始化的
var
的正确值为undefined
空值和undefined值可以用相同的方式处理
if(typeof data==“undefined”)
将在数据未定义(或null)时返回true,因此
如果数据已定义(因此不为空),则返回true,然后您可以检查它是否为空字符串
if (data.length == 0)
如果字符串为空,则返回true。首先,你的习惯是错误的。使用:
if(data !== "")
将只检查空字符串。如果数据
为未定义
或空
,If块仍将执行,因为==代码>在不执行任何类型转换的情况下检查相等性
其次,ReSharper没有问题。它试图告诉你,你可能犯了一个错误<代码>如果(数据!==null)
将只检查null<代码>未定义和空字符串仍将返回true并导致块执行。ReSharper警告您可能犯了错误(因为您很少只需要检查null
)
请记住,未定义!==空!==“”
。您可以尝试前面提到的几种快捷方式,但如果您真的希望代码完整,只需检查这三种方式即可。如果您担心代码太长,请将检查移至实用程序方法:
function hasValue(var data) {
return (data !== undefined) && (data !== null) && (data !== "");
}
这是一个重拾器错误还是背后有什么原因 由于resharper中的linter,可能会引发错误 要检查数据是否为空| | |未定义| |空白字符串,可以将数据值关联为布尔值(由js隐式完成): 或者明确地这样做:
if(!Boolean(data)){ //same as above
//if data is a falsy value (false, 0, null , undefined, NaN, '' or ""), run
}
你可以检查truthy和falsy值的列表如果你想检查
falsy
值,为什么不直接使用If(data){}
If(data)对于旧版本的IE来说无法正常工作,如果数据未定义,我相信IE7会出错up@jfriend00对于空数组,[]!=“”->错误
但!![]->true
@p.s.w.g-如果要测试空数组,请测试空数组。空数组不是一个错误的值,正在测试!==“
也无法测试空数组,因为这无法区分空数组和完整数组,所以我真的不明白你的意思。我并不是说if(data)
等同于OP使用的内容,只是说这可能是测试truthy/falsey
值的更好方法,这听起来像OP实际想要的。也许这个问题需要更多的上下文。。本例中的数据是一个对象,是否对所有对象、变量类型和数组都没有通用的nullcheck?请在此处小心定义null
null
是javascript中的一个特定值。如果一个变量专门指定了该值,则该变量仅包含null
。未初始化的变量将是未定义的
,而不是空的
。
if(!data) //implicit coercion
if(!Boolean(data)){ //same as above
//if data is a falsy value (false, 0, null , undefined, NaN, '' or ""), run
}