javascript动态数组用IE声明和初始化

时间:2014-06-02 13:55:34

标签: javascript cross-browser dynamic-arrays

我有这个例子可以正常使用chrome和firefox

  

var array = [];

     

array.a = 1;

     

array.b = 2;

     

的console.log(数组)

在chrome和firefox中返回一个

  

objectArray [a:1 b:2]

但IE返回objectArray [] lenght 0 任何想法?

4 个答案:

答案 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"