這篇文章帶給大家的內容是關於JavaScript中typeof與instanceof之間的區別介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
JavaScript 中typeof 和 instanceof 常用來判斷變數是否為空,或是哪一類型的。但它們之間還是有區別的:
typeof
typeof 是一個一元運算,放在一個運算數之前,運算數可以是任意型別。
它傳回值是一個字串,該字串說明運算數的類型。 (typeof 運算子傳回一個用來表示表達式的資料型別的字串。)
typeof其實就是判斷參數是什麼型別的實例,就一個參數
##typeof 一般只能傳回如下幾個結果:"number"、"string"、"boolean"、"object"、"function" 和"undefined"。 運算數為數字 typeof(x) = "number"字串 typeof(x) = "string"布林值 typeof(x) = "boolean" 物件,陣列與null typeof(x) = "object"函數 typeof(x) = "function"console.log(typeof (123));//typeof(123)返回"number" console.log(typeof ("123"));//typeof("123")返回"string" var param1 = "string"; var param2 = new Object(); var param3 = 10; console.log(typeof(param1)+"\n"+typeof(param2)+"\n"+typeof(param3)); // string object number
if(document.mylist.length != "undefined" ) {} //这个用法有误. 正确的是 `if( typeof(document.mylist.length) != "undefined" ) {}` 或 `if( !isNaN(document.mylist.length) ) {}`
instanceof
instanceof 運算子用來測試一個物件在其原型鏈中是否存在一個建構子的 prototype 屬性。 語法:object instanceof constructor參數:object(要偵測的物件.)constructor(某個建構子)
說明:instanceof 運算子用來偵測 constructor.prototype 是否存在於參數 object的原型鏈上。
如 :var a=new Array(); alert(a instanceof Array); // true, 同时 alert(a instanceof Object) //也会返回 true; 这是因为 Array 是 object 的子类。 再如:function test(){}; var a=new test(); alert(a instanceof test) 会返回true alert(a==b); //flase
另外,更重的一点是 `instanceof` 可以在继承关系中用来判断一个实例是否属于它的父类型。 例如: function Foo(){} Foo.prototype = new Aoo();//JavaScript 原型继承 var foo = new Foo(); console.log(foo instanceof Foo)//true console.log(foo instanceof Aoo)//true 上面的代码中是判断了一层继承关系中的父类,在多层继承关系中,instanceof 运算符同样适用。 又如: console.log(Object instanceof Object);//true console.log(Function instanceof Function);//true console.log(Number instanceof Number);//false console.log(String instanceof String);//false console.log(Function instanceof Object);//true console.log(Foo instanceof Function);//true console.log(Foo instanceof Foo);//false
// 定义构造函数 function C(){} function D(){} var o = new C(); // true,因为 Object.getPrototypeOf(o) === C.prototype o instanceof C; // false,因为 D.prototype不在o的原型链上 o instanceof D; o instanceof Object; // true,因为Object.prototype.isPrototypeOf(o)返回true C.prototype instanceof Object // true,同上 C.prototype = {}; var o2 = new C(); o2 instanceof C; // true o instanceof C; // false,C.prototype指向了一个空对象,这个空对象不在o的原型链上. D.prototype = new C(); // 继承 var o3 = new D(); o3 instanceof D; // true o3 instanceof C; // true
下面的程式碼使用了instanceof來證明:String和Date物件同時也屬於Object型別。
例子: 表明String对象和Date对象都属于Object类型 下面的代码使用了instanceof来证明:String和Date对象同时也属于Object类型。 var simpleStr = "This is a simple string"; var myString = new String(); var newStr = new String("String created with constructor"); var myDate = new Date(); var myObj = {}; simpleStr instanceof String; // returns false, 检查原型链会找到 undefined myString instanceof String; // returns true newStr instanceof String; // returns true myString instanceof Object; // returns true myObj instanceof Object; // returns true, despite an undefined prototype ({}) instanceof Object; // returns true, 同上 myString instanceof Date; // returns false myDate instanceof Date; // returns true myDate instanceof Object; // returns true myDate instanceof String; // returns false
以上是JavaScript中typeof與instanceof之間的差異介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!