Javascript 空检查没有按预期工作

Javascript null checking not working as expected

我正在使用 AngularJS 作为我的框架,并且还连接到网络服务以获取一些 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,但它 returns 的对象可能为空,例如,在用户提供错误的用户凭据的情况下.所以我期望在这种情况下发生的是,如果对象不为空,它将打印出 'Successful Login!' 然后打印出对象。

但是,现在发生的情况是我使用了一些伪造的凭据,因此网络服务 returns 为空。但是仍然打印了 'Successful Login!',然后打印了 'Returned data: null'... 这没有意义。如果数据为空,它甚至不应该在该代码块中结束?

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

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

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

而不是

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

使用这个

if(data) {
    ....
}

这将检查空字符串 ("")、nullundefinedfalse 以及数字 0NaN .

如果您不确定您使用的变量类型是什么。

console.log(typeof variableName)

对于您的情况,可以使用

解决您的问题
if (data != 'null') {
...