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

JavaScript 共有7種數(shù)據(jù)類型,分別是

  • 數(shù)值(number):整數(shù)和小數(shù)如 1冀偶,1.2等
  • 字符串(string):文本如 “JavaScript”等
  • 布爾值(boolean):只有兩個值 true(真)false(假)
  • undefined:表示“未定義”舆声,空或不存在
  • null:表示空值
  • 對象(object):各種值組成的集合
  • symbol:es6的新增數(shù)據(jù)類型花沉,這里不做介紹

使用typeof獲取數(shù)據(jù)類型柳爽,需要注意的是函數(shù)的數(shù)據(jù)類型輸出雖然是“function”,但其數(shù)據(jù)類型是“object”碱屁,null的類型輸出雖是object磷脯,但實際上是null

// 查看數(shù)據(jù)類型
typeof 1
"number"
typeof 'hi'
"string"
typeof false
"boolean"
typeof undefined
"undefined"
typeof null
"object"
typeof {}
"object"
typeof []
"object"
typeof function(){}
"function"  
typeof Symbol()
"symbol"

undefined 和 null

兩者實際上都表示沒有(也許可以說是一種設(shè)計錯誤了),而undefined則一般出現(xiàn)在未賦值的變量娩脾,未定義的屬性赵誓,無返回值的函數(shù)返回值(或返回值是未傳入的參數(shù)),下面是輸出參考:

// 未賦值變量
var x
undefined
x
undefined

// 無返回值
(function() {return})()
undefined

// 返回值是未傳入的參數(shù)
(function(unpass) {return unpass})()
undefined

// 未定義屬性
var emptyObj = {}
undefined
emptyObj.prop
undefined

// == 情況下與null相等
undefined == null
true

// bool判斷
Boolean(null)
false
Boolean(undefined)
false

// 代表數(shù)值
Number(null)
0
Number(undefined)
NaN

boolean

布爾值柿赊,只有truefalse兩種狀態(tài)架曹,只有在以下幾種情況下才會判斷為false

  • undefined
  • null
  • false
  • 0
  • 非數(shù)字:NaN
  • 空字符串:""'' 或 ``
Boolean(NaN)
false
Boolean(undefined)
false
Boolean(null)
false
Boolean(0)
false
Boolean(-1)
true
Boolean('')
false
Boolean("")
false
Boolean(``)
false

number

JavaScript 內(nèi)部,所有數(shù)字都是以64位浮點數(shù)形式儲存闹瞧,即使整數(shù)也是如此。所以展辞,1與1.0是相同的奥邮,是同一個數(shù)。

1 === 1.0
true

數(shù)字的表示和進制

// 次方
Math.pow(2, 3)
8

// 科學計數(shù)法
2e3
2000

2 * Math.pow(10, 3)
2000

// Number 可表示的范圍
Number.MAX_VALUE
1.7976931348623157e+308

Number.MIN_VALUE
5e-324

// 16進制
0x10
16
// 8進制
0o10
8
// 2進制
0b10
2
// 不建議的8進制表示法罗珍,以0開頭(瀏覽器為兼容舊代碼的處理洽腺,將以0開頭的數(shù)字識別為8進制,在es5的嚴格模式和es6中已廢除)
010
8

NaN(Not a Number)覆旱,NaN與任何數(shù)(包括它自己)的運算蘸朋,得到的都是NaN。

// NaN的判斷
typeof NaN
"number"

NaN === NaN
false

isNaN(NaN)
true

// 運算
NaN + 1
NaN

NaN + NaN
NaN

Infinity扣唱,無窮藕坯,有正無窮和負無窮

1 / 0
Infinity

1 / -0
-Infinity

parseInt,通常用于將字符串轉(zhuǎn)換為整數(shù)噪沙;parseFloat炼彪,通常用于將一個字符串轉(zhuǎn)為浮點數(shù)

parseInt('9')
9

// 先轉(zhuǎn)字符串再parse
parseInt(9)
9

// 2進制輸出10進制
parseInt('1000', 2)
8

// 超出進制范圍
parseInt('2', 2)
NaN

isFinite,用于檢查值是否是一個有限數(shù)值(finite number)正歼。在必要情況下辐马,參數(shù)會首先轉(zhuǎn)為一個數(shù)值。

isFinite(Infinity)
false
isFinite(-Infinity) 
false
isFinite(NaN)
false
isFinite(undefined)
false
isFinite(null)
true
isFinite(-1)
true

object

