在javascript中的对象中的两个键上声明两个数组的最佳方法是什么?

时间:2012-07-15 09:34:45

标签: javascript

这就是我现在的表现。这感觉就像一个哈利......

var broken_posts = new Object();
broken_posts.empty = new Array();
broken_posts.one = new Array();

4 个答案:

答案 0 :(得分:4)

var broken_posts = { empty: [], one: [] };

答案 1 :(得分:3)

var broken_posts = {
empty: [],
one: []
};

答案 2 :(得分:0)

Andru和Thilo的回答都是正确的,但也许有关为什么有序的信息:

  • 避免直接调用Array构造函数:它令人困惑和误导。 var a = new Array(5);返回[undefined,undefined,undefined,undefined,undefined],而var b = new Array('5');返回['5']。甚至var c = new Array(5,5); => [5,5]

  • 同样适用于直接对象构造函数。实际上没有理由创建一个调用基本对象构造函数的对象。您应该使用关键字new的唯一情况是创建日期对象或调用自制的构造函数(即使在这种情况下,也不需要new关键字,替代设计模式)。使用对象文字{}更常见,允许直接分配属性(甚至方法)。此外,以JIT方式创建对象要容易得多。它不仅需要更少的代码行,正确使用闭包,或者仅用于一次调用,一旦完成它,对象就可以获得GC。


function iWantAnObject(obj)
{
    if (obj instanceof Object)
    {
        return true;
    }
    return false;
}//function returns, obj is GC'ed
iWantAnObject({just:'some',rand:'Object',withA:function(){console.log('a method';}});

与这种情况相反:

var tempObj = new Object();
tempObj.just = 'some';//etc...
//etc...
iWantAnObjct(tempObj);
//tempObj isn't yet GC'ed

在最后一个例子中,机会是:你不小心创建了全局变量,在内存中有不再需要的各种对象,最后但并非最不重要:与JS的原型性质不太一致。

答案 3 :(得分:0)

我更愿意使用CoffeeScript。

然后你可以这样做:

broken_posts =
    empty: []
    one: []