一,資料型別
基本型別(值型別):
1. Undefined
2. Null
3. Boolean
4. NaN
5. String
復雜型別(參考型別) :
1. Object
2. Array
3. Date
4. RegExp
5. Function
二,值型別與參考型別的差別
基本型別在記憶體中占據固定大小的空間,因此被保存在堆疊記憶體中
從一個變數向另一個變數復制基本型別的值,復制的是值的副本
參考型別的值是物件,保存在堆記憶體
包含參考型別值的變數實際上包含的并不是物件本身,而是一個指向該物件的指標
從一個變數向另一個變數復制參考型別的值的時候,復制是參考指標,因此兩個變數最終都指向同一個物件
三,判斷資料型別
方案一:js內置方法typeof
檢測基本資料型別的最佳選擇是使用typeof
typeof 來判斷資料型別,只能區分基本型別,即 “number”,”string”,”undefined”,”boolean”,”object”,“function”,“symbol” (ES6新增)七種,
對于陣列、null、物件來說,其關系錯綜復雜,使用 typeof 都會統一回傳 “object” 字串,
var bool = true var num = 1 var str = 'abc' var und = undefined var nul = null var arr = [1,2,3] var obj = {} var fun = function(){} var reg = new RegExp() console.log(typeof bool); //boolean console.log(typeof num); //number console.log(typeof str); //string console.log(typeof und); //undefined console.log(typeof nul); //object console.log(typeof arr); //object console.log(typeof obj); //object console.log(typeof reg); //object console.log(typeof fun); //function 由結果可知,除了在檢測null時回傳 object 和檢測function時放回function,對于參考型別回傳均為object
方案二:Object.prototype.toString()
Object.prototype.toString方法回傳物件的型別字串,因此可以用來判斷一個值的型別
var obj = {}; obj.toString() // "[object Object]" 上面代碼呼叫空物件的toString方法,結果回傳一個字串object Object,其中第二個Object表示該值的建構式,這是一個十分有用的判斷資料型別的方法,
Object.prototype.toString.call(value)
上面代碼表示對value這個值呼叫Object.prototype.toString方法,
不同資料型別的Object.prototype.toString方法回傳值如下,
數值:回傳[object Number], 字串:回傳[object String], 布林值:回傳[object Boolean], undefined:回傳[object Undefined], null:回傳[object Null], 陣列:回傳[object Array], arguments 物件:回傳[object Arguments], 函式:回傳[object Function], Error 物件:回傳[object Error], Date 物件:回傳[object Date], RegExp 物件:回傳[object RegExp], 其他物件:回傳[object Object],
那么利用這個特性,可以寫出一個比typeof運算子更準確的型別判斷函式,
封裝出一個判斷型別的函式如下:
var type = function (o){ var s = Object.prototype.toString.call(o); return s.match(/\[object (.*?)\]/)[1].toLowerCase(); }; type({}); // "object" type([]); // "array" type(5); // "number" type(null); // "null" type(); // "undefined" type(/abcd/); // "regex" type(new Date()); // "date"
另外:還可以加上專門判斷某種型別資料的方法
var type = function (o){ var s = Object.prototype.toString.call(o); return s.match(/\[object (.*?)\]/)[1].toLowerCase(); }; var arr = ['Null', 'Undefined', 'Object', 'Array', 'String', 'Number', 'Boolean', 'Function', 'RegExp'] arr.forEach(function (t) { type['is' + t] = function (o) { return type(o) === t.toLowerCase(); }; });
之后我們可以通過封裝出的方法去在不同需求時使用:如下
type.isObject({}) // true
type.isNumber(NaN) // true
type.isRegExp(/abc/) // true
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/109900.html
標籤:JavaScript
上一篇:JS物件的創建方式
