最近我从一些网页上读到了关于洗牌数组的Javascript函数的教程。 但是代码的某些部分我没有完全理解。例如:这里是JS小提琴
这里我不明白这个代码部分
this[i] = this[j] + (this[j] = this[i],0);
这是什么意思(this[j] = this[i],0);
?提前致谢
代码只是在进行 1 行交换。
您熟悉标准掉期,对吗?
A = 6, B = 10
X = A
A = B
B = X
现在 B = 6,A = 10
看看你的教程代码
this[i] = this[j] + (...)
意味着分配不会立即进行。相反,必须首先计算括号。但是,浏览器会暂时记下this[j]
的值,实质上是将其复制到X。
现在可以计算(this[j] = this[i],0)
,但是括号返回什么以添加到外部this[j]
?0!所以在括号内,发生了交换的第二步,0 被添加到临时 X 中!
现在计算变得this[i] = this[j] + 0
.交换的第三步!
对于任何带逗号的表达式,将执行所有表达式并返回最后一个表达式。
var a = (1+1, 2+2, 3+3);
// a = 6
对于上述情况:
this[i] = this[j] + (this[j] = this[i], 0);
相当于:
var temp = this[j];
this[j] = this[i];
this[i] = temp + 0;
温度是自动处理的,因为首先评估左侧(this[j]
)。
更多详情