• Object 对象
  • 属性描述对象
  • Array 对象
  • 包装对象
  • Boolean 对象
  • Number 对象
  • String 对象
  • Math 对象
  • Date 对象
  • RegExp 对象
  • JSON 对象

Object 对象

JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实例。Object对象的原生方法分成两类:Object本身的方法与Object的实例方法。

(1) Object对象本身的方法
所谓“本身的方法”就是直接定义在Object对象的方法。

Object.print = function (0) {
console.log(0);
}

(2)Object的实例方法

所谓实例方法就是定义在Object原型对象Object.prototype上的方法。它可以被Object实例直接使用。

Object.prototype.print = function () {
console.log(this);
};

var obj = new Object();
obj.print() // Object

上面代码中,Object.prototype定义了一个print方法,然后生成一个Object的实例obj。obj直接继承了Object.prototype的属性和方法,可以直接使用obj.print调用print方法。也就是说,obj对象的print方法实质上就是调用Object.prototype.print方法。

Object 的静态方法

所谓“静态方法”,是指部署在Object对象自身的方法。

  • Object.keys()
  • Object.getOwnPropertyNames()

Object.keys方法和Object.getOwnPropertyNames方法都用来遍历对象的属性。

Object.keys方法的参数是一个对象,返回一个数组。该数组的成员都是该对象自身的(而不是继承的)所有属性名。

Object.keys方法只返回可枚举的属性(详见《对象属性的描述对象》一章),Object.getOwnPropertyNames方法还返回不可枚举的属性名。一般情况下,几乎总是使用Object.keys方法,遍历对象的属性。

(1)对象属性模型的相关方法

  • Object.getOwnPropertyDescriptor():获取某个属性的描述对象。
  • Object.defineProperty():通过描述对象,定义某个属性。
  • Object.defineProperties():通过描述对象,定义多个属性。

(2)控制对象状态的方法

  • Object.preventExtensions():防止对象扩展。
  • Object.isExtensible():判断对象是否可扩展。
  • Object.seal():禁止对象配置。
  • Object.isSealed():判断一个对象是否可配置。
  • Object.freeze():冻结一个对象。
  • Object.isFrozen():判断一个对象是否被冻结。

(3)原型链相关方法

  • Object.create():该方法可以指定原型对象和属性,返回一个新的对象。
  • Object.getPrototypeOf():获取对象的Prototype对象。

Object 的实例方法

  • Object.prototype.valueOf():返回当前对象对应的值。
  • Object.prototype.toString():返回当前对象对应的字符串形式。
  • Object.prototype.toLocaleString():返回当前对象对应的本地字符串形式。
  • Object.prototype.hasOwnProperty():判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。
  • Object.prototype.isPrototypeOf():判断当前对象是否为另一个对象的原型。
  • Object.prototype.propertyIsEnumerable():判断某个属性是否可枚举。

属性描述对象

JavaScript 提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为“属性描述对象”(attributes object)。每个属性都有自己对应的属性描述对象,保存该属性的一些元信息。

{
value: 123, // 属性值: 默认 undefined
writable: false, // 是否可改变
enumerable: true, // 是否可遍历
configurable: false,
get: undefined,
set: undefined
}

Object.getOwnPropertyDescriptor()方法可以获取属性描述对象。它的第一个参数是目标对象,第二个参数是一个字符串,对应目标对象的某个属性名。

Object.getOwnPropertyNames方法返回一个数组,成员是参数对象自身的全部属性的属性名,不管该属性是否可遍历。

Object.defineProperty()方法允许通过属性描述对象,定义或修改一个属性,然后返回修改后的对象,它的用法如下。

实例对象的propertyIsEnumerable()方法返回一个布尔值,用来判断某个属性是否可遍历。注意,这个方法只能用于判断对象自身的属性,对于继承的属性一律返回false。

Array对象

Array 静态方法

Array.isArray() 方法返回一个布尔值,表示参数是否为数组. 他可以弥补 typeof 运算符的不足.


var arr = [1,2,3];

typeof arr; // Object;
Array.isArray(arr); // true;

实列方法

valueOf 是所有对象都有的方法. 不同对象的valueOf返回不一样, 数组的valueOf返回数组本身
toString 方法也是对象的通用方法, 数组的toString方法返回数组的字符串形式


var arr = [1,2,3];
arr.toString() // 1,2,3;

var arr = [1,2,3,[4,5,6]];
arr.toString() // 1,2,3,4,5,6

var obj = {a: 1};
a.toString() // [object object]

push() - 在数组的末端添加一个或者多个元素, 并返回新添加元素后的数组的长度
pop() - 删除数组的最后一个元素, 并返回这个元素
两个结合使用可以构成,“后进先出” 的栈结构

shift() - 删除数组的第一个元素,并返回这个元素: shift()方法可以遍历并清空一个数组。
push()和shift()结合使用,就构成了“先进先出”的队列结构;

unshift() - 方法用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
join() - join()方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。
concat() - concat方法用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变。
reverse() - reverse方法用于颠倒排列数组元素,返回改变后的数组。注意,该方法将改变原数组。
slice() - slice()方法用于提取目标数组的一部分,返回一个新数组,原数组不变。

arr.slice(start, end); // 不包含 end 这个值

splice() - splice()方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。
sort()方法对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。
map()方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。

forEach()方法与map方法很相似,也是对数组的所有成员依次执行参数函数。但是,forEach方法不返回值,只用来操作数据。这就是说,如果数组遍历的目的是为了得到返回值,那么使用map方法,否则使用forEach方法。
filter() - filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。
reduce(),reduceRight() - reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员),其他完全一样。
indexOf(),lastIndexOf() - indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。

包装对象

所谓“包装对象”,指的是与数值、字符串、布尔值分别相对应的Number、String、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。

包装对象的设计目的,首先是使得“对象”这种类型可以覆盖 JavaScript 所有的值,整门语言有一个通用的数据模型,其次是使得原始类型的值也有办法调用自己的方法。

总结一下,这三个对象作为构造函数使用(带有new)时,可以将原始类型的值转为对象;作为普通函数使用时(不带有new),可以将任意类型的值,转为原始类型的值。

valueOf()方法返回包装对象实例对应的原始类型的值。
toString()方法返回对应的字符串形式。

Math 对象

Date 对象

RegExp 对象

JSON 对象