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

为什么javascript中的函数不接受未定义的变量?,javascript,types,Javascript,Types,我创建了一个函数来获取变量的类型信息。除了一种情况外,该函数工作得非常好。如果我传递一个未定义的变量,浏览器不会执行任何代码并显示错误。功能如下: function getType(v) { if (typeof v === 'undefined') return 'undefined'; else if (v === null) //typeof v will return object if it is null return 'null';

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

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);
控制台显示引用错误,根据代码,它必须返回未定义

编辑

浏览器已经疯了。有什么区别:

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

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

现在,这应该可以了:

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

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

现在,这应该可以了:

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

问题不在于
这是未定义的
未定义的
,而是它未声明

您不能对未声明的变量执行任何操作(除非将值分配给then,并且仅当您不处于严格模式时)

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

要声明它,请使用
var

var thisisundefinedvariable;
getType(thisisundefinedvariable);
或者,传递未定义的对象属性:

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

问题不在于
这是未定义的
未定义的
,而是它未声明

您不能对未声明的变量执行任何操作(除非将值分配给then,并且仅当您不处于严格模式时)

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

要声明它,请使用
var

var thisisundefinedvariable;
getType(thisisundefinedvariable);
或者,传递未定义的对象属性:

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