我试图在下面做一个非常简单的IIFE,
<script type="text/javascript">
var obj = new Object;
(function(_obj) {_obj.prop = 'defined';})(obj);
if(typeof obj.prop === undefined)
alert('undefined');
else
alert(obj.prop);
</script>
为什么脚本警告“未定义”而不是“已定义”?
@EDIT
脚本应该按预期工作,除了:
typeof obj.prop === undefined
错误,但应使用obj.prop === undefined
。当省略下面的括号时,脚本无法按预期工作,但没有从rhino引发语法错误。
function(_obj) {_obj.prop = 'defined';}(obj);
答案 0 :(得分:3)
您的代码提醒'defined'
但出于错误的原因。
此...
typeof obj.prop === undefined
应该是这个......
obj.prop === undefined
...因为typeof
返回一个表示对象类型的字符串。
在测试typeof
时,请勿使用undefined
黑客攻击。它令人困惑,可能是您遇到的错误的来源。
如果您担心重新定义undefined
,请执行此操作...
obj.prop === void 0
答案 1 :(得分:1)
应该是:
if ( typeof obj.prop === 'undefined' )
typeof
运算符返回字符串。
答案 2 :(得分:1)
typeof
返回一个字符串。所以,你需要;
if(typeof obj.prop === "undefined")
修复此问题后,代码似乎按预期工作:http://jsfiddle.net/jfriend00/KJBjG/