为什么!==""不等于!== null

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)

只检查一个空字符串.如果dataundefinednull,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)


Ben*_*ter 5

简而言之,var就是null它不指向任何地方.另一方面,var""于是指向包含空字符串的变量的已定义var.这本质上是不同的.

[编辑] 正如@jfriend00正确指出的那样,null是javascript中的特定值.那么null差异就是一个不同的值"",它是一个空字符串,因此不是null.

var未初始化的正确值是undefined.

  • 你在这里定义`null`时要非常小心.`null`是javascript中的特定值.变量ONLY包含`null`,如果它是专门赋值的那样.尚未初始化的变量将是"undefined",而不是"null". (4认同)