對象局义,JavaScript中最重要的也是最常用的數(shù)據(jù)類型喜爷。與Python中的字典有類似之處。簡單的說就是鍵值不重復的鍵值對萄唇。

// 定義
var obj = {}

// 屬性賦值
obj.foo = 'foo'

obj['bar'] = 'bar'

obj
{foo: "foo", bar: "bar"}


// 屬性獲取
obj.foo
"foo"

obj['bar']
'bar'

// 屬性刪除
delete obj.foo
true

obj
{bar: "bar"}

// 查看屬性
Object.keys(obj)
["bar"]

// 判斷是否包含屬性
'bar' in obj
true

'foo' in obj
false

// 遍歷屬性
for (var attr in obj) {
    console.log(typeof attr, attr)
    console.log(typeof obj[attr], obj[attr])
}
string bar
string bar

string

字符串檩帐,即文本。

// 定義與表示
var 
  hiText = 'hi', 
  specialCharacterText = 'say \'hi\'',  // “\”用于符號轉(zhuǎn)義 使用“\\”表示“\”
  multiLineText = 'a'  // 多行字符串,
                + 'b'
  unicodeText = '\u4f60'  // unicode表示

我們還需要知道另萤,每個字符在 JavaScript 內(nèi)部都是以16位(即2個字節(jié))的 UTF-16 格式儲存轿塔。也就是說,JavaScript 的單位字符長度固定為16位長度,即2個字節(jié)勾缭。

但是揍障,UTF-16 有兩種長度:對于碼點在U+0000到U+FFFF之間的字符,長度為16位(即2個字節(jié))俩由;對于碼點在U+10000到U+10FFFF之間的字符毒嫡,長度為32位(即4個字節(jié)),而且前兩個字節(jié)在0xD800到0xDBFF之間幻梯,后兩個字節(jié)在0xDC00到0xDFFF之間兜畸。舉例來說,碼點U+1D306對應的字符為??碘梢,它寫成 UTF-16 就是0xD834 0xDF06咬摇。

JavaScript 對 UTF-16 的支持是不完整的,由于歷史原因煞躬,只支持兩字節(jié)的字符肛鹏,不支持四字節(jié)的字符。這是因為 JavaScript 第一版發(fā)布的時候恩沛,Unicode 的碼點只編到U+FFFF在扰,因此兩字節(jié)足夠表示了。后來雷客,Unicode 納入的字符越來越多芒珠,出現(xiàn)了四字節(jié)的編碼。但是搅裙,JavaScript 的標準此時已經(jīng)定型了皱卓,統(tǒng)一將字符長度限制在兩字節(jié),導致無法識別四字節(jié)的字符部逮。上一節(jié)的那個四字節(jié)字符??好爬,瀏覽器會正確識別這是一個字符,但是 JavaScript 無法識別甥啄,會認為這是兩個字符存炮。

——阮一峰JavaScript教程-字符串

'??'.length
2

參考鏈接:
阮一峰JavaScript教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜈漓,隨后出現(xiàn)的幾起案子穆桂,更是在濱河造成了極大的恐慌,老刑警劉巖融虽,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件享完,死亡現(xiàn)場離奇詭異,居然都是意外死亡有额,警方通過查閱死者的電腦和手機般又,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門彼绷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茴迁,你說我怎么就攤上這事寄悯。” “怎么了堕义?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵猜旬,是天一觀的道長。 經(jīng)常有香客問我倦卖,道長洒擦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任怕膛,我火速辦了婚禮熟嫩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘褐捻。我一直安慰自己掸茅,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布舍扰。 她就那樣靜靜地躺著,像睡著了一般希坚。 火紅的嫁衣襯著肌膚如雪边苹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天裁僧,我揣著相機與錄音个束,去河邊找鬼。 笑死聊疲,一個胖子當著我的面吹牛茬底,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播获洲,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼阱表,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贡珊?” 一聲冷哼從身側(cè)響起最爬,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎门岔,沒想到半個月后爱致,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡寒随,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年糠悯,在試婚紗的時候發(fā)現(xiàn)自己被綠了帮坚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡互艾,死狀恐怖试和,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忘朝,我是刑警寧澤灰署,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站局嘁,受9級特大地震影響溉箕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悦昵,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一肴茄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧但指,春花似錦寡痰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剩岳,卻和暖如春贞滨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拍棕。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工晓铆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绰播。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓骄噪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蠢箩。 傳聞我的和親對象是個殘疾皇子链蕊,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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