在javascript中测试null变量而不会导致未定义的错误

时间:2013-11-22 04:46:08

标签: javascript jquery null

我正在尝试显示各种javascript null检查技术的结果。 codepen

然而,当我的变量实际上为null时它会中断并且我没有得到html输出。我在控制台中收到错误“y未定义”。我知道它是未定义的,但我试图让它通过循环来给你每个测试结果。我似乎无法弄清楚可能出现的问题。任何帮助都会很棒。

//var y = "im y";

var test1 = function () {
if (typeof (y) === 'undefined') {
    return "test 1 y is undefined";
} else {
    return "test 1 y is defined";
}
};

var test2 = function () {
if (!y) {
    return "test 2 y is undefined";
} else {
    return "test 2 y is defined";
}
};

var test3 = function () {
if (y === null) {
    return "test 3 y is undefined";
} else {
    return "test 3 y is defined";
}
};

var test4 = function () {
if (y == null) {
    return "test 4 y is undefined";
} else {
    return "test 4 y is defined";
}
};

var test5 = function () {
if (typeof (y) === undefined) {
    return "test 5 y is undefined";
} else {
    return "test 5 y is defined";
}
};

var a = [test1, test2, test3, test4, test5];
var b = [test1(), test2(), test3(), test4(), test5()];
var somehtml = [];

$.each(a, function (index) {
somehtml.push('<pre>' + a[index] + '</pre>');
var x = b[index];
somehtml.push('<p>' + x + '</p>');
});
$("div#stuff").html(somehtml.join(""));

3 个答案:

答案 0 :(得分:0)

简单检查如下

if (y) {
alert("defined");
return "test 1 y is defined";    

} else {
alert("not defined");
 return "test 1 y is undefined";   
}

答案 1 :(得分:0)

首先,undefined!= null。第二,未定义!='未定义'。

您的代码示例按预期运行。我建议你阅读javascript type coercion and truthy/falsy values。然后开始使用javascript文件顶部的"use strict";以避免混淆。

答案 2 :(得分:0)

抱歉,我没有正确理解。我只从评论中了解您的问题。 。您在控制台中收到错误,因为您正在运行其他测试,如

if (!y) {

if (y === null) {

即使yundefined,也会在您的控制台中触发错误。

你的逻辑应该是,如果找到变量undefined,那么不要做其他测试,否则就做。

测试

if (typeof (y) === 'undefined') {
仅当变量未定义且空值将通过

时,

才为真

根据以下评论更新

请参阅this fiddle。这有我传达的想法。还有一个建议是你可以想到链接函数而不是在循环中触发它们。