当涉及对象文字时,JavaScript是否提升if语句

Does JavaScript hoist if statements when object literals are involved?

本文关键字:是否 if 语句 JavaScript 对象 文字      更新时间:2023-09-26

var foo = {}; 
document.body.innerHTML = console.log = location.hash = 'Hi ' + '<br>  ' + foo.bar + '<br>  ' + foo.baz; 
setTimeout(function()
           {
  foo.baz = foo["bar"] = []; 
  foo.bar.push(new Date); 
  foo.baz.push(new Date); 
  document.body.innerHTML = console.log = location.hash = 'Hi ' + '<br>  ' + foo.bar + '<br>  ' + foo.baz}, 
           5000);

由于将node.bar设置为等于false,因此无论是否附加属性,(node.foo && node.bar)都将计算为false。与其检查这些属性是否为true,不如检查它们是否未定义:

if (typeof node.foo !== 'undefined' && typeof node.bar !== 'undefined') 
{ 
  ...
} 
else 
{
  ...
}

看起来它可能依赖于实现:

可以在步骤1中创建的对象在上述方法之外是不可访问的。实现可能会选择避免实际创建对象。使用此内部方法的这种实际属性访问只有在调用访问器函数时才会产生可见效果。

因此,与其访问属性,不如字符串化并按值传递。

参考

  • ECMA脚本-5:第8.7.2节注释