JavaScript 數(shù)據(jù)類型

JavaScript 是一種弱類型或者說(shuō)動(dòng)態(tài)語(yǔ)言忧风。這意味著你不用提前聲明變量的類型,在程序運(yùn)行過(guò)程中,類型會(huì)被自動(dòng)確定招刨。

數(shù)據(jù)類型

最新的 ECMAScript 標(biāo)準(zhǔn)定義了7種數(shù)據(jù)類型:

  • 6種基本類型:
    • 數(shù)值(number)
    • 字符串(string)
    • 布爾值(boolean)
    • undefined
    • null
    • Symbol
  • 和對(duì)象(object)

typeof運(yùn)算符

typeof運(yùn)算符可以返回一個(gè)值的數(shù)據(jù)類型夹供,返回一個(gè)字符串灵份。

數(shù)值

根據(jù) ECMAScript 標(biāo)準(zhǔn),JavaScript 中只有一種數(shù)值類型:基于 IEEE 754 標(biāo)準(zhǔn)的雙精度 64 位二進(jìn)制格式的值(-( $2^{63}$ -1) 到 $2^{63}$ -1)哮洽。它并沒(méi)有為整數(shù)給出一種特定的類型填渠。除了能夠表示浮點(diǎn)數(shù)外,還有一些帶符號(hào)的值:+Infinity鸟辅,-Infinity 和 NaN (非數(shù)值氛什,Not-a-Number)。

在JavaScript語(yǔ)言的底層匪凉,根本沒(méi)有整數(shù)枪眉,所有數(shù)字都是小數(shù)(64位浮點(diǎn)數(shù))。

1 === 1.0 // true

由于浮點(diǎn)數(shù)不是精確的值再层,所以涉及小數(shù)的比較和運(yùn)算要特別小心贸铜。

0.1 + 0.2 === 0.3
// false
0.1 + 0.2
// 0.30000000000000004

數(shù)值的進(jìn)制

JavaScript對(duì)整數(shù)提供四種進(jìn)制的表示方法:十進(jìn)制堡纬、十六進(jìn)制、八進(jìn)制萨脑、2進(jìn)制隐轩。

十進(jìn)制:沒(méi)有前導(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ù)值悴灵。

NaN

NaN是JavaScript的特殊值,表示“非數(shù)字”(Not a Number)骂蓖,主要出現(xiàn)在將字符串解析成數(shù)字出錯(cuò)的場(chǎng)合积瞒。

typeof NaN // 'number'

運(yùn)算規(guī)則

NaN不等于任何值,包括它本身登下。

NaN === NaN  // false

字符串

字符串就是零個(gè)或多個(gè)排在一起的字符茫孔,放在單引號(hào)或雙引號(hào)之中。

'abc'
"abc"

如果長(zhǎng)字符串必須分成多行被芳,可以在每一行的尾部使用反斜杠缰贝。

var longString = "Long \
long \
long \
string";

longString
// "Long long long string"

轉(zhuǎn)義

反斜杠(\)在字符串內(nèi)有特殊含義,用來(lái)表示一些特殊字符畔濒,所以又稱為轉(zhuǎn)義符剩晴。

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

反斜杠還有三種特殊用法。

(1)\HHH

反斜杠后面緊跟三個(gè)八進(jìn)制數(shù)(000到377)侵状,代表一個(gè)字符赞弥。HHH對(duì)應(yīng)該字符的Unicode碼點(diǎn),比如\251表示版權(quán)符號(hào)趣兄。顯然绽左,這種方法只能輸出256種字符。

(2)\xHH

\x后面緊跟兩個(gè)十六進(jìn)制數(shù)(00到FF)艇潭,代表一個(gè)字符妇菱。HH對(duì)應(yīng)該字符的Unicode碼點(diǎn),比如\xA9表示版權(quán)符號(hào)暴区。這種方法也只能輸出256種字符闯团。

(3)\uXXXX

\u后面緊跟四個(gè)十六進(jìn)制數(shù)(0000到FFFF),代表一個(gè)字符仙粱。HHHH對(duì)應(yīng)該字符的Unicode碼點(diǎn)房交,比如\u00A9表示版權(quán)符號(hào)。

Base64轉(zhuǎn)碼

Base64是一種編碼方法伐割,可以將任意字符轉(zhuǎn)成可打印字符候味。

JavaScript原生提供兩個(gè)Base64相關(guān)方法刃唤。

btoa():字符串或二進(jìn)制值轉(zhuǎn)為Base64編碼
atob():Base64編碼轉(zhuǎn)為原來(lái)的編碼

var string = 'Hello World!';
btoa(string) // "SGVsbG8gV29ybGQh"
atob('SGVsbG8gV29ybGQh') // "Hello World!"

要將非ASCII碼字符轉(zhuǎn)為Base64編碼,必須中間插入一個(gè)轉(zhuǎn)碼環(huán)節(jié)白群,再使用這兩個(gè)方法尚胞。

function b64Encode(str) {
  return btoa(encodeURIComponent(str));
}

function b64Decode(str) {
  return decodeURIComponent(atob(str));
}

b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"

布爾值

布爾值只有兩個(gè)值:true和false。

除了下面六個(gè)值被轉(zhuǎn)為false帜慢,其他值都視為true笼裳。

undefined
null
false
0
NaN
""或''(空字符串)

null和undefined

null與undefined都可以表示“沒(méi)有”,含義非常相似粱玲。將一個(gè)變量賦值為undefined或null躬柬,老實(shí)說(shuō),語(yǔ)法效果幾乎沒(méi)區(qū)別抽减。

null的特殊之處在于允青,JavaScript把它包含在對(duì)象類型(object)之中。

typeof null // "object"

