javascript – 这两个变量如何使用一行进行交换?

参见英文答案 >
How does [b][b = a,0] swap between a and b?                                    2个

我不知道如何学习demo 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

最佳答案

//   v---- 1.  v---- 3.
a = [b][b = a, 0];
//      ^---^-- 2.

>将b变量的值放入新数组中.
>下一组方括号是用于获取索引的成员运算符.在这种情况下,该空间用于将变量的值重新分配给b变量.这可以完成,因为b的原始值安全地在数组中(从步骤1开始).
>用逗号运算符分隔,然后将0索引用作要检索的数组的实际值,如果您将调用该值,则为原始b值.然后通过线上的first =赋值将其分配给a.

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

这也可以这样写:

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

现在唯一的区别是Array的第二个索引用于执行赋值.可能有点清楚这样.

点赞