Multiple assignment in JavaScript? What does `[ a, b, c ] = [ 1, 2, 3 ]` mean?
For a project, a developer sent us a JS file with code similar to this:
var myList = [ 1, 2, 3 ];
var a, b, c;
[ 开发者_开发技巧a, b, c ] = myList;
It works in Opera 10.30, and Firefox 3.6.x, but it’s not okay for Opera 10.60, and Chrome.
It’s just curiosity: do you have any reference or link that says this code is compliant to the ECMAScript standard or not?
This is a feature called destructuring assignment, which was added in JavaScript 1.7 and ECMAScript 6. It is not a part of ECMAScript 5: What is cross browser support for JavaScript 1.7's new features? Specifically array comprehensions and the "let" statement
Here’s an update on the subject: as of JavaScript version 1.7, destructuring assignments are supported by all major browsers: see browser compatibility.
The destructuring assignment syntax is a JavaScript expression that makes it possible to unpack values from arrays, or properties from objects, into distinct variables.
– MDN’s documentation
So you can do:
let a, b;
[a, b] = ["Hello", "World"];
console.log(a); // "Hello"
console.log(b); // "World"
Or simply in one line if you're defining the variables:
let [a, b] = ["Hello", "World"];
console.log(a); // "Hello"
console.log(b); // "World"
This is destructuring assignment, available in Javascript 1.7 (mozilla) and some newer browsers: http://www.robertnyman.com/javascript/javascript-1.7.html#destructuring-assignment
Opera's older "futhark" JavaScript engine had support for this, but it was dropped in the new engine "carakan", because it was non-standard, not required on the web, and would complicate the new and very fast implementation.
精彩评论