从原型量创建对象到对动态语言的一点认知

Nicholas的Professional JavaScript For Web Developers里面有这样一段:You can also define an Array object by using the literal representation ,which is indicated by using square brackets([])and separating the values with commas…Note that ,in this case,the Array class is never mentioned explicitly.The square brackets imply that the enclosed values are to be made into an Array object.Arrays declared in this way are exactly equal to arrays declared in the more traditional manner.大致意思是讲,array对象可以使用原义的描述符”[ ]”,array的类没有明确提及,双方括号被做成一个array对象,这种方式和传统方式完全相同。

但是他只是讲到了这用的写法是一种简写方式,并没有谈到两者效率之分,国内有很多人用直接量来解释:JavaScript支持使用 [param,param,param,…]来直接表达一个数组,以往我们都使用new Array(param,param,…),使用前者是引擎直接解释的,后者要调用一个Array内部构造器,所以要略微快一点点。

事实真的是这样的吗?ECMAscript 262上有这样一段描述:
Objects are created by using constructors in new expressions; for example, new String(“A String”) creates a new String object. Invoking a constructor without using new has consequences that depend on the constructor. For example,String(“A String”) produces a primitive string, not an object.
对象使用构造器进行创建并使用new表达式,例如new String(“A String”)创建一个string 对象,调用一个构造器不使用new有个后果,例如String””A String”)创建的是一个原始的string,不是一个对象。

由此可以推论出,js中的原始量与对象类似java存在原始数据类型和封装类。所以定义一个数组对象用”[ ]”写法上类似java中的int i[] = {}; 不同的是js借助这种写法创建数组对象而java借助这种写法初始化数组对象。