亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

全部開發者教程

JavaScript 入門教程

JavaScript instanceof

instanceof 運算符用于檢測構造函數的 prototype 屬性是否出現在某個實例對象的原型鏈上。(MDN)

instanceof 是另一種檢測類型的手段,但通常用于檢測對象之間的關系,如某個對象是不是由某個構造函數生成的。

function Person(name) {
  this.name = name;
}

var person = new Person('小明');

console.log(
  person instanceof Person,
); // 輸出:true

1. 語法

對象 instanceof 構造函數;

雖然語法是這樣的,其實左側可以是任意數據類型,但右側必須是一個函數。

否則會報如下錯誤:

[] instanceof {};

// Uncaught TypeError: Right-hand side of 'instanceof' is not callable

錯誤大致意思是 instanceof 的右操作數不能被調用。

JavaScript ,可被調用的目前只有函數。

2. 注意點

使用 instanceof 檢測的時候,不一定只有一個為 true 的結果。

function Person(name) {
  this.name = name;
}

var person = new Person('小明');

console.log(
  person instanceof Person,
  person instanceof Object,
); // 輸出:true

因為 instanceof 實際上是去左操作數的原型鏈上尋找有沒有右操作數的原型

person 的原型鏈上既匹配到 Person.prototype 又能匹配到 Object.prototype,所以都能返回 true

使用的時候要注意這個問題,如判斷某個對象的原型鏈上是否有 Object.prototype 的時候,要考慮到一些其他對象。

[] instanceof Object; // true

數組的原型鏈上也是有 Object.prototype 的,所以做一些檢測的時候要考慮一些特殊情況。

3. 小結

instanceof 可以用來檢測對象和構造函數之間的關系,其檢測的原理是左操作數的原型上是否有右操作數的 prototype 屬性,所以要注意一些檢測的特殊情況。