字符串可以是原始的也可以是对象,这取决于它们的声明方式。
var str = 'yes';
给你一个原始的,同时,
var str = new String('yes');
会给你一个 String 对象。
所有数组都是相同的(无论它们是否用 [] 或 new Array() 定义),都是对象类型,并且继承自“Array”对象的原型。Javascript 中没有真正的类,一切都是对象,并且有一个系统定义的对象,称为 Array。它有一个名为 'prototype' 的属性(对象类型),当您在具有原型属性的对象上使用 new 关键字时,它会创建一个引用原型内容的实例并将其存储在您的变量中。因此,您在 Javascript 中使用过的所有数组都是 Array 原型属性的对象和实例。
在任何情况下,尽管数组确实是对象,但由于它们有用的属性和功能(例如长度、切片、推送等),它们的行为类似于数组。
另一个注意事项,虽然我说没有课程,但当你这样做时:
console.log(Object.prototype.toString.call(your_object));
它会给你一个 [object Object] 形式的字符串。但有用的是,当您使用数组调用它时,您会得到 [object Array] 与提供 [object Function] 和许多其他系统定义类型的函数相同的函数,这有助于区分普通对象和数组(因为 typeof运算符将始终只返回字符串“对象”)。
试试这个
var a = Array;
并进入 firebug 并检查 a 的内容,尤其是它的“原型”属性。
编辑:稍微改变了措辞,更正确。事实上,当您使用 new 关键字时,它会创建一个引用原型对象的实例。因此,在实例声明之后对原型所做的任何更改仍会影响实例。
编辑:回答您最新修订的问题(数组/对象实际上是变相的字符串):不。正如我所解释的,它们是对象。字符串要么是原始类型,要么是对象类型(String 对象的实例),其中包含原始等效项作为其属性之一。