一行中的多个变量赋值

时间:2012-07-17 00:11:53

标签: javascript

由于每种编程语言都不同,而且我对Javascript的体验是基本的,我想知道,如何评估一行中的多个变量赋值

示例:

 a = b = c = d = 5;

此类声明会将5分配给4个变量abcd吗?

感谢。

4 个答案:

答案 0 :(得分:16)

简短回答是,该陈述会将5分配给4个变量abc和{{}中的每一个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 = 5set,因为声明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,依此类推。