JS里的數(shù)據(jù)類(lèi)型

一、種類(lèi)

截止目前,JavaScript有七種數(shù)據(jù)類(lèi)型:number,string,boolean,symbol (ES6增),null,undefined,object 。
其中,前六種屬于基本數(shù)據(jù)類(lèi)型,object 屬于可由基本類(lèi)型組成的復(fù)雜類(lèi)型。

二、熟練掌握

  1. 數(shù)據(jù)類(lèi)型好比經(jīng)濟(jì)基礎(chǔ),打好了地基才能構(gòu)建高樓,這是踏入JS的第一步。
  2. (由于設(shè)計(jì)上的Bug)沒(méi)有一個(gè)能完美輔助我們判斷上述數(shù)據(jù)類(lèi)型的方法。
    判斷類(lèi)型常用到 typeof 操作符,typeof xxx 之后得到的都是字符串。
xxx 的類(lèi)型 number string boolean symbol undefined null object function
typeof xxx 'number' 'string' 'boolean' symbol 'undefined' 'object' 'object' 'function'

關(guān)于 typeof 的兩大Bug如下:

typeof null // 'object'
typeof function() {} // 'function'

三、基本類(lèi)型 number string boolean null undefined

值不可變的,即值本身無(wú)法被改變

1. number 數(shù)字類(lèi)型

JavaScript 內(nèi)部,所有數(shù)字均以64位浮點(diǎn)數(shù)存儲(chǔ),并沒(méi)分離出整數(shù)類(lèi)型,所以 1 === 1.0,表示同一個(gè)數(shù)字。但是當(dāng)運(yùn)算需要整數(shù)時(shí),JavaScript 又會(huì)自動(dòng)把 64位浮點(diǎn)數(shù) 轉(zhuǎn)成 32位整數(shù),然后再進(jìn)行運(yùn)算。

浮點(diǎn) 是一種對(duì)于實(shí)數(shù)的近似值數(shù)值表現(xiàn)法,由一個(gè)有效數(shù)字(即尾數(shù))加上冪數(shù)來(lái)表示,通常是乘以某個(gè)基數(shù)的整數(shù)次指數(shù)得到。以這種表示法表示的數(shù)值,稱(chēng)為浮點(diǎn)數(shù)(floating-point number)。利用浮點(diǎn)進(jìn)行運(yùn)算,稱(chēng)為浮點(diǎn)計(jì)算,這種運(yùn)算通常伴隨著因?yàn)闊o(wú)法精確表示而進(jìn)行的近似或舍入。
準(zhǔn)確性:由于浮點(diǎn)數(shù)不能表達(dá)所有實(shí)數(shù),浮點(diǎn)運(yùn)算與相應(yīng)的數(shù)學(xué)運(yùn)算有所差異,有時(shí)此差異極為顯著。
—— 摘取自維基百科

相對(duì)定點(diǎn)數(shù)而言,浮點(diǎn)數(shù)是小數(shù)點(diǎn)可變的數(shù),從上述定義可以看出,浮點(diǎn)數(shù)不是精確的值,它的小數(shù)運(yùn)算可能由于丟失精度,往往不是我們所期望的結(jié)果,所以涉及小數(shù)的比較和運(yùn)算要特別小心。

0.2 + 0.4 // 0.6000000000000001
0.6 / 0.1 // 5.999999999999999
(0.3 - 0.2) === (0.2 - 0.1)  // false
數(shù)值表示和進(jìn)制

數(shù)字可采用科學(xué)計(jì)數(shù)法表示,使用 eE進(jìn)行縮寫(xiě),如:1.23e2 == 123。
當(dāng) ①小數(shù)點(diǎn)前的數(shù)字多于21位 ②小數(shù)點(diǎn)后的零多于5個(gè),此時(shí)JavaScript會(huì)自動(dòng)數(shù)值轉(zhuǎn)為科學(xué)計(jì)數(shù)法表示。

JavaScript 的整數(shù)有4種字面量表示格式,分別是十進(jìn)制、二進(jìn)制、八進(jìn)制、十六進(jìn)制,而且默認(rèn)情況下,其他進(jìn)制表示的數(shù)值會(huì)自動(dòng)轉(zhuǎn)為十進(jìn)制表示。

  • 十進(jìn)制:沒(méi)有前導(dǎo)0或單個(gè)數(shù)值大于7的數(shù)值。
71  // 71
081 // 81
  • 二進(jìn)制:有前綴0b或0B的數(shù)值。
0b1001  // 9
0B010   // 2
  • 八進(jìn)制:有前綴0o或0O的數(shù)值,或者有前導(dǎo)0、且只用到0-7的八個(gè)阿拉伯?dāng)?shù)字的數(shù)值。

前導(dǎo) 0 表示八進(jìn)制,處理時(shí)很容易造成混亂。ES5 的嚴(yán)格模式和 ES6,已經(jīng)廢除了這種表示法,但是瀏覽器為了兼容以前的代碼,目前還繼續(xù)支持這種表示法。

071  // 57
0o11 // 9
  • 十六進(jìn)制:有前綴0x或0X的數(shù)值。
0x11  // 17
0XA1  // 161
特殊數(shù)值

number類(lèi)型包含幾個(gè)特殊數(shù)值,包括 +0、-0、NaN、+Infinity、-Infinity。
NaN表示“非數(shù)字”(Not a Number),一些數(shù)值相關(guān)操作出錯(cuò)時(shí)就會(huì)得到NaN,可通過(guò) !isNaN(xx) 判斷該值是否為有效數(shù)字,還有 typeof NaN == 'number'。

2. string 字符串類(lèi)型

零個(gè)或多個(gè)字符由成對(duì)的單引號(hào)'' 或 雙引號(hào) "" 包裹起來(lái)的形式就是字符串

