由于每种编程语言都不同,而且我对Javascript的体验是基本的,我想知道,如何评估一行中的多个变量赋值
示例:
a = b = c = d = 5;
此类声明会将5
分配给4个变量a
,b
,c
和d
吗?
感谢。
答案 0 :(得分:16)
简短回答是是,该陈述会将5
分配给4个变量a
,b
,c
和{{}中的每一个1}}。但是,与上述内容相反,不会将d
分配给5
,然后将d
的值分配给d
,但会为每个分配相同的值变量,从右侧开始。更清楚一点,你的陈述:
c
相当于:
var a, b, c, d;
a = b = c = d = 5;
不到:
var d = 5;
var c = 5;
var b = 5;
var a = 5;
这是一个微妙但重要的区别:在第一种情况下,JavaScript只是为所有变量设置一个值。在第二种情况下,JavaScript 设置所有变量的值但也获取三个变量的值({{1}的值没有在任何地方分配。)
一个简单的代码,将显示:
var d = 5;
var c = d;
var b = c;
var a = b;
在控制台上你应该:
a
正如您所看到的语句// `this` is the global object if you run this code in the global scope.
// In the browsers the global object is `window`.
Object.defineProperties(this, {
"a": {
get: function() {
console.log("get a");
},
set: function(value) {
console.log("set a");
}
},
"b": {
get: function() {
console.log("get b");
},
set: function(value) {
console.log("set b");
}
},
"c": {
get: function() {
console.log("get c");
},
set: function(value) {
console.log("set c");
}
},
"d": {
get: function() {
console.log("get d");
},
set: function(value) {
console.log("set d");
}
}
});
b = c = d = 5;
a = b;
JS仅设置变量,并在set d
set c
set b
get b
set a
上同时调用b = c = d = 5
和set
,因为声明get
。
这种区别非常重要,因为如果你为你的属性定义一些getter并且你不知道这种行为,你最终会使用多个变量赋值出现意外错误。
答案 1 :(得分:5)
大部分是的,但请考虑以下情况:
Object.defineProperty(this, "b", { value : 6, writable : false });
var a, c, d;
a = b = c = d = 5;
console.log(a); // 5
console.log(b); // 6
console.log(c); // 5
console.log(d); // 5
答案 2 :(得分:2)
答案是肯定的。
a=b=c=d=e=f=g=h=4; // all get to be 4
a=b=c=d=e=f=g=h={ p1:"1", p2:"2" }; // same object for all
a.p3 = "3";
console.log((a==b && b==c && c==d && d==e), f); // condition is true, f is now
// {
// p1:"1",
// p2:"2",
// p3:"3"
// }
答案 3 :(得分:0)
您只需尝试了解答案:是。
它的工作原理是赋值采用等号右边的任何内容,并将该值赋给左侧的变量。
因此5
已分配给d
;然后将d
的值分配给c
,依此类推。