来自非 javascript 背景,我试图将我的头脑围绕“未定义”。 我写了一个“isUndefined”函数如下:
function isUndefined(value) {
return (typeof value === 'undefined');
}
如果我在我的源代码中输入这个(变量“boo”不存在),我会得到预期的结果“undefined variable”。
if (typeof boo === 'undefined') {
console.log('undefined variable');
}
如果我输入以下内容:
console.log (isUndefined(undefined));
我得到预期的结果“真”
如果我输入:console.log(isUndefined(boo));
我得到:
Reference Error: boo is not defined.
我希望得到“真”——所以我的问题是为什么第一个“直接”检查未定义返回预期结果,但测试它的 function() 却没有?
最佳答案
恰好包含 undefined
值的现有变量与根本不存在的变量是有区别的。如果变量名称不存在,则尝试引用它是错误的。
typeof
运算符是一个特例:它确实接受一个名称,即使没有该名称的变量。但仅当名称实际使用和 typeof
运算符时。
在您的函数示例中,您使用了一个不存在的名称,并且没有 typeof
运算符在使用该名称的地方。这就是错误发生的地方。将名称传递给将使用 typeof
的函数并不重要;该函数永远不会被调用,因为错误已经发生。
如果您给它一个现有的变量名,您的函数将按预期工作。然后它会告诉您该变量是否具有 undefined
值:
var boo; // now boo exists but has the undefined value
console.log( isUndefined(boo) ); // will log 'true'
如果您正在检查一个全局变量,那么如果您使用 window.boo
而不仅仅是 boo
就可以了。那是因为引用对象不存在的属性不是错误;当你这样做时,它只会给你 undefined
值:
// logs 'true' if there is no global 'boo'
console.log( isUndefined(window.boo) );
不过,如果您想检查 local 变量是否存在,那将不起作用,因为它不是 window
对象的属性。
关于javascript - 理解函数和未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17265706/