最近在學(xué)習(xí)JS的數(shù)據(jù)類型的相關(guān)內(nèi)容而线,在此就做一些相關(guān)的學(xué)習(xí)筆記。
一葛作、概述
JS的數(shù)據(jù)類型總共有7種。
1.number(數(shù)值)猖凛,2.string(字符串)赂蠢,3.Boolean(布爾值),4.symbol(符號(hào))辨泳,5.null虱岂,6.undefined,7.object(對(duì)象)菠红。其中symbol是ES6新增的第岖,本次記錄并不算在內(nèi)。
數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
字符串(string):文本(比如Hello World)试溯。
布爾值(boolean):表示真?zhèn)蔚膬蓚€(gè)特殊值蔑滓,即true(真)和false(假)
undefined:表示“未定義”或不存在,即由于目前沒有定義遇绞,所以此處暫時(shí)沒有任何值
null:表示空值键袱,即此處的值為空。
對(duì)象(object):各種值組成的集合摹闽。
二蹄咖、數(shù)值(number)
JavaScript存儲(chǔ)數(shù)字的時(shí)候都是以64位浮點(diǎn)數(shù)形式進(jìn)行的,整數(shù)也是一樣的付鹿,1和1.0是同一個(gè)數(shù)澜汤。JavaScript提供的有效數(shù)字最長(zhǎng)為53個(gè)二進(jìn)制位,這就說明精度最多只能到53個(gè)二進(jìn)制位舵匾,即在-2^53到2^53之間的數(shù)都可以精確表示俊抵。
JavaScript 對(duì)整數(shù)提供四種進(jìn)制的表示方法:十進(jìn)制、十六進(jìn)制纽匙、八進(jìn)制务蝠、二進(jìn)制。
在JavaScript中各種進(jìn)制的表現(xiàn)形式如下
十進(jìn)制:沒有前導(dǎo)0的數(shù)值烛缔。
八進(jìn)制:有前綴0o或0O的數(shù)值馏段,或者有前導(dǎo)0、且只用到0-7的八個(gè)阿拉伯?dāng)?shù)字的數(shù)值践瓷。
十六進(jìn)制:有前綴0x或0X的數(shù)值院喜。
二進(jìn)制:有前綴0b或0B的數(shù)值。
在默認(rèn)的情況下JavaScript會(huì)將十六進(jìn)制晕翠、八進(jìn)制喷舀、二進(jìn)制轉(zhuǎn)換為十進(jìn)制砍濒。比如:
0xff ——>255,0o377 ——>255硫麻,0b11——>3
parseInt方法用于將字符串轉(zhuǎn)換為整數(shù)爸邢。parseInt('123')——> 123,如果字符串頭部有空格拿愧,空格會(huì)被自動(dòng)去除杠河,如果parseInt的參數(shù)不是字符串,則會(huì)先轉(zhuǎn)為字符串在轉(zhuǎn)換浇辜,字符串為整數(shù)的時(shí)候券敌,是一個(gè)個(gè)字符依次轉(zhuǎn)換,如果遇到不能轉(zhuǎn)為數(shù)字的字符柳洋,就不在進(jìn)行下去待诅,返回已經(jīng)轉(zhuǎn)好的部分,如果字符串的第一個(gè)字符不能轉(zhuǎn)化為數(shù)字熊镣,返回NaN卑雁。
JavaScript中可以進(jìn)行進(jìn)制的轉(zhuǎn)換,parseInt(‘1000’轧钓,2)——>8;parseInt(‘1000’序厉,6)——>216;parseInt(‘1000’锐膜,8)——>512毕箍;這三個(gè)例子分別表示的是二進(jìn)制、六進(jìn)制道盏、八進(jìn)制的1000而柑,分別等于十進(jìn)制的8、216荷逞、512媒咳。
parseFloat方法用于將一個(gè)字符串轉(zhuǎn)為浮點(diǎn)數(shù),isNaN方法可以用來判斷一個(gè)值是否為NaN种远,isFinite方法返回一個(gè)布爾值涩澡,表示某個(gè)值是否為正常的數(shù)值。
三坠敷、字符串
字符串就是零個(gè)或多個(gè)排在一起的字符妙同,放在單引號(hào)或雙引號(hào)之中。
單引號(hào)字符串的內(nèi)部膝迎,可以使用雙引號(hào)粥帚。雙引號(hào)字符串的內(nèi)部,可以使用單引號(hào)限次。如果想在實(shí)現(xiàn)在單引號(hào)中加入單引號(hào)芒涡,或者在雙引號(hào)中引入雙引號(hào),可以使用轉(zhuǎn)義符,比如'It\'s a secret'或者"she say \"Hello\""费尽。多行字符串的顯示方法有3種:
1.在需要換行的地方添加 \
var s=’123456\
???????? ? 7890’
在 \ 后面不能有空格赠群。
2.在需要斷行的地方使用 + (推薦使用)
var s2=’12345’+
???????? ?? ‘67890’
在+后面可以有空格。
方法3:使用反引號(hào)旱幼,數(shù)字鍵1左邊的那個(gè)鍵
var s3=`12345
???????? ???????? 6789`
在換行之后乎串,5和6之間會(huì)存在換行和空格。
反斜杠(\)在字符串內(nèi)有特殊含義速警,用來表示一些特殊字符叹誉,所以又稱為轉(zhuǎn)義符。需要用反斜杠轉(zhuǎn)義的特殊字符闷旧,主要有下面這些长豁。
\0?:null(\u0000)
\b?:后退鍵(\u0008)
\f?:換頁符(\u000C)
\n?:換行符(\u000A)
\r?:回車鍵(\u000D)
\t?:制表符(\u0009)
\v?:垂直制表符(\u000B)
\'?:?jiǎn)我?hào)(\u0027)
\"?:雙引號(hào)(\u0022)
\\?:反斜杠(\u005C)
字符串可以被視為字符數(shù)組,因此可以使用數(shù)組的方括號(hào)運(yùn)算符忙灼,用來返回某個(gè)位置的字符(位置編號(hào)從0開始)匠襟。但是卻無法改變字符串之中的單個(gè)字符,length屬性返回字符串的長(zhǎng)度该园,該屬性也是無法改變的酸舍。
JavaScript 不僅以 Unicode 儲(chǔ)存字符,還允許直接在程序中使用 Unicode 碼點(diǎn)表示字符里初,即將字符寫成\uxxxx的形式啃勉,其中xxxx代表該字符的 Unicode 碼點(diǎn)。\u00A9代表版權(quán)符號(hào)双妨。
有時(shí)淮阐,文本里面包含一些不可打印的符號(hào),比如 ASCII 碼0到31的符號(hào)都無法打印出來刁品,這時(shí)可以使用 Base64 編碼泣特,將它們轉(zhuǎn)成可以打印的字符。所謂 Base64 就是一種編碼方法挑随,可以將任意值轉(zhuǎn)成 0~9状您、A~Z、a-z兜挨、+和/這64個(gè)字符組成的可打印字符膏孟。使用它的主要目的,不是為了加密暑劝,而是為了不出現(xiàn)特殊字符骆莹,簡(jiǎn)化程序的處理。
btoa():任意值轉(zhuǎn)為 Base64 編碼
atob():Base64 編碼轉(zhuǎn)為原來的值
要將非 ASCII 碼字符轉(zhuǎn)為 Base64 編碼担猛,必須中間插入一個(gè)轉(zhuǎn)碼環(huán)節(jié)幕垦,再使用這兩個(gè)方法丢氢。
functionb64Encode(str){
????returnbtoa(encodeURIComponent(str));
}
functionb64Decode(str){
returndecodeURIComponent(atob(str));
}
b64Encode('你好')// "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE')// "你好"
四、布爾值
布爾值代表“真”和“假”兩個(gè)狀態(tài)先改【尾欤“真”用關(guān)鍵字true表示,“假”用關(guān)鍵字false表示仇奶。布爾值只有這兩個(gè)值貌嫡。
兩元邏輯運(yùn)算符:?&&?(And),||?(Or)
前置邏輯運(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
""或''(空字符串)
五仁讨、null和undefined
null和undefined都表示沒有,但是為什么有兩個(gè)量表示沒有值的情況呢实昨?這是因?yàn)樵贘S語言中設(shè)計(jì)的時(shí)候沒有設(shè)計(jì)好(這是JS的一段黑歷史)
兩者的主要區(qū)別是:
對(duì)于一個(gè)沒有賦值的對(duì)象(object)就用null表示洞豁;
對(duì)于一個(gè)沒有賦值的非對(duì)象數(shù)據(jù)就用undefined表示;
以上的數(shù)據(jù)類型可以歸為基本數(shù)據(jù)類型(簡(jiǎn)單數(shù)據(jù)類型)
六屠橄、對(duì)象(object)
對(duì)象(object)是復(fù)雜的數(shù)據(jù)類型族跛,而復(fù)雜數(shù)據(jù)類型就是簡(jiǎn)單數(shù)據(jù)類型的組合闰挡。
什么是對(duì)象锐墙?簡(jiǎn)單說,對(duì)象就是一組“鍵值對(duì)”(key-value)的集合长酗,是一種無序的復(fù)合數(shù)據(jù)集合溪北。對(duì)象是通過哈希表來建立的,對(duì)象的所有鍵名都是字符串(ES6 又引入了 Symbol 值也可以作為鍵名)夺脾,而對(duì)象中的value值可以是字符串之拨,數(shù)字,布爾值咧叭,undefined和null蚀乔,以及對(duì)象,比如
var person= {
???????? key:value,
???????? name:‘張三’,??
???????? age:18,
???????? married:true,
????????xiaosan:undefined,
????????children: {name:’xxx’,age:1}
}
每一個(gè)鍵值對(duì)與下一個(gè)鍵值對(duì)之間需要添加一個(gè)逗號(hào)菲茬,最后一個(gè)鍵值對(duì)后面可以不需要添加逗號(hào)吉挣。
對(duì)象引用的時(shí)候可以有如下形式:
person[‘name’],(對(duì))
person.name,(對(duì))
person[name],(錯(cuò))
key在調(diào)用的時(shí)候是字符串派撕,就不能直接是調(diào)用,key可以是空字符串但是需要加上單引號(hào)或者雙引號(hào)
加上單引號(hào)或者雙引號(hào)的object功能更加強(qiáng)大睬魂。比如9a:’frank’會(huì)報(bào)錯(cuò)终吼,而‘9a’:’frank’就不會(huì)報(bào)錯(cuò),鍵名的取名是需要滿足標(biāo)識(shí)符的規(guī)則氯哮,此時(shí)調(diào)用的時(shí)候可以使用person.name际跪。但是一般情況下都是不加引號(hào),加引號(hào)在編寫代碼的時(shí)候是比較麻煩的喉钢,所以大家在編寫代碼的時(shí)候一般都不加引號(hào)姆打,而是選擇規(guī)范的命名。
如何打印出一個(gè)哈希表中的key和value
var person = {
name: ‘frank’,
age:18
}
for(var key in person){
???????? console.log(key,person[key])
}
七肠虽、如何知道一個(gè)數(shù)據(jù)的類型
使用typeof
但是會(huì)出現(xiàn)的bug有兩個(gè):
1.typeof null?? // ‘object’
2.var function f(){}
typeof? f? // "function"
而其他返回的typeof就是正常的情況
var t = 1;
typeof t? ?// "number"
此處做的是比較簡(jiǎn)單的記錄穴肘,主要是通過學(xué)習(xí)阮一峰老師的JavaScript的教程得來的,他的教程的鏈接是wangdoc.com/javascript舔痕,隨著不斷地學(xué)習(xí)將會(huì)做更多記錄评抚。