2012-03-25 131 views
6

由于gdoron指出,[b] [b = a,0]如何在a和b之间交换?

var a = "a"; 
var b = "b"; 

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

将交换ab,虽然它看上去有点哈克,它引发了我的好奇,我在它的工作原理很好奇。这对我没有任何意义。

+2

_“有点哈克”_ ???很多hacky ... :-) – gdoron 2012-03-25 21:59:27

+0

相关:[交换两个参数值有什么更好的方法?](http://stackoverflow.com/questions/8482402/whats-a-better-way-to-swap-双参数值) – 2012-03-25 22:05:30

+0

对Godron的其他答案发表评论并要求澄清您的原始问题是否更有意义? – 2012-03-25 22:36:51

回答

7
var a = "a"; 
var b = "b"; 

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

让我们最后一行到打碎:

[b]  // Puts b in an array - a safe place for the swap. 
[b = a] // Assign a in b 
[b = a,0] // Assign a in b and return the later expression - 0 with the comma operator. 

所以最后是a =[b][0] - 的[b]阵列中的第一个对象=>b分配给a

Live DEMO

阅读@am不是我在这个问题上的意见:
When is the comma operator useful?
这是他的代码......

+0

所以当'b'被放入数组中时,它是安全的吗? – 2012-03-25 22:01:23

+1

@Derek。当'b = a'时它不会丢失 – gdoron 2012-03-25 22:02:30

1

这可能有助于(或阻碍)认为它的语义上等价的λ建设方面(在这里,参数c取元素0的地方):

a = (function(c) { b = a; return c; })(b); 
相关问题