javascript - 如何在 javascript (ES5/6) 中计算圆括号(圆括号)

标签 javascript parentheses

考虑以下情况,它可以(作为示例)用于执行单行交换:

let a = (10,20)
console.log(a)
> 20

执行交换的示例

let a = 1, b = 2
a = b + (b=a, 0)
console.log(a, b)
>2,1

我习惯于看到用括号包裹函数声明来创建自调用函数,但我不确定在上述情况下发生了什么。 javascript 如何处理 (10,20)(b=a, 0)?它是一个返回最终值的函数,还是一个在访问时总是给出最后一项的数据类型,还是其他什么?


澄清一下,我不是在寻找有关如何执行交换的技巧,而是在寻找对上述语法的解释。

最佳答案

这里的关键不在于括号,它们只是用于分组,而是 comma operator .逗号运算符从左到右计算其操作数,丢弃最终操作数值以外的结果值,最终操作数的值成为结果。

所以交换操作是这样的:

  1. 评估赋值的右侧,b + (b=a, 0)

    1. 获取b的当前值(比如2)

    2. 评估(b=a, 0)

      1. 计算b=a,将a(1)的当前值赋值给b
      2. 丢弃该赋值的结果(但保留副作用)
      3. 计算0并将其作为逗号表达式的结果
    3. 现在 2 + 02

  2. 将该值分配给 a

因此,通过将 a 的原始值复制到 b 中,成功交换了 ab 1.2.1,在第1.1步(获取改变b前的值)和第2步(把a 中的那个值)。


旁注:进行交换的现代(ES2015+)方法是使用解构符号:

([a, b] = [b, a]);

实例:

let a= 1, b = 2;
([a, b] = [b, a]);
console.log("a", a);
console.log("b", b);

关于javascript - 如何在 javascript (ES5/6) 中计算圆括号(圆括号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47156527/

相关文章:

javascript - 使用正则表达式解析 javascript 函数之间的数据

JavaScript 括号 (1,2,3,4,5)

Javascript 从 ? 数组的长度构建一个字符串,

javascript - 如何从外部 html 页面获取到正在运行的 GWT 页面的回调?

Ruby Kernel.raise 方法在将参数括在括号中时抛出错误

ruby - Ruby 函数调用的括号化的主要风格是什么?

java - 我将使用什么代码将括号括在所有出现的术语/子字符串周围?

javascript - 如何在 JavaScript 中将数组转换为字符串

javascript - 按键上有多个箭头键

javascript - 将参数传递给回调函数