字符串可以是基本类型或对象类型,这取决于它们的声明方式。
var str = 'yes';
给你一个原始的,然而,
var str = new String('yes');
将会给你一个字符串对象。
所有的数组都是相同的(无论它们是否使用 [] 或 new Array() 定义),都属于类型为 object 并继承自“Array”对象原型的对象。在 Javascript 中没有真正的类,一切都是对象,并且有一个系统定义的名为 Array 的对象。它有一个名为“prototype”的属性(类型为 object),当你在具有 prototype 属性的对象上使用 new 关键字时,它会创建一个实例并引用原型内容并将其存储在变量中。因此,在 Javascript 中使用过的所有数组都是对象,都是 Array 原型属性的实例。
无论如何,虽然数组确实是对象,但由于它们有用的属性和函数(例如 length、slice、push 等),它们表现得像数组。
另一个注意点,虽然我说没有类,但当你这样做时:
console.log(Object.prototype.toString.call(your_object))
它会给你一个形式为 [object Object] 的字符串。但有用的是,当你使用数组调用它时,你会得到 [object Array],同样适用于函数,它们会给出 [object Function] 和其他一些系统定义的类型,这有助于区分普通对象和数组(因为 typeof 运算符总是返回字符串 'object')。
试试这个。
var a = Array
并进入firebug检查a的内容,特别是它的 'prototype' 属性。
编辑:稍微修改了措辞,更加准确。实际上,当使用new关键字时,它会创建一个实例,该实例引用原型对象。因此,在实例声明之后对原型所做的任何更改仍将影响该实例。
编辑:针对您最新修改的问题(数组/对象是否实际上是伪装成字符串的)的回答:不是。它们是对象,正如我所解释的那样。字符串可以是原始类型,也可以是对象类型(String对象的实例),其中包含其属性之一作为原始等价物。
var arr = ['you':'them'];
这不是有效的语法。 翻译: 这行代码不符合有效的语法。 - Matti Virkkunen