且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《JavaScript面向对象精要》——1.6 鉴别引用类型

更新时间:2021-12-23 18:08:42

本节书摘来自异步社区《JavaScript面向对象精要》一书中的第1章,第1.6节,作者:【美】Nicholas C. Zakas著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.6 鉴别引用类型

函数是最容易鉴别的引用类型,因为对函数使用typeof操作符时,返回值是“function”。

function reflect(value) {
    return value;
}

console.log(typeof reflect);  // "function"

对其他引用类型的鉴别则较为棘手,因为对于所有非函数的引用类型,typeof返回“object”。在处理很多不同类型的时候这帮不上什么忙。为了更方便地鉴别引用类型,可以使用JavaScript的instanceof操作符。

instanceof操作符以一个对象和一个构造函数为参数。如果对象是构造函数所指定的类型的一个实例,instanceof返回true;否则返回false,如下例。

var items = [];
var object = {};

function reflect(value) {
    return value;
}

console.log(items instanceof Array);    // true
console.log(object instanceof Object);   // true
console.log(reflect instanceof Function); // true

本例用instanceof和构造函数测试了几个值,它们真正的类型都被正确鉴别出来(即使该构造函数并没有被用于创建该变量)。

instanceof操作符可鉴别继承类型。这意味着所有对象都是Object的实例,因为所有引用类型都继承自Object。

作为示范,下列代码用instanceof检查了之前那3种引用。

var items = [];
var object = {};

function reflect(value) {
    return value;
}

console.log(items instanceof Array);    // true
console.log(items instanceof Object);    // true
console.log(object instanceof Object);   // true
console.log(object instanceof Array);    // false
console.log(reflect instanceof Function); // true
console.log(reflect instanceof Object);   // true

每种引用类型的对象都被正确鉴别为Object的实例。