Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
`x=y,z` JavaScript中的逗号赋值_Javascript_Variable Assignment_Assignment Operator_Assign_Iterable Unpacking - Fatal编程技术网

`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;