轉(zhuǎn)義

為什么要轉(zhuǎn)義?

  • 字符串的內(nèi)容包含單引號(hào)或雙引號(hào)
  • 字符串中表示一些特殊含義的字符,如換行符、制表符等

轉(zhuǎn)義符
轉(zhuǎn)義符以反斜杠(\)開(kāi)頭,用來(lái)表示一些特殊字符。
串。

轉(zhuǎn)義符 含義 Unicode 字符值
\0 null \u0000
\b Backspace \u0008
\f 換頁(yè)符 \u000C
\n 換行符 \u000A
\r 回車(chē)鍵 \u000D
\t 制表符 \u0009
\v 垂直制表符 \u000B
' 單引號(hào) \u0027
" 雙引號(hào) \u0022
\ 反斜杠 \u005C

多行字符串(一個(gè)字符串分多行書(shū)寫(xiě))

// ① \后不能任何字符,換行后的必須頂格,出錯(cuò)難找,如②
var s = '1234  \
590'

// ② 報(bào)錯(cuò)
var s = '1234 \   
590'

// ③ 前兩種都不推薦
var s3 = '1234' + 
         '590' 

// ES6 新增
var s4 = `1234
    590`         // 包括了輸入的特殊字符 等價(jià)于 "1234 ? 590"
s4.length        // 10

3. boolean 布

1)“布爾”的由來(lái):紀(jì)念一位敬業(yè)的邏輯學(xué)家喬治·布爾而得名
2)取值,只有兩個(gè)值:true(真) 和 false(假)
3)&&(邏輯且) 、||(邏輯或) 邏輯操作真值表口訣: a && b 一假必假; a || b 一真必真
4)熟記五個(gè)falsy值:0 null undefined NaN ''或""(空字符串)

4. symbol 符號(hào)

唯一特性:使用Symbol()可以創(chuàng)建一個(gè)全局唯一的值,其類(lèi)型為symbol。

5. null 和 undefined

兩者皆表示什么也沒(méi)有,它們的區(qū)別如下:
1)語(yǔ)法上,如果變量只是聲明沒(méi)賦值,則它默認(rèn)值為 undefined
2)慣例而言,有一個(gè)對(duì)象object,現(xiàn)在還不想賦值,則賦值為 null(一般表示空對(duì)象);有一個(gè)非對(duì)象,還不想給值時(shí),則賦值為 undefined(一般表示空非對(duì)象)。

四、復(fù)雜類(lèi)型(object 對(duì)象)

1. 概述

對(duì)象(object)是最重要的數(shù)據(jù)類(lèi)型。
對(duì)象就是哈希表,即一組“鍵值對(duì)“(key: value)的集合,是一種無(wú)序的復(fù)合數(shù)據(jù)集合。

2. 聲明賦值
var person = {
    name: 'Amanda',
    age: 22,
    married: undefined,
    graduate: true,
    'good-friends': {
        name: 'June'   
    },
    '': null
}
  • key: value的形式中key為字符串,value可以是任意七種數(shù)據(jù)類(lèi)型。
  • 空串屬于字符串,可以被當(dāng)作對(duì)象數(shù)據(jù)的key。
  • 如果key為合法標(biāo)識(shí)符,書(shū)寫(xiě)時(shí),作為字符串標(biāo)識(shí)的引號(hào)可以被省略,但key仍然是字符串。
3. 訪(fǎng)問(wèn)、編輯對(duì)象

兩種訪(fǎng)問(wèn)對(duì)象的方式:(1)變量名[key] (2)變量名.key

var obj = {
    code: 0001,
    'data-text': 'a box'   
}

obj.code            // 0001
obj['code']         // 0001
obj['data-text']    // 'a box'
obj.data-text       // Uncaught ReferenceError: text is not defined

// 賦值
obj.name = 'div'    
obj.name = undefined

'name' in obj       // true
delete obj.name     // 刪除obj.name屬性
'name' in obj       // false

Object.keys(obj)    // ["code", "data-text"]

由上可知,變量名[key] 屬于通用方法,只有當(dāng)key滿(mǎn)足合法標(biāo)識(shí)符時(shí),才能使用 變量名.key 訪(fǎng)問(wèn)。

  • 通過(guò) delete命令 刪除對(duì)象屬性
  • in 操作符判斷對(duì)象中是否存在這個(gè)key
  • Object.keys 方法獲取一個(gè)對(duì)象所有的key
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,553評(píng)論 0 13
  • 簡(jiǎn)介 JavaScript 語(yǔ)言的每一個(gè)值,都屬于某一種數(shù)據(jù)類(lèi)型。JavaScript 的數(shù)據(jù)類(lèi)型,共有七種。 n...
    sxfshdf閱讀 1,014評(píng)論 0 48
  • JS 里的數(shù)據(jù)類(lèi)型 JavaScript 的數(shù)據(jù)類(lèi)型,共有六種。 1、數(shù)值(number)2、字符串(string...
    leiuno閱讀 340評(píng)論 0 1
  • 前言:之前的博客介紹了JS中的各種數(shù)據(jù)類(lèi)型,那么可不可以把已經(jīng)確定的數(shù)據(jù)類(lèi)型轉(zhuǎn)換成其他的數(shù)據(jù)類(lèi)型呢?本文就將介紹一...
    EnochQin閱讀 636評(píng)論 0 3
  • 文|銘悅 在別人的文字里游走,形容看書(shū)。一點(diǎn)不假,就像偶然的今天,在微信讀書(shū)app中。來(lái)回翻著找著,下面準(zhǔn)備看什么...
    銘悅閱讀 561評(píng)論 0 2

友情鏈接更多精彩內(nèi)容