当涉及对象文字时,JavaScript是否提升if语句
Does JavaScript hoist if statements when object literals are involved?
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节注释
相关文章:
- 是否可以将鼠标悬停(evt)与if条件结合使用
- 在JavaScript / jQuery中,是否有一种更短的方法可以编写在同一个测试变量上具有许多OR的“if”语句
- if语句中的第4行是否从第2行开始
- 如何在函数中编写 if/else 语句,告诉我一个数字是否可以被 2 整除(在 javascript 中)
- If.else语句检查NaN和空字符串是否在JavaScript中不起作用
- 检测是否按下了if语句的数字键
- 是否可以使用相同的变量使ng if的行为类似于ng show/ng hide
- 在条件(if)结构的条件语句中是否有定义变量的有效方法
- 是否可以创建涉及按钮的 if 语句
- 检查布尔键是否存在并将其包含在 if 语句中的最有效方法
- 用于确定是否存在多个变量的 if 语句简写
- 确定是否已在 if 语句中选择任何选项
- 创建 if 语句以指示是否应使用 if 语句
- 在 JS 中使用 if else 语句来检查 HTML 表单元素是否等于某个数字
- 设置一个 if else 函数来检测它是否是元音
- 是否可以使用 JavaScript 的 “if” 语句的值
- 检查 Javascript 变量是否在任何 if 语句中使用
- 是否可以仅在 if 语句返回 true 时才调用函数
- 在 Javascript 中使用 if 语句来确定 Google 电子表格中的单元格是否有内容
- Javascript 使用 if(foo) 存在来检查是否设置了变量