Из стандарта JSON :
Объектом является неупорядоченный набор из нуля или более пар имен / значений, где имя - это строка, а значение - строка, число, логическое значение, нуль, объект или массив.
(выделение мое).
Итак, нет, вы не можете гарантировать заказ.
В настоящее время это единственное совместимое с кросс-браузером решение AFAIK:
var one = arr[0],
two = arr[1];
ES6 позволит назначить деструктурирование:
let [x, y] = ['foo', 'bar'];
console.log(x); // 'foo'
console.log(y); // 'bar'
Или, чтобы придерживаться ваш исходный пример:
var arr = ['one', 'two'];
var [one, two] = arr;
Вы также можете создать значение по умолчанию:
const [one = 'one', two = 'two', three = 'three'] = [1, 2];
console.log(one); // 1
console.log(two); // 2
console.log(three); // 'three'
Это назначение деструктурирования . Вы можете сделать это в некоторых браузерах со следующим синтаксисом:
[one, two] = arr;
Он поддерживается в некоторых из последних браузеров и транспилеров, таких как Babel и Traceur , Это была особенность, введенная с ECMAScript 4, которая позже стала ECMAScript Harmony, которая в конечном итоге стала ES 2015.
Вопрос довольно старый, но я хотел бы опубликовать это альтернативное решение (2016): можно также использовать оператор spread «...».
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator
let xAndY = [42, 1337];
let f = function(x, y) { return x + y; };
f(...xAndY);
CoffeeScript имеет это: http://jashkenas.github.com/coffee-script/#pattern_matching
И, цитируется в верхней части страницы:
«CoffeeScript - это небольшой язык, который компилируется в JavaScript. Подумайте об этом как о менее выдающемся детском брате JavaScript, так и о тех же генах, примерно одинаковой высоты, но о другом стиле. Помимо нескольких бонусов, заявления в CoffeeScript соответствуют друг другу с их эквивалентом в JavaScript, это просто еще один способ сказать это ».
Реализация идеи серьезного.
http://jsfiddle.net/RichAyotte/6D2wP/
(function(a, b, c, d) {
console.log(a, b, c, d);
}.apply(this, ['a', 'b', 'c', 'd']));
var
, чтобы предотвратить загрязнение глобальных переменных.
– Mathias Bynens
6 August 2010 в 10:25
var
s для каждой области за один раз, вместо того, чтобы иметь два отдельных объявления var
.
– Mathias Bynens
7 August 2010 в 10:38
Вы можете использовать функцию применения массива, если хотите, чтобы элементы массива передавались как аргументы функции.
Array
имеет функцию .apply()
. Я думаю, вы имели в виду some_function.apply(this, my_array)
. См. Этот ответ
– Kit
16 August 2011 в 12:56