我创建了一个函数来获取有关变量的类型信息。除一种情况外,该功能非常有效。如果我传递 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
答案 0 :(得分:3)
错误不是来自函数内部,而是来自函数调用。换句话说,尝试在函数调用中引用未定义的变量是错误。你不能强迫语言允许你这样做;它只是错误的。
现在,这应该没问题:
var obj = {};
alert( getType( obj.noSuchProperty ) );
答案 1 :(得分:1)
问题不在于thisisundefinedvariable
是undefined
,而是未声明。
您无法对未声明的变量执行任何操作(除非为当时指定值,然后仅在未处于严格模式时)。
当您尝试将变量传递给函数时,会发生错误,而不是在函数内部执行任何操作。
要声明它,请使用var
。
var thisisundefinedvariable;
getType(thisisundefinedvariable);
或者,传递一个未定义的对象属性:
var ob = { foo: 1 };
getType(ob.bar);