4

我不知道如何学习演示 2,因为它对我来说很难。

//demo1.js
var a = 1;
var b = 2;
var c;

c = b;
b = a;
a = c;

log(a);   // a = 2
log(b);   // b = 1   I can read this one.


//demo 2.js

var a = 1, b = 2;
a = [b][b = a, 0];   // why? '0' is a varible?
console.log(a,b) //output a = 2, b =1
4

2 回答 2

2
//   v---- 1.  v---- 3.
a = [b][b = a, 0];
//      ^---^-- 2.
  1. b变量的值放入一个新的数组中。

  2. 下一组方括号是用于获取索引的成员运算符。在这种情况下,该空间用于将变量的值重新分配ab变量。可以这样做,因为bArray 的原始值是安全的(从步骤 1 开始)

  3. 用逗号分隔,0然后将索引用作要检索的 Array 的实际值,如果您回想一下,它就是原始b值。然后a通过线路上的第一个=分配分配给它。

总而言之,b放在数组中,并通过0索引检索并分配给a左侧,而不是之前a分配给b (借用[]成员运算符的空间)


这也可以这样写:

a = [b, b = a][0];

现在唯一的区别是 Array 的第二个索引用于执行分配。大概像这样清晰一点。

于 2013-03-26T05:20:11.790 回答
0

Javascript 中的逗号运算符计算其左操作数,将其丢弃并在计算后返回其右操作数。它的唯一用途是当左操作数有副作用(如修改变量的值)但您不想要它的结果时。

[b] 定义了一个包含 b 的数组。

[b = a, 0] 计算 b = a - 所以 b 现在包含 a 的值。然后它把它扔掉。然后它获取 [b] 的索引 0 处的元素 - 返回 b。a 现在包含存储在那里的 b 的值,而不是 b 的最新值,所以我们的交换是成功的(尽管被混淆了)。

于 2013-03-26T05:18:48.397 回答