- 基本類型有6種,分別是undefined,null,bool,string,number,symbol(ES6新增)
- 雖然 typeof null 返回的值是 object,但是null不是對(duì)象,而是基本數(shù)據(jù)類型的一種。
- 基本數(shù)據(jù)類型存儲(chǔ)在棧內(nèi)存,存儲(chǔ)的是值。
- 復(fù)雜數(shù)據(jù)類型的值存儲(chǔ)在堆內(nèi)存,地址(指向堆中的值)存儲(chǔ)在棧內(nèi)存。當(dāng)我們把對(duì)象賦值給另外一個(gè)變量的時(shí)候,復(fù)制的是地址,指向同一塊內(nèi)存空間,當(dāng)其中一個(gè)對(duì)象改變時(shí),另一個(gè)對(duì)象也會(huì)變化。
/**
* isComplex判斷是否是復(fù)雜數(shù)據(jù)類型,如果是返回true,否則返回false
* @param {*} data 需要被判斷類型的數(shù)據(jù)
*/
function isComplex(data) {
if (data && (typeof data === 'object' || typeof data === 'function')) {
return true;
}
return false;
}
封裝一個(gè)獲取變量準(zhǔn)確類型的函數(shù)
- 首先 typeof 能夠正確的判斷基本數(shù)據(jù)類型,但是除了 null, typeof null輸出的是對(duì)象。
- 但是對(duì)象來(lái)說(shuō),typeof 不能正確的判斷其類型, typeof 一個(gè)函數(shù)可以輸出 'function',而除此之外,輸出的全是 object,這種情況下,我們無(wú)法準(zhǔn)確的知道對(duì)象的類型。
所以封裝了一個(gè)獲取變量準(zhǔn)確類型的函數(shù)
function gettype(obj) {
var type = typeof obj;
if (type !== 'object') {
return type;
}
//如果不是object類型的數(shù)據(jù),直接用typeof就能判斷出來(lái)
//如果是object類型數(shù)據(jù),準(zhǔn)確判斷類型必須使用Object.prototype.toString.call(obj)的方式才能判斷
return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');
}
使typeof判斷類型
console.log(
typeof 123, //"number"
typeof 'dsfsf', //"string"
typeof false, //"boolean"
typeof [1,2,3], //"object"
typeof {a:1,b:2,c:3}, //"object"
typeof function(){console.log('aaa');}, //"function"
typeof undefined, //"undefined"
typeof null, //"object"
typeof new Date(), //"object"
typeof /^[a-zA-Z]{5,20}$/, //"object"
typeof new Error() //"object"
);
null 與 undefined的區(qū)別
null 是 javascript 的關(guān)鍵字,表示一個(gè)特殊值,常用來(lái)描述"空值",typeof 運(yùn)算返回"object",所以可以將 null 認(rèn)為是一個(gè)特殊的對(duì)象值,含義是"非對(duì)象"。
undefined 是預(yù)定義的全局變量,他的值就是"未定義", typeof 運(yùn)算返回 "undefined"