web-dev-qa-db-ja.com

Javascript。配列値を複数の変数に割り当てますか?

var a,b,c;
var arr = [1,2,3];
[a,b,c] = arr;

このコードはFirefoxで完全に機能し、a = 1、b = 2、c = 3となり、
ただし、Chromeでは機能しません。 Chromeバグまたは
有効なJavaScriptコードではありませんか? (私はjavascript参照でそれを見つけることができませんでした)

このコードを変更して、Chromeに適したものにするにはどうすればよいですか?
[。

追伸これは実際のコードの単なるサンプルコードです
コード外のどこかからarr配列を取得します

75
tsds

これは、JavaScript 1.7の新機能である 割り当ての破壊

代入の構造化により、配列およびオブジェクトリテラルの構造を反映した構文を使用して、配列またはオブジェクトからデータを抽出できます。

オブジェクトおよび配列リテラル式は、データのアドホックパッケージを作成する簡単な方法を提供します。これらのデータパッケージを作成したら、任意の方法で使用できます。関数から返すこともできます。

構造化代入でできる特に便利なことの1つは、構造全体を1つのステートメントで読み取ることです。ただし、次の例でいっぱいのセクションに示すように、それらを使用していくつかの興味深いことができます。

たとえば、値を交換するために、破壊割り当てを使用できます。

var a = 1;
var b = 3;
[a, b] = [b, a];

この機能は、PerlやPythonなどの言語に存在する機能に似ています。

残念ながら、 このバージョンの表 によると、JavaScript 1.7はChromeに実装されていません。しかし、それはそこにあるはずです:

  • FireFox 2.0+
  • IE 9
  • Opera 11.50。

このjsfiddleで試してみてください: http://jsfiddle.net/uBReg/

これをChrome(失敗)、IE 8(失敗)、FireFox 5(wikiテーブルごとに機能しました))でテストしました。

89
Justin Ethier

@Justinによって既に回答されているように、Javascript 1.7でのみ可能です。広く使用されているブラウザーでシミュレートするための試用版を次に示します。

function assign(arr, vars) {
    var x = {};
    var num = Math.min(arr.length, vars.length);
    for (var i = 0; i < num; ++i) {
        x[vars[i]] = arr[i];
    }
    return x;
}
var arr = [1, 2, 3];
var x = assign(arr, ['a', 'b', 'c']);
var z = x.a + x.b + x.c;  // z == 6

それがどれほど有用かはわかりません。

7
Jiri Kriz