javascript - 理解函数和未定义

标签 javascript

来自非 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/

相关文章:

javascript - Angular 2 组件内的 polymer 元素

javascript - 如何增强迭代回调的 javascript 函数?

javascript - 生成csv文件时转义特殊字符

javascript - JS : XMLHttpRequest only works on specific file extensions?

javascript - 在Javascript中获取数字之间的数字步骤

javascript - JavaScript 中的 getYear() 返回 118

javascript - jQuery 无法分配给函数结果

javascript - 如何在javascript中从CSS类对象获取值

javascript - 未处理的 Promise 拒绝 : Template parse errors on Angular 2

javascript - jquery ajax不起作用(服务器端是ASP.net)