2012-07-15 31 views
0

这就是我现在要做的。这感觉就像一个hazzle ...什么是在JavaScript中的对象的两个键上声明两个数组的neatets方法?

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

解释的答案:参见[§11.1.4:数组初始化(http://ecma-international.org/ecma-262/5.1/# sec-11.1.4)和[§11.1.5:Object Initializer](http://ecma-international.org/ecma-262/5.1/#sec-11.1.5)。 – 2012-07-15 09:42:10

回答

0

由Andru和蒂洛都是正确的答案,但也许对为什么是为了一些信息:

  • 避免直接调用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的原型性格不太一致。

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

我宁愿使用CoffeeScript代替。

然后,你可以这样来做:

broken_posts = 
    empty: [] 
    one: [] 
+0

我喜欢CoffeeScript,但在这个例子中,差异和好处是微不足道的。 Pure JS在这里已经有了一个简洁的语法。 – Thilo 2012-07-15 12:11:59

+0

我同意。在CoffeeScript语法特别好的情况下,情况并非如此。只是看起来不错,没有大括号和昏迷。 :-) – skovalyov 2012-07-16 09:39:32

相关问题