【问题标题】:Javascript How to define multiple variables on a single line?Javascript 如何在一行上定义多个变量?
【发布时间】:2010-11-12 16:27:05
【问题描述】:

在线阅读文档,我对如何在一行中正确定义多个 JavaScript 变量感到困惑。

如果我想压缩以下代码,在一行上定义多个 JavaScript 变量的正确 JavaScript“严格”方式是什么?

var a = 0;
var b = 0;

是吗:

var a = b = 0;

var a = var b = 0; 

等等……

【问题讨论】:

标签: javascript


【解决方案1】:

使用Javascript的es6或者node,可以做到以下几点:

var [a,b,c,d] = [0,1,2,3]

如果您想在一行中轻松打印多个变量,只需这样做:

console.log(a, b, c, d)

0 1 2 3

这类似于@alex gray 的答案,但此示例使用的是 Javascript 而不是 CoffeeScript。

请注意,这使用了 Javascript 的 array destructuring assignment

【讨论】:

  • 为什么不在这种情况下使用console.log(a,b,c,d)呢?它更短并且提供相同的输出
  • @Prince Ahmed 的回答展示了另一种选择:let {a,b,c,d} = {"a":0,"b":1, "c":2, "d":3}
【解决方案2】:

你想依赖逗号,因为如果你依赖多重赋值构造,你会在某一点或另一个点开枪。

一个例子是:

>>> 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 = [];

【讨论】:

  • 这确实是分配数组引用的一般问题,而不仅仅是将分配语句作为值。
  • “因此,虽然你可以为数字文字之类的东西使用多个右手分配”
  • @meder,这是任何作业的问题。右手没什么特别的。
  • 我的意思是一般的作业。编辑措辞。
  • 这种多重赋值模式要记住的是,任何未声明的赋值,在 ES5 严格模式下,都会导致 ReferenceError 异常...... IMO,应该避免它们......跨度>
【解决方案3】:

为什么不分两行做呢?

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;

将导致bcd在窗口范围内的隐式声明。

【讨论】:

  • 这对我很有用,因为我在程序中预先声明了许多变量。现在,我可以在不牺牲可读性的情况下使用几行而不是 30 多行。
【解决方案4】:

这是新的ES6在一行中声明多个变量的方法:

const person = { name: 'Prince', age: 22, id: 1 };

let {name, age, id} = person;

console.log(name);
console.log(age);
console.log(id);

* 你的变量名和对象索引必须相同

【讨论】:

  • 这比OP的问题要长,因为它相当于let { a, b } = { a: 0, b: 0 }
【解决方案5】:

具体到 OP 的要求,如果您想用相同的值初始化 N 个变量(例如 0),您可以使用 array destructuringArray.fill 为变量分配 N 个数组 @987654324 @s:

let [a, b, c, d] = Array(4).fill(0);

console.log(a, b, c, d);

【讨论】:

    【解决方案6】:

    没有办法在一行中以赋值为值。

    var a = b = 0;
    

    使 b 全局化。正确的方法(不泄漏变量)是稍长一些:

    var a = 0, b = a;
    

    在这种情况下很有用:

    var a = <someLargeExpressionHere>, b = a, c = a, d = a;
    

    【讨论】:

    • "如果不重复 0,就无法使用赋值作为值。" - 你什么意思?
    【解决方案7】:

    请注意,您只能对数字和字符串执行此操作

    你可以...

    var a, b, c; a = b = c = 0; //but why?
    
    c++;
    // c = 1, b = 0, a = 0;
    

    【讨论】:

    • 还有布尔值,不是吗?
    • @Lah Ezcen 是的,我相信所有不可变的数据类型
    【解决方案8】:

    这是完全正确的:

    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);

    【讨论】:

    • 您不介意阅读其他关于这导致 str2 和 str3 成为全局变量的警告,对吧?
    猜你喜欢
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多