use*_*313 4 javascript syntax operators
我最近一直在努力教自己Javascript,并且我注意到各种不同作者使用的几种略显古怪的语法选择.通常我可以把它们搞清楚,但是这个让我感到困惑.
这篇文章的作者创建了一个空对象colors,它将包含页面中每种背景颜色的一组属性.每个颜色属性的值等于该颜色覆盖的总面积.为此,他使用以下语法:
// ...set or override it in the colors object,
// adding the current element area to the
// existing value.
colors[bgColor] = (colors[bgColor] >> 0) + nodeArea;
Run Code Online (Sandbox Code Playgroud)
此时,由bgColor的值命名的属性可能存在也可能不存在于对象中.如果这是第一次看到颜色,则括号中表达式的意图可能是返回运行总计或0.我的问题是,这是右移操作符过载而我正在寻找错误的名称,或者为什么右移这样做?
如果这是第一次看到颜色,则括号中表达式的意图可能是返回运行总计或0.我的问题是,这是右移操作符过载而我正在寻找错误的名称,或者为什么右移这样做?
它没有重载(JavaScript没有运算符重载).它依靠的事实,undefined >> 0
是0
和anyNumber >> 0
是anyNumber
(警告跟随).如果该属性尚不存在,那么查找它就会产生undefined
,因此>> 0
将其转化为0
.如果该属性被定义,并包含适合在32位的整数,>> 0
返回的数量而不改变它.(如果数字有一个小数部分,它被截断,如果它不适合32位,如果我正确读取它就会被包裹,但我不认为那是编码器试图做的.)所以通过这样做,然后添加区域,他们确实增加了一个运行总计(或者如果还没有那么初始化它).
它主要是一个速记版本:
if (colors[bgColor]) {
colors[bgColor] += nodeArea;
}
else {
colors[bgColor] = nodeArea;
}
Run Code Online (Sandbox Code Playgroud)
...(因为任何假值>> 0
都是0
)但是增加的特征是它总是会导致NaN
提供nodeArea
的非NaN
数字是非数字,而对于colors[bgColor]
({}
例如)有一些真实的非数字值,"长" "上面的版本会导致字符串或在NaN
.
归档时间: |
|
查看次数: |
69 次 |
最近记录: |