JavaScript語言的每一個值,都屬于某一種數(shù)據(jù)類型剿配。JavaScript的數(shù)據(jù)類型,共有七種阅束。
- 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
- 字符串(string):字符組成的文本(比如”Hello World”)
- 布爾值(boolean):true(真)和false(假)兩個特定值
- 符號(symbol):ES6引入的一種新的原始數(shù)據(jù)類型Symbol,表示獨(dú)一無二的值蝇更。
- undefined:表示“未定義”或不存在,即此處目前沒有任何值年扩。
- null:表示空缺,即此處應(yīng)該有一個值厨幻,但目前為空。
- 對象(object):各種值組成的集合况脆。
通常我們將數(shù)值、字符串格了、布爾值稱為簡單類型(primitive type);將對象稱為復(fù)雜類型(complex type),因為一個對象往往是多個原始類型的值的合成。
對象區(qū)分為三個類型:
狹義的對象(object)
數(shù)組(array)
函數(shù)(function)
null和undefined
null與undefined都可以表示“沒有”弹惦,含義非常相似。將一個變量賦值為undefined或null棠隐,語法效果幾乎沒區(qū)別算墨。
var a = undefined;
// 或者
var a = null;
上面代碼中宵荒,a變量分別被賦值為undefined和null净嘀,這兩種寫法的效果幾乎等價侠讯。
在if語句中,它們都會被自動轉(zhuǎn)為false厢漩,相等運(yùn)算符(==)甚至直接報告兩者相等.
兩者的區(qū)別:null是一個表示”無”的對象,轉(zhuǎn)為數(shù)值時為0溜嗜;undefined是一個表示”無”的原始值,轉(zhuǎn)為數(shù)值時為NaN炸宵。
- 如果變量沒有值,會返回undefined
- 如果有一個變量不想賦值土全,推薦賦值null(空對象)会涎。如果有一個非對象不想賦值瑞凑,推薦賦值undefined(空非對象)(例如:var a)
布爾值(boolean)
布爾值代表“真”和“假”兩個狀態(tài)∽延“真”用關(guān)鍵字true表示,“假”用關(guān)鍵字false表示技掏。布爾值只有這兩個值铃将。
如果JavaScript預(yù)期某個位置應(yīng)該是布爾值,會將該位置上現(xiàn)有的值自動轉(zhuǎn)為布爾值零截。轉(zhuǎn)換規(guī)則是除了下面六個值被轉(zhuǎn)為false麸塞,其他值都視為true涧衙。
undefined
null
false
0
NaN
''(空字符串)
布爾值往往用于程序流程的控制,且空數(shù)組([])和空對象({})對應(yīng)的布爾值,都是true
if ([]) {
console.log(true);
}
// true
if ({}) {
console.log(true);
}
// true
對象(object)
對象(object)是JavaScript的核心概念弧哎,也是最重要的數(shù)據(jù)類型。JavaScript的所有數(shù)據(jù)都可以被視為對象偎捎。
簡而言之序攘,對象就是一種無序的數(shù)據(jù)集合茴她,由若干個“鍵值對”(key-value)構(gòu)成程奠。
var o = {
p1: 'Hello',
p2: 'World'
};
對象的所有鍵名都是字符串,所以加不加引號都可以瞄沙。對象的每一個“鍵名”又稱為“屬性”(property),它的“鍵值”可以是任何數(shù)據(jù)類型申尼。
如果不同的變量名指向同一個對象垫桂,那么它們都是這個對象的引用师幕,也就是說指向同一個內(nèi)存地址伪货。修改其中一個變量钾怔,會影響到其他所有變量蒙挑。
PS(關(guān)于對象是否加引號和引用方式可以看我的這篇文章)
typeof運(yùn)算符
JavaScript有三種方法,可以確定一個值到底是什么類型
typeof運(yùn)算符
instanceof運(yùn)算符
Object.prototype.toString方法
typeof運(yùn)算符可以返回一個值的數(shù)據(jù)類型忆蚀。
- 數(shù)值、字符串男旗、布爾值分別返回number欣鳖、string察皇、boolean泽台。
- function函數(shù)返回function。
- undefined返回undefined怀酷。
- 除此以外,其他情況(包括null)都返回object桅锄。
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
ps:更多了解數(shù)據(jù)類型轉(zhuǎn)換可以看這篇文章