Appearance
JavaScript 冷知识
JavaScript 中不太为人知(有些不建议使用)的特性,在此收集一下。
标签语句(不建议使用)
此时,foo 被当作 obj 对象一个属性。
js
function bar() {}
const obj = {
foo: bar()
}
当去掉赋值操作,{} 被当作是一个代码块解析,和 for/while 循环以及 if 条件语句中代码块的作用基本相同,此时 foo 是语句 bar()的标签(后面没有;)。
js
{
foo: bar()
}
continue 和 break 语句都可以带一个标签,因此能够像 goto 那样进行跳转,但并非跳转到标签 foo 所在位置继续执行,而是“执行 foo 循环的下一轮循环。
js
foo: for (let i = 0; i < 4; i++) {
for (let j = 0; j < 4; j++) {
if (i === j) {
continue foo
}
console.log(i, j)
}
}
// 1 0
// 2 0
// 2 1
// 3 0
// 3 1
// 3 2
奇特的~运算符
~x 大致等同于-(x+1)
js
const arr = [1, 2, 3]
// 不够优雅
if (arr.indexOf(item => item === 3) > -1) {
// ...
}
// 真不错
if (~arr.indexOf(item => item === 3)) {
// ...
}