Javascript:函数参数未定义

时间:2016-10-10 07:19:25

标签: javascript undefined

对于变量x,请typeof x === 'undefined'

我编写了一个函数,用于检查变量是否为undefined

var isUndefined = function(obj){
  return typeof obj == 'undefined';
};

以下是两种情况:

  1. console.log(typeof x === 'undefined') // returns true
  2. isUndefined(x) // throws this error ReferenceError: x is not defined
  3. 为什么我不能在这里传递未定义的变量?

4 个答案:

答案 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)

因为要作为参数传递,它必须驻留在内存中。