如果涉及对象文字的语句,JavaScript是否会提升?

时间:2013-04-27 00:11:43

标签: javascript callback conditional object-literal hoisting

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

2 个答案:

答案 0 :(得分:1)

由于您将node.bar设置为false(node.foo && node.bar)将评估属性是否附加到false。而不是检查这些属性是否为true,您应检查它们是否未定义:

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

答案 1 :(得分:0)

看起来可能依赖于实现:

  

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

因此,不是访问属性,而是字符串化并按值传递。

<强>参考