对于变量x,请typeof x === 'undefined'
我编写了一个函数,用于检查变量是否为undefined
var isUndefined = function(obj){
return typeof obj == 'undefined';
};
以下是两种情况:
console.log(typeof x === 'undefined') // returns true
isUndefined(x) // throws this error ReferenceError: x is not defined
为什么我不能在这里传递未定义的变量?
答案 0 :(得分:4)
见post。您必须了解未定义和未声明变量之间的区别。
至少你会这样做:
var x; //undefined until assignment;
isUndefined(x); // returns true;
答案 1 :(得分:1)
基本上,undefined表示值,这些值不是由用户正式定义的。考虑一下你的例子:
var isUndefined = function(obj){
return typeof obj == 'undefined';
};
因此,isUndefined()
在没有任何参数的情况下调用时,obj的值将在函数中未定义。
答案 2 :(得分:1)
未声明变量x
,但您在全局范围内询问typeof
typeof x === 'undefined' // Returns true
相当于以下
typeof window.x === 'undefined' //True
但是下面的代码
x === undefined //Throws error
并且
x in window //Throws Error
因为永远不会在全局范围内使用任何标准JavaScript数据类型设置或声明变量。
阅读MDN博客,其中声明:
JavaScript是一种静态范围的语言,因此可以通过查看是否在封闭的上下文中声明来了解是否声明了变量。唯一的例外是全局范围,但全局范围绑定到全局对象,因此可以通过检查全局对象上是否存在属性来检查全局上下文中是否存在变量
现在,在调用isUndefined
函数时,您将传递未在父作用域中声明的变量x
的引用,并在函数作用域中运行代码,尝试引用{{ 1}}。
由于x
没有声明,因此javascript解释器在运行时没有任何意义或值传递给x
。因此抛出引用错误要求develeper至少声明变量,当未分配任何值时,将默认设置为原始类型isUndefined
。
现在通过将x设置为基本类型undefined,如下所示
undefined
或
var x; // Equivalent to window.x
现在,JavaScript解释器知道在全局范围var x = undefined; //Equivalent to window.x = undefined
中声明了一个名为x
的变量,并将其设置为原始数据类型。以下陈述变为window
:
true
答案 3 :(得分:-1)
因为要作为参数传递,它必须驻留在内存中。