如果我创建这样的对象:
var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
Run Code Online (Sandbox Code Playgroud)
生成的对象总是这样吗?
{ prop1 : "Foo", prop2 : "Bar" }
Run Code Online (Sandbox Code Playgroud)
也就是说,属性是否与我添加它们的顺序相同?
Javascript中的"for ... in"循环是否按照声明的顺序循环遍历hashtables/elements?是否有一个浏览器没有按顺序执行?
我想要使用的对象将被声明一次,永远不会被修改.
假设我有:
var myObject = { A: "Hello", B: "World" };
Run Code Online (Sandbox Code Playgroud)
我进一步使用它们:
for (var item in myObject) alert(item + " : " + myObject[item]);
Run Code Online (Sandbox Code Playgroud)
在大多数体面的浏览器中,我可以期待'A:'你好''总是先来'B:'世界"吗?
假设我有一个初始化的Javascript对象
var letters = {q:0, t:0, o:0, b:0, y:0, n:0, u:0, m:0, p:0,
w:0, a:0, d:0, k:0, v:0, c:0, z:0, l:0, j:0,
i:0, e:0, g:0, s:0, x:0, r:0, h:0, f:0};
Run Code Online (Sandbox Code Playgroud)
然后我想迭代这些对象的键
for(var letter in letters) {
// code goes here
}
Run Code Online (Sandbox Code Playgroud)
在Firefox 3和Internet Explorer 8中,对象按照它们在对象声明(q,t,o,b,y等)中列出的顺序进行迭代.
我可以依靠吗?假设在迭代之前我没有以任何方式修改我的对象.它是ECMAScript标准的一部分吗?有谁知道哪些浏览器在声明的顺序中迭代?
我发现我的代码中存在一个错误,希望通过最少的重构努力来解决.Chrome和Opera浏览器中会出现此错误.问题:
var obj = {23:"AA",12:"BB"};
//iterating through obj's properties
for(i in obj)
document.write("Key: "+i +" "+"Value: "+obj[i]);
Run Code Online (Sandbox Code Playgroud)
输出FF,IE键:23值:AA键:12值:BB
Opera和Chrome输出(错误)
键:12值BB
键:23值AA
我试图制作一个像这样的逆序对象
var obj1={"AA":23,"BB":12};
for(i in obj1)
document.write("Key: "+obj[i] +" "+"Value: "+i);
Run Code Online (Sandbox Code Playgroud)
但是输出是一样的.有没有办法通过小改动为所有浏览器提供相同的行为?
问题是:Chrome会自动对对象的属性进行排序.
如果我有一个像这样的对象:
var obj = {4: "first", 2: "second", 1: "third"};
Run Code Online (Sandbox Code Playgroud)
然后我下次做的时候:
for(var i in obj) {
console.debug(obj[i]);
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
third
second
first
但期望:
first
second
third