以下JavaScript行的目的是什么?
for (p in d) d.hasOwnProperty(p) && h.push([p, d[p]]);
从我所看到的,它没有任何改变。这是否意味着:如果d
具有属性p
和p
并且d[p]
可以推送到h
而不是表达式为真?因此,如果h.push
没有属性d
,则p
永远不会发生。
这正是我讨厌简洁代码的原因。
答案 0 :(得分:1)
这个想法是,当使用&&时,首先评估左侧部分。当且仅当其返回值为真时,才评估正确的部分。
因此,对于每次迭代,首先评估d.hasOwnProperty(p)。如果结果为真,则评估h.push([p,d [p]])。
答案 1 :(得分:0)
这是
的捷径for (p in d) if (d.hasOwnProperty(p)) h.push([p, d[p]]);