我试过做一个非常简单的生活,

<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>

为什么脚本会导致"undefined"而不是"defined"?

@编辑

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

  • 意料之外的 typeof obj.prop === undefined 是错的,但是 obj.prop === undefined 应改为使用。
  • 当省略下面的括号时,脚本不能按预期工作,但没有从rhino引发语法错误。

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

有帮助吗?

解决方案

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

这个。..

typeof obj.prop === undefined

应该是这个。..

obj.prop === undefined

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


不要使用 typeof 测试时的黑客攻击 undefined.它令人困惑,并且可能是您遇到的错误的来源。

如果你这么担心的话 undefined 被重新定义,然后这样做。..

obj.prop === void 0

其他提示

应该是:

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

typeof运算符返回字符串。

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

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

代码似乎在修复此问题后按预期工作: http://jsfiddle.net/jfriend00/kjbjg /

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top