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

在javascript中,在一个对象的两个键上声明两个数组的NEAETS方法是什么?,javascript,Javascript,我现在就是这样做的。这感觉像是一种迷雾 var broken_posts = new Object(); broken_posts.empty = new Array(); broken_posts.one = new Array(); Andru和Thilo的回答都是正确的,但关于原因的一些信息可能是正确的: 避免直接调用数组构造函数:这会造成混淆和误导。var a=新阵列5;返回[undefined,undefined,undefined,undefined,undefined],而var

我现在就是这样做的。这感觉像是一种迷雾

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

Andru和Thilo的回答都是正确的,但关于原因的一些信息可能是正确的:

避免直接调用数组构造函数:这会造成混淆和误导。var a=新阵列5;返回[undefined,undefined,undefined,undefined,undefined],而var b=新数组'5';返回['5']。甚至var c=新阵列5,5;=>[5,5]

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

与此情景相反:

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

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

我更喜欢使用CoffeeScript

然后你可以这样做:

broken_posts =
    empty: []
    one: []

解释答案:请参阅规范中的和。我喜欢CoffeeScript,但在本例中,两者的区别和好处是微不足道的。纯JS已经有了简洁的语法,我同意。这并不是CoffeeScript语法特别好的情况。只是看起来很好,没有卷曲的背带和昏迷-
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
broken_posts =
    empty: []
    one: []