【发布时间】:2014-07-11 21:58:00
【问题描述】:
我最近一直在尝试自学 Javascript,我注意到不同作者使用的几个稍微古怪的语法选择。通常我可以弄清楚它们,但是这个让我有点难过。
The author of the post here 创建一个空对象colors,它将包含页面中每种背景颜色的一组属性。每个颜色属性的值都等于该颜色覆盖的总面积。为此,他使用以下语法:
// ...set or override it in the colors object,
// adding the current element area to the
// existing value.
colors[bgColor] = (colors[bgColor] >> 0) + nodeArea;
此时,由 bgColor 的值命名的属性可能存在也可能不存在于对象中。如果这是第一次看到颜色,则括号中表达式的意图可能是返回运行总数或 0。我的问题是,这是否是右移运算符被重载而我正在搜索错误的名称,或者为什么右移操作会这样?
【问题讨论】:
-
一个更常见的习语是
colors[bgColor] || 0。 -
请注意 Barmar 所说的。使用
||相当普遍。使用>>并不常见,以至于我几乎从未见过它,而且我阅读了大量源代码。 -
是的。这看起来像是他在一次混淆代码竞赛中注意到的,并决定在生产代码中使用它只是为了聪明。
-
@Barmar 在调查后。在
||和>>之间IS 实际上存在一个有趣的区别。如果 LHS 不是一个数字,它将强制转换为 NaN 并且 0 被传递,所以({}) || 0 !== 0但({}) || 0 === 0。因此,当它实际适用时,请随意使用它。 -
@GeorgeMauer:我想你的意思是
({}) || 0 !== 0(而({}) >> 0 === 0),说得好。我不认为上面代码的作者是这个意思,但它仍然是一个好点。
标签: javascript syntax operators