在线阅读文档时,我对如何在一行中正确定义多个 JavaScript 变量感到困惑。
如果我想压缩下面的代码,在一行中定义多个 JavaScript 变量的正确的 JavaScript“严格”方法是什么?
var a = 0; var b = 0;
是这样吗:
var a = b = 0;
或者
var a = var b = 0;
等等。
你需要依赖逗号,因为如果你依赖于多重赋值结构,你会在某一点上打到自己的脚。
例如:
>>> 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 = [];
没有办法在一行中做到这一点,赋值为值。
正确的方法(不泄漏变量)是稍微长一点:
var a = 0, b = a;
这在这种情况下是有用的:
var a = <someLargeExpressionHere>, b = a, c = a, d = a;
注意,只能使用数字和字符串执行此操作
你可以..。
var a, b, c; a = b = c = 0; //but why? c++; // c = 1, b = 0, a = 0;
为什么不用两行呢?
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。
b
c
d
使用 Javascript 的 es6或节点,您可以执行以下操作:
var [a,b,c,d] = [0,1,2,3]
如果您想在一行中轻松地打印多个变量,只需这样做:
console.log(a, b, c, d)
0123
这与@alexgray 的回答类似,但是这个例子是用 Javascript 代替 CoffeeScript。
注意,这里使用的是 Javascript 的 数组解析赋值数组解析赋值
const person = { name: 'Prince', age: 22, id: 1 }; let {name, age, id} = person; console.log(name); console.log(age); console.log(id);
* 变量名和对象索引必须相同
具体到 OP 要求的,如果你想用相同的值初始化 N 个变量(例如 0) ,你可以使用 数组解构数组解构和 数组,填充为变量赋值一个 N 个 0的数组:
0
let [a, b, c, d] = Array(4).fill(0); console.log(a, b, c, d);
这完全正确:
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);
如果它们具有相同的价值,就这样做
let x = y = z = 0
否则
let [x, y, z] = [10, 30, 50] console.log(x, y, z) // 10 30 50
压缩类型如下:
var a, b = a = "Hi";
& 对于3个变量:
var x, y, z = x = y = "Hello";
希望能帮上忙!