2

我尝试在下面做一个非常简单的 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>

为什么脚本警告“未定义”而不是“已定义”?

@编辑

该脚本应该按预期工作,除了:

  • unintendedtypeof obj.prop === undefined是错误的,但obj.prop === undefined应该改为使用。
  • 当省略下面的括号时,脚本不会按预期工作,但不会从 rhino 引发语法错误。

    function(_obj) {_obj.prop = 'defined';}(obj);

4

3 回答 3

3

您的代码发出警报'defined',但原因错误。

这个...

typeof obj.prop === undefined

应该是这个……

obj.prop === undefined

...因为typeof返回一个表示对象类型的字符串。


测试时不要使用typeofhack undefined。它令人困惑,并且可能是您遇到的错误的根源。

如果您担心undefined被重新定义,那么请这样做...

obj.prop === void 0
于 2012-02-26T20:10:19.323 回答
1

应该:

if ( typeof obj.prop === 'undefined' )

typeof运算符返回字符串。

于 2012-02-26T20:10:14.423 回答
1

typeof返回一个字符串。所以,你需要;

if(typeof obj.prop === "undefined")

解决此问题后,代码似乎按预期工作:http: //jsfiddle.net/jfriend00/KJBjG/

于 2012-02-26T20:10:20.853 回答