И далее я использую их в:
Объект, который я хочу использовать, будет объявлен только один раз и никогда не будут изменены.

Предположим, у меня есть:

var myObject = { A: "Hello", B: "World" };

Могу ли я ожидать, что ‘A: «Hello» «всегда будет стоять перед» B: «World» «в большинстве приличных браузеров?

for (var item in myObject) alert(item   " : "   myObject[item]);

Цитата Джона Резига

javascript — HTML Entity Decode :

: функции, вызываемой после завершения анимации.

Однако спецификация сильно отличается от реализации. Все современные реализации ECMAScript перебирают свойства объекта в том порядке, в котором они были определены. Из-за этого команда Chrome посчитала это ошибкой и исправит ее.

Я хочу, чтобы это было:

Вы можете использовать lodash и Opera, которые подходят для каждого нечислового имени свойства. В этих двух браузерах свойства располагаются по порядку впереди первого нечислового свойства (это связано с тем, как они реализуют массивы). Порядок такой же для . Object.keys Пользователи с

Этот пример должен прояснить, что происходит:

var obj = {
  "first":"first",
  "2":"2",
  "34":"34",
  "1":"1",
  "second":"second"
};
for (var i in obj) { console.log(i); };
// Order listed:
// "1"
// "2"
// "34"
// "first"
// "second"

17 мая ’17 в 11:34

Если он соответствует false, выполните код после А также может быть опасным :)

Поднятие этого год спустя …

Это 2012 , я рекомендую не использовать код jQuery, который был принят в качестве ответа. Хотя он не вставляет строку для декодирования на страницу, он вызывает создание таких вещей, как сценарии и элементы HTML. Это намного больше кода, чем нам нужно. Вместо этого я предлагаю использовать более безопасную и оптимизированную функцию. http://jsfiddle.net/LYteC/4/ отличается:

function lineate(obj){
    var arr = [], i;
    for (i in obj) arr.push([i,obj[i]].join(':'));
    console.log(arr);
}
var obj = { a:1, b:2, c:3, "123":'xyz' };
/* log1 */  lineate(obj);
obj.a = 4;
/* log2 */  lineate(obj);
delete obj.a;
obj.a = 4;
/* log3 */  lineate(obj);

импорт по умолчанию или Если вам нужно сделать это

XSS

["a:1", "b:2", "c:3", "123:xyz"]
["a:4", "b:2", "c:3", "123:xyz"]
["b:2", "c:3", "123:xyz", "a:4"]

Ну, как насчет этого:

["123:xyz", "a:1", "b:2", "c:3"]
["123:xyz", "a:4", "b:2", "c:3"]
["123:xyz", "b:2", "c:3", "a:4"]

Из

[123:xyz,a:1,b:2,c:3] 
[123:xyz,a:4,b:2,c:3] 
[123:xyz,a:4,b:2,c:3] 

Вместо этого попробуйте цикл Спецификация языка ECMAScript , раздел 12.6.4 (в for .. in unescape

Механизм перечисления свойств зависит от реализации. Порядок перечисления определяется объектом.

И раздел 4.3.3 (определение «объекта»):

Stringify не решает всех проблем

Полагаю, это означает, что вы не можете полагаться на свойства, перечисляемые в согласованном порядке в реализациях JavaScript. (В любом случае было бы плохим стилем полагаться на специфические для реализации детали языка.)

Если вы хотите, чтобы ваш порядок был определен, вам нужно будет реализовать что-то, что его определяет как массив ключей, которые вы сортируете перед доступом к объекту с ним.

Цикл во всех случаях, и есть потенциальные побочные эффекты, которые необходимо учитывать. См. скобки http://www.mozilla.org/js/language/E262-3.pdf раздел 8.6).

Это не будет соответствовать стандартам (то есть безопасно) предполагать, что все реализации Javascript будут перечисляться в порядке объявления.

Порядок итерации также путают в отношении удаления свойств, но в этом случае только с IE.

var obj = {};
obj.a = 'a';
obj.b = 'b';
obj.c = 'c';

// IE allows the value to be deleted...
delete obj.b;

// ...but remembers the old position if it is added back later
obj.b = 'bb';
for (var p in obj) {
    alert(obj[p]); // in IE, will be a, bb, then c;
                   // not a, c, then bb as for FF/Chrome/Opera/Safari
}

Желание изменить спецификацию, чтобы исправить порядок итераций, кажется довольно популярным среди разработчиков, если обсуждение в http://code.google.com/p/v8/issues/detail?id=164 .

в IE6, порядок не гарантируется.

Нельзя доверять порядку. Opera и Chrome возвращают список неупорядоченных свойств.

<script type="text/javascript">
var username = {"14719":"A","648":"B","15185":"C"};

for (var i in username) {
  window.alert(i   ' => '   username[i]);
}
</script>

Код выше показывает B, A, C в Opera и C, A, B в Chrome.

. Это не отвечает на вопрос как таковой, но предлагает решение основной проблемы.

Предполагая, что вы не можете полагаться на порядок сохранения, почему бы не использовать массив объектов с ключом и значением в качестве свойств?

var myArray = [
    {
        'key'   : 'key1'
        'value' : 0
    },
    {
        'key'   : 'key2',
        'value' : 1
    } // ...
];

Теперь вы должны убедиться, что ключи уникальны (при условии, что это также важно для вас. Кроме того, прямая адресация изменяется, а for (… in …) теперь возвращает индексы как ‘ keys ‘.

> console.log(myArray[0].key);
key1

> for (let index in myArray) {console.log(myArray[index].value);}
0
1

см. Перо

для (… in …) адресации в порядке

от JDQ (

@ JDQ

) В

CodePen

Глядя на вывод