Oli*_*ler 1 javascript parentheses
考虑以下情况,可以(作为示例)用于执行单行交换:
let a = (10,20)
console.log(a)
> 20
Run Code Online (Sandbox Code Playgroud)
执行交换的示例
let a = 1, b = 2
a = b + (b=a, 0)
console.log(a, b)
>2,1
Run Code Online (Sandbox Code Playgroud)
我习惯于看到包含函数声明的括号创建自调用函数,但我不确定在上面的情况下发生了什么.如何(10,20)或被(b=a, 0)javascript对待?它是一个返回最终值的函数,还是一个数据类型,当访问它时总会给出最后一个项或其他什么?
为了澄清,我不是在寻找有关如何执行交换的提示,而是对上述语法的解释.
这里的关键不是括号,它只是用于分组,它是逗号运算符.逗号运算符从左到右计算其操作数,丢弃除最终操作数值之外的结果值,这将成为结果.
所以交换操作的工作方式如下:
评估作业的右侧, b + (b=a, 0)
获取当前值b(例如,2)
评估 (b=a, 0)
b=a,将a(1)的当前值分配给b0并将其作为逗号表达式的结果所以现在就是2 + 0这样2
将该值分配给 a
因此,在步骤1.2.1 中成功交换a并b复制a原始值b,并将步骤1.1中b的原始值复制a(在更改前获取值b)和步骤2(将该值放入a).
旁注:现代(ES2015 +)进行交换的方法是使用解构表示法:
([a, b] = [b, a]);
Run Code Online (Sandbox Code Playgroud)
实例:
let a= 1, b = 2;
([a, b] = [b, a]);
console.log("a", a);
console.log("b", b);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |