JavaScript語(yǔ)言的每一個(gè)值都屬于一種數(shù)據(jù)類型叁巨,共有7種類型。如下:
數(shù)值(number)呐籽、字符串(string)俘种、布爾值(boolean)、符號(hào)(symbol)绝淡、null宙刘、undefined、對(duì)象(object)牢酵。
1悬包、number:整數(shù)和小數(shù)。
JavaScript對(duì)整數(shù)提供四種進(jìn)制的表示方法:十進(jìn)制馍乙、二進(jìn)制布近、十六進(jìn)制、二進(jìn)制丝格。
- 十進(jìn)制:沒(méi)有前導(dǎo) 0 的數(shù)值撑瞧。
1.23e2 // 123
.1 // 0.1
1+.1 // 1.1
- 二進(jìn)制:有前綴0b或0B開(kāi)頭的數(shù)值
ob1 // 1
ob10 // 2
ob11 // 3
- 八進(jìn)制:以0開(kāi)頭且只用到0-7的八個(gè)阿拉伯?dāng)?shù)值。
011 // 9
- 十六進(jìn)制:有前綴0x或0X的數(shù)值
ox11 // 17
默認(rèn)情況下显蝌,JavaScript內(nèi)部會(huì)自動(dòng)將八進(jìn)制预伺、十六進(jìn)制、二進(jìn)制轉(zhuǎn)為十進(jìn)制曼尊。
2酬诀,string:就是零個(gè)或多個(gè)排在一起的字符,放在單引號(hào)或雙引號(hào)之中骆撇。
'abc'
"abc"
單引號(hào)字符串的內(nèi)部可以使用雙引號(hào)瞒御,雙引號(hào)字符串之間可以使用單引號(hào)。
'key = "value" '
" It's a long journey "
如果要在單引號(hào)字符串的內(nèi)部使用單引號(hào)神郊,就必須在內(nèi)部的單引號(hào)前加(反斜杠 \) 用來(lái)轉(zhuǎn)義肴裙,雙引號(hào)也是如此趾唱。
轉(zhuǎn)義
var a = ' \' ' // 單引號(hào) '
var a = ' \n ' // 表回車(chē)
var a = ' \t ' // Table(制表符)
var a = ' \\ ' // 表反斜杠 \
如果是多行字符串,可以在每一行末尾使用反斜杠\按enter鍵換行蜻懦。
var a = ' 123 \
456 ';
// 這樣可換行
也可用 +
var a = ' 123 ' +
' 456 ';
如果這樣寫(xiě)嫌麻煩的話甜癞,ES6規(guī)定使用 (反引號(hào) `)什么都不用寫(xiě),直接按回車(chē)阻肩。
var a = ` 12345
67890 `;
3带欢,boolean:布爾值代表“真”和“假”兩個(gè)狀態(tài)。只有兩個(gè)值:真true烤惊,假false乔煞。
下列運(yùn)算符會(huì)返回布爾值:
前置邏輯運(yùn)算符: ! (Not)
相等運(yùn)算符:===,!==柒室,==渡贾,!=
比較運(yùn)算符:>,>=雄右,<空骚,<=
如果 JavaScript 預(yù)期某個(gè)位置應(yīng)該是布爾值,會(huì)將該位置上現(xiàn)有的值自動(dòng)轉(zhuǎn)為布爾值擂仍。轉(zhuǎn)換規(guī)則是除了下面六個(gè)值被轉(zhuǎn)為false囤屹,其他值都視為true。
undefined
null
false
0
NaN
""或''(空字符串)
注意逢渔,空數(shù)組([])和空對(duì)象({})對(duì)應(yīng)的布爾值肋坚,都是true
4,null和undefined:都可以表示沒(méi)有肃廓。
null表示空值智厌,即該處的值現(xiàn)在為空。調(diào)用函數(shù)時(shí)盲赊,某個(gè)參數(shù)未設(shè)置任何值铣鹏,這時(shí)就可以傳入null,表示該參數(shù)為空哀蘑。比如诚卸,某個(gè)函數(shù)接受引擎拋出的錯(cuò)誤作為參數(shù),如果運(yùn)行過(guò)程中未出錯(cuò)递礼,那么這個(gè)參數(shù)就會(huì)傳入null惨险,表示未發(fā)生錯(cuò)誤。
undefined表示“未定義”脊髓。
他兩區(qū)別:
1,變量沒(méi)有賦值 --undefined;
var n // n = undefined
2栅受,如果有一個(gè)對(duì)象object将硝,不想給值恭朗,那就給一個(gè)null,表示空對(duì)象
var obj =null // 只想有一個(gè)對(duì)象依疼,但沒(méi)賦值
有一個(gè)非對(duì)象object痰腮,不想給值,可給一個(gè)undefined律罢。表示不確定對(duì)象是什么比如是空字符串或者空數(shù)值就想給它一個(gè)空膀值,那么就給一個(gè)undefined。(這是一種慣例)
5误辑,object:對(duì)象就是一組“鍵值對(duì)”(key-value)的集合沧踏,是一種無(wú)序的復(fù)合數(shù)據(jù)集合。
對(duì)象的所有鍵名都是字符串(ES6 又引入了 Symbol 值也可以作為鍵名)巾钉,所以加不加引號(hào)都可以翘狱。
var person = {
'name' = ' tom ',
'gender' = 'male',
}
取值 person.['name']時(shí)單引號(hào)不能省略,否側(cè)瀏覽器可能不認(rèn)識(shí)報(bào)錯(cuò)砰苍。
如果鍵名是數(shù)值潦匈,會(huì)被自動(dòng)轉(zhuǎn)為字符串。
如果鍵名不符合標(biāo)識(shí)名的條件(比如第一個(gè)字符為數(shù)字赚导,或者含有空格或運(yùn)算符)茬缩,且也不是數(shù)字,則必須加上引號(hào)吼旧,否則會(huì)報(bào)錯(cuò)凰锡。
空字符串也可做key。最好在左邊鍵名加上引號(hào)黍少,以免不必要的BUG寡夹。
查看一個(gè)對(duì)象本身的所有屬性,可以使用Object.keys方法厂置。
var obj = {
key1: 1,
key2: 2
};
Object.keys(obj);
// ['key1', 'key2']
delete命令用于刪除對(duì)象的屬性菩掏,刪除成功后返回true。
var obj = { p: 1 };
Object.keys(obj) // ["p"]
delete obj.p // true
obj.p // undefined
Object.keys(obj) // []
in運(yùn)算符用于檢查對(duì)象是否包含某個(gè)屬性(注意昵济,檢查的是鍵名智绸,不是鍵值),如果包含就返回true访忿,否則返回false瞧栗。它的左邊是一個(gè)字符串,表示屬性名海铆,右邊是一個(gè)對(duì)象迹恐。
var obj = { p: 1 };
'p' in obj // true
'toString' in obj // true
for...in循環(huán)用來(lái)遍歷一個(gè)對(duì)象的全部屬性。
var person ={
name: 'tom' ,
age': 18,
}
for (var key in person){
console.log(key)
}
// name
// age
打出來(lái)的東西順序不固定卧斟。
打出value:
var person ={
name: 'tom' ,
age: 18,
}
for (var key in person){
console.log(person[key])
}
// tom
// 18
打出key,value:
var person ={
name: 'tom' ,
age': 18,
}
for (var key in person){
console.log(key,person[key])
}
// name tom
// age 18
typeof運(yùn)算符可以返回一個(gè)值的數(shù)據(jù)類型殴边。
數(shù)值憎茂、字符串、布爾值分別返回number锤岸、string竖幔、boolean。
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
函數(shù)返回function是偷。
function f() {}
typeof f
// "function"
undefined返回undefined拳氢。
typeof undefined
// "undefined"
對(duì)象返回object、空數(shù)組([])的類型也是objectull返回object蛋铆。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
null返回object
typeof null // "object"
null的類型是object馋评,這是由于歷史原因造成的。1995年的 JavaScript 語(yǔ)言第一版戒职,只設(shè)計(jì)了五種數(shù)據(jù)類型(對(duì)象栗恩、整數(shù)、浮點(diǎn)數(shù)洪燥、字符串和布爾值)磕秤,沒(méi)考慮null,只把它當(dāng)作object的一種特殊值捧韵。后來(lái)null獨(dú)立出來(lái)市咆,作為一種單獨(dú)的數(shù)據(jù)類型,為了兼容以前的代碼再来,typeof null返回object就沒(méi)法改變了蒙兰。
6,symbol:ES6 引入了一種新的原始數(shù)據(jù)類型Symbol芒篷,表示獨(dú)一無(wú)二的值搜变。
Symbol 值通過(guò)Symbol函數(shù)生成。這就是說(shuō)针炉,對(duì)象的屬性名現(xiàn)在可以有兩種類型挠他,一種是原來(lái)就有的字符串,另一種就是新增的 Symbol 類型篡帕。凡是屬性名屬于 Symbol 類型殖侵,就都是獨(dú)一無(wú)二的,可以保證不會(huì)與其他屬性名產(chǎn)生沖突镰烧。
注意拢军,Symbol函數(shù)前不能使用new命令,否則會(huì)報(bào)錯(cuò)怔鳖。這是因?yàn)樯傻?Symbol 是一個(gè)原始類型的值茉唉,不是對(duì)象。也就是說(shuō),由于 Symbol 值不是對(duì)象赌渣,所以不能添加屬性魏铅〔蹋基本上坚芜,它是一種類似于字符串的數(shù)據(jù)類型。
更多參考:ECMAScript 6入門(mén)