`x=y,z` JavaScript中的逗号赋值
可能重复:`x=y,z` JavaScript中的逗号赋值,javascript,variable-assignment,assignment-operator,assign,iterable-unpacking,Javascript,Variable Assignment,Assignment Operator,Assign,Iterable Unpacking,可能重复: 我在阅读时遇到了代码(按Ctrl+F组合键搜索安德烈·布雷顿(Andre Breton)): //函数返回“伞”斐波那契数数组 功能科莱特(雨伞){ var楼梯=0,加隆=0,百老大=1,无敌舰队=[加隆,百老大],巴松管; Array.prototype.拥抱=[].push; 而(2+楼梯+++
我在阅读时遇到了代码(按Ctrl+F组合键搜索安德烈·布雷顿(Andre Breton)):
//函数返回“伞”斐波那契数数组
功能科莱特(雨伞){
var楼梯=0,加隆=0,百老大=1,无敌舰队=[加隆,百老大],巴松管;
Array.prototype.拥抱=[].push;
而(2+楼梯+++<雨伞){
巴松管=大帆船+双桅帆船;
无敌舰队。拥抱(双桅帆船=双桅帆船,巴松管);
}
返回无敌舰队;
}
x=(y=x,z)
构造意味着什么?或者更具体地说,y=x,z
是什么意思?我称之为逗号赋值,因为它看起来像赋值,并且有一个逗号
,这意味着元组解包(或者在本例中是打包)。这里也是这样吗?这是逗号运算符 逗号运算符计算其两个操作数(从左到右) 并返回第二个操作数的值 计算a、b、c、…、n时的结果值始终为 最右边表达式的值,但是 仍然会对链进行评估(从左到右)
因此,在您的情况下,仍将评估分配,但最终值将为巴松管 结果:
galleons = brigantines
brigantines = bassoon
armada.embrace(basson)
更多信息:
var
语法允许多重赋值,因此当您看到以下内容时,您将使用一条var
语句声明多个变量
var a, b, c;
请注意,此语法不是逗号运算符
,
可以用作。它只是计算一系列表达式。因此,当您看到以下语法时,您将看到一系列表达式被计算,最后一个表达式的返回值被返回
x = (y = x, z)
在参数中,x
被分配给y
,然后z
被计算并从()
返回,并分配给x
我认为这种语法不清楚,没有什么好处。逗号操作数计算其所有操作数并返回最后一个操作数。在这种情况下,如果我们使用
x = (y = x, z);
或
它的作用是去掉这一行代码。充其量是中性的,平均来说是有害的。典型的JavaScript:/编程语言只能和使用它的程序员一样好!;-)您可以使用JVM(在Java中)做一些非常讨厌的事情来干扰其他程序员(在执行过程中更改类定义?检查)。C/C++中的指针也是如此(我指的是滥用
*(*(*(*(*(*(*(*(*(*pщ)))
,而不是合法的指针使用)。在PHP中?别让我开始。。!但我肯定会禁止在良好实践中使用逗号。我必须承认,我甚至想不出它有什么合法的用途(当然除了声明变量和枚举之外)。@YatharthROCK没有必要把代码放在一行上。就这么简单,你为什么要这么做?它实际上使用了更多的字符(9而不是8)。那么有什么可能的理由呢?@YatharthROCK最好使用单语句而不是逗号运算符,但有时这只是作者的偏好。如果变量名很短,并且目标是x=(y=x,z)代码>很容易理解,那么我假设这样写是可以的。不,不是。我看不出有什么理由不把它写成y=x;x=z
还有坏的影响,你已经知道了。耶哈特:那丑陋的代码真的没有意义。坦率地说,我不知道为什么有人会使用它,除了把未来的程序员搞得一团糟(或者这就是全部的意义,确保他仍然是这个项目上唯一的程序员?)。就像PHP中的那些人一样:$hi='oo!'$myVar=‘hi’$a=‘myVar’;回声$$$a//“哦!”代码>-有些男人只想看着世界燃烧。我会像在我的回答(结果部分)中那样写它。除非巴松管的值是未定义的,那么加伦=brigantines
x = (y = x, z);
y = x;
x = z;