Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么是!==&引用&引用;不等于!==无效的_Javascript_Resharper - Fatal编程技术网

Javascript 为什么是!==&引用&引用;不等于!==无效的

Javascript 为什么是!==&引用&引用;不等于!==无效的,javascript,resharper,Javascript,Resharper,最近在JavaScript中,我养成了使用 if(data !== "") 检查数据是否为空| | |未定义| |空白字符串 当我尝试使用 if(data !== null) //work here Resharper对我犯了一个可怕的错误说 “限定符可以为null或未定义” 我添加了一个jFiddle只是为了澄清: 我的问题是:这是一个重竖琴错误还是背后有什么原因 简言之,var在不指向任何地方时为null。 另一方面,等于“的var是一个定义的var,指向包含空字符串的变量。这本

最近在JavaScript中,我养成了使用

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
}