Tag Archives: javascript.js

Javascript学习笔记(三)

导论

Javascript可以将值分为两种类型,分别为原始值和对象类型值,而这章要介绍的就是对象Object

《JavaScript语言精辟》这本书里面提到的定义,可以很好理解所有的对象类型值:

数组是对象,函数是对象,正则表达式也是对象,当然,对象也是对象。

Object类型其实就是所有的对象类型值的基础,所有的对象类型值都是继承于Object对象,在Javascript中这称为这些对象类型的值都是Object的实例。

Object对象的方法和属性都分为两种,一种为Object对象本身的方法和属性,也称为静态方法和属性,一种为实例方法和属性,也称为实例方法和属性。

第一种指的是直接在Object对象本身上面定义的方法和属性,实例是无法调用的

Object.print = function () {
    console.log('Hello World');
};

第二种指的是直接在Object对象的prototype属性上定义的属性和方法,在prototype属性上定义的是可以被实例所使用的,具体的实现过程可以到《Javascript高级编程》目录的《原型继承》章节查看,而目前只需要知道定义在prototype属性上的方法和属性都是可以被实例使用的

Object.prototype.print = function () {
    console.log('This is print');
};

instanceof运算符

instanceof运算符可以用来检查一个对象是否为构造函数的实例

var a = new Array();
a instanceof Array //true

但是如果用任意的对象类型值去检查是否为Object类型的实例,那么始终都会返回true,因为所有的类型都是Object对象的实例

var a = new Array();
a instanceof Array //true
a instanceof Object //true

Object()函数

Object本身也是一个函数,该函数的作用是将任意值转换为对象,该方式可以用于保证一个值为对象,但如果传入的是一个对象,那么Object函数不会进行转换并直接返回该对象。

如果传入给Object函数的值为空值、undefinednull这三个值的话,会直接返回一个空的对象

var a = Object();
// 等同于
var a = Object(undefined);
// 等同于
var a = Object(null);

如果传入给Object函数的值为原始值,那么将会返回一个原始值对应的包装对象,所以这里需要注意的是传递原始值给Object函数,返回的是一个对象,而不是原始值了,比如下面返回的一个Number包装对象

var a = Object(1);
a instanceof Number // true

Continue reading