为什么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);