对这个Javascript简写感到困惑
Confused by this Javascript shorthand
本文关键字:Javascript 更新时间:2023-09-26
我不明白这种速记是如何工作的:
nodes.forEach(function(o, i) {
o.y += i & 1 ? k : -k;
o.x += i & 2 ? k : -k;
});
我从来没有见过这样简写的自增运算符
谢谢
表达式i & 1 ? k : -k
求值为k
或-k
取决于i & 1
是否求值为true
&
运算符在两个运算符之间按位进行"与"操作,因此第一个条件检查是否设置了最低有效位,第二个条件检查是否设置了第二个最低有效位。
代码的作用与
相同nodes.forEach(function(o, i) {
if (i & 1) {
o.y += k;
} else {
o.y -= k;
}
if (i & 2) {
o.x += k;
} else {
o.x -= k;
}
});
1
is 0000...0001
2
is 0000...0010
i
可能存储了一组设置为int型位的标志。
i & 1
只测试设置了最后一位,i & 2
测试了设置之前的一位。参见位操作符的MDN。
你可以使用这个系统在一个javascript数字中存储大约52个标志:
i = 0; // no flag
i |= 4; // sets a flag
i |= 1<<2; // sets the same flag but is more readable
var bool = i & 4; // truish if the flag is set
所以你的代码是这样做的:
if i has flag 1 then o.y += k else o.y += -k
if i has flag 2 then o.x += k else o.x += -k
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在Javascript中将JSon对象转换为数组
- Javascript生成的表单未提交
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量