代码之家  ›  专栏  ›  技术社区  ›  gregers

是否可以从一个数组中分配多个变量?

  •  33
  • gregers  · 技术社区  · 15 年前

    在JavaScript中,从数组中分配多个变量是一种标准方法吗? 在Firefox和Opera中,您可以执行以下操作:

    var [key, value] = "key:value".split(":");
    alert(key + "=" + value); // will alert "key = value";
    

    但它在IE8或谷歌浏览器中不起作用。

    有人知道在没有tmp变量的其他浏览器中这样做的好方法吗?

    var tmp = "key:value".split(":");
    var key=tmp[0], value=tmp[1];
    

    6 回复  |  直到 15 年前
        1
  •  24
  •   gregers    8 年前

    ECMAScript 2015(又称ES6)对分解分配进行了标准化。但并不是所有的浏览器都已经实现了解构(截至2016年3月),即使实现了解构,用户也需要一段时间才能更新到支持解构的浏览器。看见 examples

    // Assign from array elements
    var [key, value] = "key:value".split(":");
    // key => 'key'
    // value => 'value'
    
    // Assign from object properties
    var {name: a, age: b} = {name: 'Peter', age: 5};
    // a => 'Peter'
    // b => 5
    
    // Swap
    [a, b] = [b, a]
    // a => 5
    // b => 'Peter'
    

    因为此功能破坏了向后兼容性,所以您需要 transpile 使其在所有浏览器中工作的代码。许多现有的Transpiler都支持分解结构。 Babel 是一种很受欢迎的运输工具。看见 Kangax´s table of browser and transpiler ES6-support .

    Compatibility table for ES6 browser support

    Exploring ES6 - Destructuring chapter

        2
  •  9
  •   Kijewski Jim    12 年前

    如果你想知道接下来会发生什么,请阅读关于解构任务的部分。

    https://developer.mozilla.org/en/New_in_javascript_1.7

    您可以使用的语言功能始终取决于您的环境。

    例如,为移动Safari(或其他浏览器(如Palm Pre、Android等)或AIR)开发web堆栈比为整个web开发(在web开发中,您甚至还需要考虑IE6)更容易预测。


        3
  •  3
  •   TomasB    12 年前

    我刚才提出了完全相同的问题,作为我自己的练习,我得出了以下结论:

    var key, value;
    
    (function(arr){
      key=arr[0]; 
      value=arr[1];
    })("key:value".split(":"));
    
    alert(key + "=" + value);
    

    看起来很难看,我宁愿使用temp-var(从技术上讲,我在这里使用的是一个temp变量)。

        4
  •  3
  •   Wojciech K    5 年前

    使用 destructuring assignment ,这是ES6的一个特点:

    var [x, y] = [1, 2];
    console.log(x, y); // 1 2
    
        5
  •  1
  •   nickf    15 年前

    我认为这不可能以跨浏览器的方式实现。据我所知,在某些情况下可能会有所帮助的最好方法是:

    // we'll pretend you don't need the key.
    var value = "key:value".split(":")[1];
    
        6
  •  0
  •   Dmitri Farkov    15 年前

    我认为它应该是新规范的一部分,然后它又是一个长期阅读…:P

    key = "key:value".split(":")[0];
    value = "key:value".split(":")[1];
    

        7
  •  0
  •   jrb    15 年前

    我不知道您是如何使用它的,但如果我能够确定我自己的“key:value”字符串格式,我会尝试使用json将字符串求值为必要的对象:

    var obj = eval("{'key':'key_str', 'value':'val_str'}");
    alert(obj.key + "=" + ojb.value);  //alerts "key_str=value_str