typeof用來檢測給定變量的數據類型(也可叫做基本類型,基本數據類型。包含undefined、boolean、string、number、object、function)
var message = "so easy";
alert(typeof message); //"string"
alert(typeof 12); //"number"
可以這樣記憶:typeof是用來判斷不是用new創建的“變量”。
instanceof用來檢測對象的類型(也可叫做引用類型。包含Object、Array、Date、RegExp、Function、基本包裝類型(含Boolean、Number、String))
var numberObject = new Number(10);
var numberValue = 10;
alert(typeof numberObject); //"object"
alert(typeof numberValue); //"number"
alert(numberObject instanceof Number); //true
alert(numberValue instanceof Number); //false
numberValue是number基礎數據類型,不屬於任何引用類型。
numberObject是object基礎數據類型,屬於Number引用類型(所有引用類型都從Object引用類型繼承而來)。
可以這樣記憶:instanceof檢測的都是用new創建的“對象”。而沒有通過new創建出來的“變量”不屬於任何一個引用類型。用typeof檢測用new創建的“對象”始終返回的是“object引用類型”.
isPrototypeOf()方法用來檢測原型和實例的關系。instanceof同樣也可以檢測。只要是原型鏈中出現過的原型,都可以說是該原型鏈所派生的實例的原型。
var person = new Person(); //Person繼承與Object
alert(Person.prototype.isPrototypeOf(person)); //true
alert(Object.prototype.isPrototypeOf(person)); //true