为什么javascript中的函数不接受未定义的变量?

时间:2014-04-12 15:13:55

标签: javascript types

我创建了一个函数来获取有关变量的类型信息。除一种情况外,该功能非常有效。如果我传递 undefined 变量,浏览器不会执行任何代码并显示错误。以下是功能:

function getType(v) {
    if (typeof v === 'undefined')
        return 'undefined';
    else if (v === null) //typeof v will return object if it is null
        return 'null';
    else if (v instanceof Array) //typeof v will return object if it is an array
        return 'array';
    else 
        return typeof v;
}

示例:

getType(thisisundefinedvariable);

控制台显示引用错误,根据代码,它必须返回undefined。

修改

浏览器疯了。区别是:

getType(thisisundefinedvariable); //This does not work
             AND
getType(window.thisisundefinedvariable); //This works

2 个答案:

答案 0 :(得分:3)

错误不是来自函数内部,而是来自函数调用。换句话说,尝试在函数调用中引用未定义的变量是错误。你不能强迫语言允许你这样做;它只是错误的。

现在,这应该没问题:

var obj = {};
alert( getType( obj.noSuchProperty ) );

答案 1 :(得分:1)

问题不在于thisisundefinedvariableundefined,而是未声明

您无法对未声明的变量执行任何操作(除非为当时指定值,然后仅在未处于严格模式时)。

当您尝试将变量传递给函数时,会发生错误,而不是在函数内部执行任何操作。

要声明它,请使用var

var thisisundefinedvariable;
getType(thisisundefinedvariable);

或者,传递一个未定义的对象属性:

var ob = { foo: 1 };
getType(ob.bar);