Javascript null检查没有按预期工作

Javascript null checking not working as expected

本文关键字:工作 null 检查 Javascript      更新时间:2023-09-26

我使用AngularJS作为我的框架,也连接到一个webservice来获取一些JSON数据。我有以下代码:

$login.onlineLogin($scope.credentials).
    success(function (data, status, headers, config) {
        if (data !== null ) {
            console.log('Successful Login!');
            console.log('Returned data: ' + data);
        } else {
            console.log('Failed to Login...');
        }
    }).
    error(function (data, status, headers, config) {
        console.log('HTTP Error...');
    });

现在,当HTTP调用返回时,状态仍然可能是200:OK,但是它返回的对象可能是空的,例如在用户提供错误的用户凭据的情况下。所以我期望在这种情况下发生的是,如果对象不为空,它会打印出"成功登录!"’,然后打印出对象。

然而,现在发生的事情是我使用了一些假凭据,所以webservice返回null。但仍然是"成功登录!"'被打印出来,然后在它打印'Returned data: null'之后…这说不通啊。如果数据是空的,它甚至不应该在那个代码块中结束?

代替

if (data !== null ) {
    .....
}

使用这个

if(data) {
    ....
}

这将检查空字符串(""), null, undefined, false和数字0NaN

如果你不确定你的变量使用的类型,

console.log(typeof variableName)

在您的情况下,您的问题可以使用

来解决
if (data != 'null') {
...

==和===有区别。JavaScript有严格(===)和类型转换(==)相等比较。

当两个字符串具有相同的字符序列、相同的长度和在相应位置的相同字符时,它们是严格相等的。当两个数字在数值上相等(具有相同的数值)时,它们是严格相等的。NaN不等于任何东西,包括NaN。正零和负零彼此相等。如果两个布尔操作数都为真或都为假,则两个布尔操作数严格相等。如果两个对象引用同一个对象,则它们严格相等。Null和Undefined类型是==(但不是===)。[即Null==Undefined(但不是Null===Undefined)]

if (data != null ) {
          console.log('Successful Login!');
          console.log('Returned data: ' + data);
        } else {
          console.log('Failed to Login...');
        }