前言:眾所周知巾陕,JS中一共有7種數(shù)據(jù)類型毕荐,分別是number、string猩系、boolean甲锡、null兆蕉、undefined、symbol缤沦、object恨樟。其中前六種是簡單數(shù)據(jù)類型,object對象屬于復(fù)雜數(shù)據(jù)類型疚俱。本文大致介紹一下5中簡單數(shù)據(jù)類型(symbol是ES6新增的劝术,本文暫不介紹)
1、number 數(shù)值類型
- JavaScript 內(nèi)部呆奕,所有數(shù)字都是以64位浮點數(shù)形式儲存养晋,即使整數(shù)也是如此。所以梁钾,1與1.0是相同的绳泉,是同一個數(shù)。這就是說姆泻,JavaScript 語言的底層根本沒有整數(shù)零酪,所有數(shù)字都是小數(shù)(64位浮點數(shù))。注:JS中的小數(shù)還可以這么寫拇勃,
.1
表示0.1因此:0.1 + 0.2 === 0.3
這句話是錯誤的四苇。 - JS中的科學(xué)計數(shù)法(E大寫小寫都可以),如
123e3 // 123000
123e-3 // 0.123
- JS中很坑的一點是方咆,有時候你定義的數(shù)值并不一定是存儲的數(shù)值月腋,根本原因是JS中的進制轉(zhuǎn)換機制。
比如0111
會識別為73瓣赂,因為它將其識別成了8進制進行存儲榆骚,然后用十進制展示出來。
其中:
十進制:沒有前導(dǎo)0的數(shù)值煌集。
八進制:有前綴0o或0O的數(shù)值妓肢,或者有前導(dǎo)0、且只用到0-7的八個阿拉伯?dāng)?shù)字的數(shù)值苫纤。
十六進制:有前綴0x或0X的數(shù)值碉钠。
二進制:有前綴0b或0B的數(shù)值纲缓。 - 非數(shù)值NaN:NaN是 JavaScript 的特殊值,表示“非數(shù)字”(Not a Number)放钦,主要出現(xiàn)在將字符串解析成數(shù)字出錯的場合。需要注意的是
NaN === NaN
這句話是錯誤的恭金。
非數(shù)值NaN可以用isNaN()來檢測數(shù)值是否為非數(shù)值
2操禀、string 字符串類型
字符串就是零個或多個排在一起的字符,放在單引號或雙引號之中横腿。
- 多行文本輸入(即字符串需要包含回車)
建議使用的方法:連接運算符(+)連接多個單行字符串颓屑,將長字符串拆成多行書寫,輸出的時候是單行耿焊。 - 轉(zhuǎn)義:反斜杠(\)在字符串內(nèi)有特殊含義揪惦,用來表示一些特殊字符,所以又稱為轉(zhuǎn)義符罗侯。主要的有以下幾種
\0
:null(\u0000)
\b
:后退鍵(\u0008)
\f
:換頁符(\u000C)
\n
:換行符(\u000A)
\r
:回車鍵(\u000D)
\t
:制表符(\u0009)
\v
:垂直制表符(\u000B)
\'
:單引號(\u0027)
\"
:雙引號(\u0022)
\\
:反斜杠(\u005C)
- 字符串和數(shù)組一樣是有l(wèi)ength屬性的器腋,但該屬性是無法改變的。
- 字符集钩杰。需要注意的是:
JavaScript 對 UTF-16 的支持是不完整的纫塌,由于歷史原因,只支持兩字節(jié)的字符讲弄,不支持四字節(jié)的字符措左。這是因為 JavaScript 第一版發(fā)布的時候,Unicode 的碼點只編到U+FFFF避除,因此兩字節(jié)足夠表示了怎披。后來,Unicode 納入的字符越來越多瓶摆,出現(xiàn)了四字節(jié)的編碼凉逛。但是,JavaScript 的標準此時已經(jīng)定型了群井,統(tǒng)一將字符長度限制在兩字節(jié)鱼炒,導(dǎo)致無法識別四字節(jié)的字符。上一節(jié)的那個四字節(jié)字符??蝌借,瀏覽器會正確識別這是一個字符昔瞧,但是 JavaScript 無法識別,會認為這是兩個字符菩佑。
- Base轉(zhuǎn)碼
有時自晰,文本里面包含一些不可打印的符號,比如 ASCII 碼0到31的符號都無法打印出來稍坯,這時可以使用 Base64 編碼酬荞,將它們轉(zhuǎn)成可以打印的字符搓劫。另一個場景是,有時需要以文本格式傳遞二進制數(shù)據(jù)混巧,那么也可以使用 Base64 編碼枪向。
btoa():任意值轉(zhuǎn)為 Base64 編碼
atob():Base64 編碼轉(zhuǎn)為原來的值
3、boolean 布爾類型
Boolean類型只有兩個值咧党,分別是true
和false
秘蛔。
布爾值代表“真”和“假”兩個狀態(tài)“猓“真”用關(guān)鍵字true表示深员,“假”用關(guān)鍵字false表示。布爾值只有這兩個值蛙埂。
其中倦畅,如果需要將各種類型的數(shù)據(jù)轉(zhuǎn)換成boolean類型,以下幾種會轉(zhuǎn)換為false绣的,其余的都是true:
undefined叠赐、null、false
數(shù)值0屡江、非數(shù)值NaN燎悍、空字符串""或''
4、null && undefined
這兩種數(shù)值類型都用來表示變量沒有值盼理,但有以下區(qū)別以及一些需要注意的地方:
- 如果變量沒有值谈山,如
var a;
則變量a為undefind - null 一般表示空對象,比如聲明了一個對象但不想給值宏怔,可以設(shè)置其為
- 非空對象(如變量)暫時不給值奏路,可以設(shè)置其為
var a = undefined;
但由于第1條,不給確定的值變量的值會默認為undefined臊诊,所以可以直接只聲明即可鸽粉,如var a ;
5、typeof 運算符
typeof運算符可以確定一個值到底是什么數(shù)據(jù)類型抓艳。
需要注意的是null的數(shù)據(jù)類型并不是object對象(原因見①)触机,以及function的數(shù)據(jù)類型是object對象,function本身不是一種數(shù)據(jù)類型
①:1995年的 JavaScript 語言第一版玷或,只設(shè)計了五種數(shù)據(jù)類型(對象儡首、整數(shù)、浮點數(shù)偏友、字符串和布爾值)蔬胯,沒考慮null,只把它當(dāng)作object的一種特殊值位他。后來null獨立出來氛濒,作為一種單獨的數(shù)據(jù)類型产场,為了兼容以前的代碼,typeof null返回object就沒法改變了舞竿。