注意卵沉,JavaScript的標(biāo)識(shí)名區(qū)分大小寫(xiě)颠锉,所以u(píng)ndefined和null不同于Undefined和Null(或者其他僅僅大小寫(xiě)不同的詞形),后者只是普通的變量名史汗。

null表示空值琼掠,即該處的值現(xiàn)在為空。調(diào)用函數(shù)時(shí)淹办,某個(gè)參數(shù)未設(shè)置任何值眉枕,這時(shí)就可以傳入null恶复。比如怜森,某個(gè)函數(shù)接受引擎拋出的錯(cuò)誤作為參數(shù),如果運(yùn)行過(guò)程中未出錯(cuò)谤牡,那么這個(gè)參數(shù)就會(huì)傳入null副硅,表示未發(fā)生錯(cuò)誤。

undefined表示“未定義”翅萤。

Symbol

Symbol 是JavaScript的原始數(shù)據(jù)類型恐疲,Symbol實(shí)例是唯一且不可改變的.

let s = Symbol();

typeof s
// "symbol"

Symbol函數(shù)可以接受一個(gè)字符串作為參數(shù),表示對(duì) Symbol 實(shí)例的描述套么。注意培己,Symbol函數(shù)的參數(shù)只是表示對(duì)當(dāng)前 Symbol 值的描述,因此相同參數(shù)的Symbol函數(shù)的返回值是不相等的胚泌。

// 沒(méi)有參數(shù)的情況
var s1 = Symbol();
var s2 = Symbol();

s1 === s2 // false

// 有參數(shù)的情況
var s1 = Symbol('foo');
var s2 = Symbol('foo');

s1 === s2 // false

對(duì)象

對(duì)象(object)是JavaScript的核心概念省咨,也是最重要的數(shù)據(jù)類型。JavaScript的所有數(shù)據(jù)都可以被視為對(duì)象玷室。
所謂對(duì)象零蓉,就是一種無(wú)序的數(shù)據(jù)集合笤受,由若干個(gè)“鍵值對(duì)”(key-value)構(gòu)成。

var o = {
  p: 'Hello World'
};

p是“鍵名”敌蜂,字符串Hello World是“鍵值”,鍵名與鍵值之間用冒號(hào)分隔箩兽。

對(duì)象的所有鍵名都是字符串。對(duì)象的每一個(gè)“鍵名”又稱為“屬性”(property)章喉,它的“鍵值”可以是任何數(shù)據(jù)類型汗贫。

檢查變量是否聲明

if ('a' in window) {
  // 變量 a 聲明過(guò)
} else {
  // 變量 a 未聲明
}

查看所有屬性

查看一個(gè)對(duì)象本身的所有屬性,可以使用Object.keys方法囊陡。

var o = {
  key1: 1,
  key2: 2
};

Object.keys(o);
// ['key1', 'key2']

(摘自 JavaScript 標(biāo)準(zhǔn)參考教程)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芳绩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子撞反,更是在濱河造成了極大的恐慌妥色,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遏片,死亡現(xiàn)場(chǎng)離奇詭異嘹害,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吮便,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)笔呀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人髓需,你說(shuō)我怎么就攤上這事许师。” “怎么了僚匆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵微渠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我咧擂,道長(zhǎng)逞盆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任松申,我火速辦了婚禮云芦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贸桶。我一直安慰自己舅逸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布皇筛。 她就那樣靜靜地躺著琉历,像睡著了一般。 火紅的嫁衣襯著肌膚如雪设联。 梳的紋絲不亂的頭發(fā)上善已,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天灼捂,我揣著相機(jī)與錄音,去河邊找鬼换团。 笑死悉稠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艘包。 我是一名探鬼主播的猛,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼想虎!你這毒婦竟也來(lái)了卦尊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤舌厨,失蹤者是張志新(化名)和其女友劉穎岂却,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體裙椭,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡躏哩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了揉燃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扫尺。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖炊汤,靈堂內(nèi)的尸體忽然破棺而出正驻,到底是詐尸還是另有隱情,我是刑警寧澤抢腐,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布姑曙,位于F島的核電站,受9級(jí)特大地震影響氓栈,放射性物質(zhì)發(fā)生泄漏渣磷。R本人自食惡果不足惜婿着,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一授瘦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竟宋,春花似錦提完、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蜗字,卻和暖如春打肝,著一層夾襖步出監(jiān)牢的瞬間脂新,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工粗梭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留争便,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓断医,卻偏偏與公主長(zhǎng)得像滞乙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鉴嗤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 一斩启、JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型醉锅?哪些是復(fù)雜類型兔簇? 最新的 ECMAScript 標(biāo)...
    zh_yang閱讀 355評(píng)論 0 0
  • 強(qiáng)制轉(zhuǎn)換 強(qiáng)制轉(zhuǎn)換主要指使用Number、String和Boolean三個(gè)構(gòu)造函數(shù)硬耍,手動(dòng)將各種類型的值男韧,轉(zhuǎn)換成數(shù)字...
    燈火闌珊Zone閱讀 392評(píng)論 0 3
  • 1. JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?...
    _達(dá)斯基閱讀 206評(píng)論 0 0
  • 每天一句:每個(gè)月要讀一本書(shū)口锭,離開(kāi)學(xué)校了朦前,你還要經(jīng)常保持閱讀的習(xí)慣,大學(xué)時(shí)候鹃操,考前的通宵達(dá)旦韭寸,說(shuō)明你具備快速學(xué)習(xí)的能...
    EndEvent閱讀 424評(píng)論 0 0
  • 關(guān)注邏輯思維的最大感觸是,列清單變成了一種文體荆隘。 是啊恩伺。嫌麻煩的大家,云里霧里地找椰拒。簡(jiǎn)單明了地直接給晶渠,是叫邏輯思維...
    唐四月閱讀 274評(píng)論 0 0