JavaScript中"Equal Sequence"的含义是什么?

6
有时候我会在互联网上看到一些对我来说很奇怪的语法。例如:

这样的格式。
console.log = console.error = console.info = console.debug = console.warn = console.trace = function() {}

这个“等于”序列是如何工作的?

谢谢。

3个回答

5

在赋值语句中,操作是从右向左解析的。因此,最右边的值将填充到所有前面的变量中。


5
一个赋值运算符根据其右操作数的值将一个值分配给其左操作数。请考虑:
a = b = c = d = 5;

表达式从右向左解析,因此:
d = 5,c = d(即5),b = c(即5)等等。
在您的示例中,这些控制台方法都被重新定义为空函数。

查看更多信息:MDN:赋值运算符


1

你所描述的可以通过一个更简单的例子进行类比解释:

// Normal variable assignment
var a, b;
a = 15;
b = 15;
console.log("a: "+a+" , b: "+b);
// Assing the same value to two variables
var c, d;
c = d = 15;
console.log("c: "+c+" , d: "+d);
// Assign the same value to two variables and make it a function
var e, f;
e = f = function(){ console.log("Hi!"); };
// Call both of the variables' functions
e(); f();

从变量 ab 开始,你接着转到了给定相同值的 cd。重要的是,你可以将相同的值分配给两个变量,表达式将从右向左计算,因此实际上就像分别为两个变量赋值一样。但这并不意味着更改一个变量的值也会更改另一个变量的值。
最后,看看发生了什么情况,ef。它们被分配了一个函数而不是一个值,因此你可以像调用函数一样调用它们。 简短版:表达式从右到左解析。赋值是按值而非引用进行的,这意味着更改一个变量的值不会影响其他变量。最后,如果你将函数分配给变量,那么你可以使用它们的名称来调用其值的函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接