我有这个例子可以正常使用chrome和firefox
var array = [];
array.a = 1;
array.b = 2;
的console.log(数组)
在chrome和firefox中返回一个
objectArray [a:1 b:2]
但IE返回objectArray [] lenght 0 任何想法?
答案 0 :(得分:0)
数组是数组([]
),关联数组是JavaScript中的普通对象({}
)。
请改用以下内容:
var array = {};
array.a = 1;
array.b = 2;
console.log(array);
请注意,对象不会返回length
中的属性数量。相反,您可以使用Object.keys(array).length
或使用for
循环来计算它们。
答案 1 :(得分:0)
我不知道您的代码如何在Chrome上运行。您初始化变量但修改了另一个变量。
无论如何,你想要制作一个Object而不是一个数组。
尝试使用此代码:
var test = {};
test.a = 1;
test.b = 2;
console.log(test)
但在IE中,您可能会在输出中获得[object Object]
。这是因为IE不知道如何正确打印对象。
答案 2 :(得分:0)
{}
创建一个空的文字对象(=键值对象)。等于new Object()
[]
创建一个空数组。等于new Array()
示例:
var obj = {};
obj.a = 1; //add a key-value
console.log(obj);
var array = [];
array.push(2); // add a value
console.log(array);
在JavaScript中,数组也是对象,以下语句不会导致错误并且仍然有效:
var array = [];
array.a = 1;
答案 3 :(得分:0)
JavaScript没有关联数组。在JavaScript中,一切都是包含数组的对象,数组是Array
对象的实例,就像任何其他对象一样,您可以向它们添加属性:
var test = [];
test.a = 3;
test['b'] = 4;
test[3] = 6;
test['4'] = 6;
基本上,数组的元素实际上是Array
对象的属性,但并非所有属性都可以被视为元素。根据{{3}},只有当属性的名称符合以下条件时,属性才是元素:
属性名称P(以String值的形式)是数组索引if 并且只有ToString(ToUint32(P))等于P且ToUint32(P)不等 等于2 32 - 1。
这很重要,因为length
属性以及forEach
等方法仅考虑符合此条件的属性。
然而,ECMAScript 6将支持ECMAScript Language Specification (15.4 Array Objects):
var myMap = new Map();
var keyObj = {},
keyFunc = function () {},
keyString = "string";
myMap.set(keyString, "value associated with keyString");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");
myMap.size; // 3
myMap.get(keyString); // "value associated with keyString"
myMap.get(keyObj); // "value associated with keyObj"
myMap.get(keyFunc); // "value associated with keyFunc"