摘要:中的數據類型及其檢測數據類型基本類型引用類型類型檢測只能檢測基本數據類型,對于還有一個用于檢測某個對象的原型鏈是否包含某個構造函數的屬性適用于檢測對象,它是基于原型鏈運作的屬性返回一個指向創建了該對象原型的函數引用,該屬性的值是哪個函數本身
JavaScript中的數據類型及其檢測 1. 數據類型 1.1 基本類型
Number
String
Boolean
Null
Undefined
Symbol
1.2 引用類型Object
Array
Function
RegExp
Date
2. 類型檢測 2.1 typeofvar s = "Nicholas"; var b = true; var i = 22; var u; var n = null; var o = new Object(); var f = new Function(); console.info(typeof s); // string console.info(typeof b); // boolean console.info(typeof i); // number console.info(typeof u); // undefined console.info(typeof n); // object console.info(typeof o); // object console.info(typeof f); // function
typeof只能檢測基本數據類型,對于null還有一個Bug
2.2 instanceofresult = variable instanceof constructor
instanceof用于檢測某個對象的原型鏈是否包含某個構造函數的prototype屬性
function C() {} function D() {} var o = new C(); o instanceof C // true, Object.getPrototypeOf(o) === C.prototype o instanceof D // false function Animal() {} function Cat() {} Cat.prototype = new Animal(); var b = new Cat(); b instanceof Animal // true [1, 2, 3] instanceof Array // true /abc/ instanceof RegExp // true ({}) instanceof Object // true (function() {}) instanceof Function // true
instanceof適用于檢測對象,它是基于原型鏈運作的
2.3 constructorconstructor屬性返回一個指向創建了該對象原型的函數引用,該屬性的值是哪個函數本身。
function Animal() {} function Cat() {} function BadCat() {} Cat.prototype = new Animal(); BadCat.prototype = new Cat(); var a = new Animal(); a.constructor === Animal // true var b = new BadCat(); b.constructor === Animal // true
constructor指向的是最初創建者,而且易于偽造,不適合做類型判斷
2.4 toStringObject.prototype.toString.call(); ({}).toString.call(); window.toString.call(); toString.call();
Object.prototype.toString.call([]); // [object Array] Object.prototype.toString.call({}); // [object Object] Object.prototype.toString.call(""); // [object String] Object.prototype.toString.call(new Date()); // [object Date] Object.prototype.toString.call(1); // [object Number] Object.prototype.toString.call(function () {}); // [object Function] Object.prototype.toString.call(/test/i); // [object RegExp] Object.prototype.toString.call(true); // [object Boolean] Object.prototype.toString.call(null); // [object Null] Object.prototype.toString.call(); // [object Undefined]
幾乎十全十美,只是不能檢測用戶自定義類型
2.5 小結typeof只能檢測基本數據類型,對于null還有Bug
instanceof適用于檢測對象,它是基于原型鏈運作的
constructor指向的是最初創建者,而且容易偽造,不適合做類型判斷
toString適用于ECMA內置JavaScript類型(包括基本數據類型和內置對象)的類型判斷
基于引用判等的類型檢查都有跨窗口問題,比如instanceof和constructor
如果你要判斷的是基本數據類型或JavaScript內置對象,使用toString;如果要判斷的是自定義類型,請使用instanceof
參考w3cPlus - JavaScrit的變量:如何檢測變量類型
JavaScript高級程序設計(第3版)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90905.html
摘要:值的比較只進行值的比較會進行數據類型的轉換。只要在當前實例的原型鏈上,我們用其檢測出來的結果都是。但檢測與不一樣,還可以處理基本數據類型的檢測。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有幾種類型的值? Javascript有兩種數據類型,分別是基本數據類型和引用數據類型。其中...
摘要:值的比較只進行值的比較會進行數據類型的轉換。只要在當前實例的原型鏈上,我們用其檢測出來的結果都是。但檢測與不一樣,還可以處理基本數據類型的檢測。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有幾種類型的值? Javascript有兩種數據類型,分別是基本數據類型和引用數據類型。其中...
摘要:值的比較只進行值的比較會進行數據類型的轉換。只要在當前實例的原型鏈上,我們用其檢測出來的結果都是。但檢測與不一樣,還可以處理基本數據類型的檢測。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有幾種類型的值? Javascript有兩種數據類型,分別是基本數據類型和引用數據類型。其中...
摘要:之關鍵字保留字變量及數據類型個人總結,分享也供自己日后查詢變量中變量通過關鍵字來聲明的。在使用聲明變量但未對其加以初始化時,這個變量的值就是,例如在控制臺輸出是也就是未定義類型布爾類型該類型只有兩個字面值和。 javascript之關鍵字,保留字, 變量及數據類型 個人總結,分享也供自己日后查詢 1.變量 javascript 中變量通過var關鍵字(variable)來聲明的。 變量...
閱讀 3281·2021-11-25 09:43
閱讀 2084·2021-09-22 10:02
閱讀 3310·2021-09-06 15:00
閱讀 2298·2019-08-30 15:56
閱讀 2347·2019-08-30 15:54
閱讀 3224·2019-08-30 14:14
閱讀 2258·2019-08-29 17:25
閱讀 2902·2019-08-29 17:16