Javascript 这个奇怪的作业速记是什么?为什么它有效?
我不知道为什么会这样。我无法用任何词语组合来描述它是什么,所以我几乎无法用谷歌搜索它Javascript 这个奇怪的作业速记是什么?为什么它有效?,javascript,Javascript,我不知道为什么会这样。我无法用任何词语组合来描述它是什么,所以我几乎无法用谷歌搜索它 apple = banana = orange = true; console.log(banana); //true 这个奇怪的JavaScript速记是什么?为什么它能工作?在澄清后编辑 据我所知,true的值分配给orange,orange的值分配给banana,banana的值分配给apple。这在java脚本中被称为分号插入,javascript使用了几种规则来检查行是否是有效的js语句。你可
apple =
banana =
orange = true;
console.log(banana); //true
这个奇怪的JavaScript速记是什么?为什么它能工作?在澄清后编辑
据我所知,true的值分配给orange,orange的值分配给banana,banana的值分配给apple。这在java脚本中被称为分号插入,javascript使用了几种规则来检查行是否是有效的js语句。你可以阅读。。 比如说,
function multiply(a, b) {
return
a * b;
}
返回未定义,因为return是有效的js语句。就变成了,
function multiply(a, b) {
return;
a * b;
}
但您的代码与
apple = banana = orange = true;
即使它们在不同的行中,赋值也只是javascript中的一个表达式,并产生右边的值。因此,您的代码片段 其效果与
orange = true;
banana = true;
apple = true;
// (since the literal `true` has no side effects when being evaluated)
布尔值没有什么特别的
1:嗯,不完全一样。但是,这些变量并不重要。您所做的是将多个变量指定给同一个值。它几乎只是说苹果等于香蕉,这等于橘子,这等于真的 这是因为ECMA脚本中定义赋值的方式。为了简化它,为变量赋值AssignmentExpression需要采用以下形式:
LeftHandSide = AssignmentExpression
因为它的末尾有另一个AssignmentExpression,所以可以将其展开以提供
LeftHandSide = LeftHandSide = AssignmentExpression
这就是我们所知道的。这属于语言和上下文无关语法定义领域。如果你学习编译器,这也会出现。可能有助于将所有作业放在一行。@CuriousProgrammer:那你为什么要把它放在引号里?@Bergi你能适当地重新命名我的问题吗?从这些答案中,我看到它不是简写的,但我不确定如何最好地为寻找答案的其他人命名。
LeftHandSide = AssignmentExpression
LeftHandSide = LeftHandSide = AssignmentExpression