在线阅读文档,我对如何在一行中正确定义多个JavaScript变量感到困惑。
如果我想压缩以下代码,那么在一行上定义多个javascript变量的JavaScript“严格”方法是什么?
var a = 0;
var b = 0;
是吗:
var a = b = 0;
或
var a = var b = 0;
等...
答案 0 :(得分:64)
你想要依赖逗号,因为如果你依赖于多重赋值结构,你就会在某一点上射击自己。
一个例子是:
>>> var a = b = c = [];
>>> c.push(1)
[1]
>>> a
[1]
它们都引用内存中的同一个对象,它们不是“唯一的”,因为任何时候你引用一个对象(数组,对象文字,函数)它都是通过引用而不是值传递的。因此,如果您只更改其中一个变量,并希望它们单独行动,那么您将无法获得所需内容,因为它们不是单个对象。
多重赋值也存在缺点,因为辅助变量变为全局变量,并且您不希望泄漏到全局命名空间中。
(function() { var a = global = 5 })();
alert(window.global) // 5
最好只使用逗号,最好使用大量的空格,以便可读:
var a = 5
, b = 2
, c = 3
, d = {}
, e = [];
答案 1 :(得分:38)
没有办法在一行中将赋值作为值。
var a = b = 0;
使b全球化。正确的方法(没有泄漏变量)稍长:
var a = 0, b = a;
答案 2 :(得分:36)
使用Javascript的es6或节点,您可以执行以下操作:
var [a,b,c,d] = [0,1,2,3]
如果您想在一行中轻松打印多个变量,请执行以下操作:
console.log(a, b, c, d)
0 1 2 3
这与@alex grey的答案类似,但这个例子是用Javascript而不是CoffeeScript。
答案 3 :(得分:20)
为什么不分两行呢?
var a, b, c, d; //All in the same scope
a = b = c = d = 1; // Set value to all.
原因是保留变量声明的局部范围,如下所示:
var a = b = c = d = 1;
将导致窗口范围内b
,c
和d
的隐式声明。
答案 4 :(得分:1)
具体根据OP的要求,如果要初始化具有相同值的N个变量(例如0
),则可以使用array destructuring和Array.fill来分配给变量N个0
数组:
let [a, b, c, d] = Array(4).fill(0);
console.log(a, b, c, d);
答案 5 :(得分:0)
请注意,您只能使用数字和字符串
执行此操作 你可以做......var a, b, c; a = b = c = 0; //but why?
c++;
// c = 1, b = 0, a = 0;
答案 6 :(得分:0)
const person = { name: 'Prince', age: 22, id: 1 };
let {name, age, id} = person;
console.log(name);
console.log(age);
console.log(id);
* 您的变量名称和对象索引必须相同
答案 7 :(得分:0)
这是完全正确的:
var str1 = str2 = str3 = "value";
如果改变其中一个值,其他变量的值不会改变:
var str1 = str2 = str3 = "value";
/* Changing value of str2 */
str2 = "Hi Web!";
document.write("str1 = " + str1 + " - str2 = " + str2 + " - str3 = " + str3);