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

JS里的數(shù)據(jù)類型主要分為兩大類纺阔。

  1. 基本類型
  • 字符串(string)
  • 數(shù)字(number)
  • 布爾值(boolean)
  • null
  • undefined
  • 符號(hào)(symbol)
  1. 復(fù)雜類型
  • 對(duì)象(object)包括對(duì)象逗载,數(shù)組,函數(shù)都屬于對(duì)象。

一共有七種,在這里介紹除了符號(hào)外的所有類型。

字符串

只要放在單引號(hào)或雙引號(hào)中的字符就是字符串铐刘,在字符串內(nèi)部如果要使用引號(hào),就必須和外層引號(hào)不同影晓,例如一下表示都是合法的镰吵。

'key = "value"'
"It's a long journey"

另外也可以使用轉(zhuǎn)義符。

'Did she say \'Hello\'?'
// "Did she say 'Hello'?"

"Did she say \"Hello\"?"
// "Did she say "Hello"?"

如果要想多個(gè)單行字符串連接可用+號(hào)挂签,這也是字符串換行連接的推薦方式疤祭。

var longString = 'Long '
  + 'long '
  + 'long '
  + 'string';

要表示特殊字符就需要使用轉(zhuǎn)義符,主要使用的有一下幾個(gè)饵婆。

  • \0 :null(\u0000)
  • \b :后退鍵(\u0008)
  • \f :換頁(yè)符(\u000C)
  • \n :換行符(\u000A)
  • \r :回車鍵(\u000D)
  • \t :制表符(\u0009)
  • \v :垂直制表符(\u000B)
  • ' :?jiǎn)我?hào)(\u0027)
  • " :雙引號(hào)(\u0022)
  • \ :反斜杠(\u005C)
    其他類型要轉(zhuǎn)換為字符串可以使用加空字符串的方法xxx + ''勺馆。

數(shù)字

JS中所有數(shù)字都是用64位浮點(diǎn)數(shù)的形式存儲(chǔ)的,所以在其底層并沒(méi)有整數(shù)侨核,只有小數(shù)草穆。而浮點(diǎn)數(shù)的表示并不精確,會(huì)出現(xiàn)以下情況搓译,需特別小心悲柱。

0.1 + 0.2 === 0.3
// false

0.3 / 0.1
// 2.9999999999999996

(0.3 - 0.2) === (0.2 - 0.1)
// false

JS能夠表示的數(shù)值范圍為21024到2-1023(開(kāi)區(qū)間),超出這個(gè)范圍的數(shù)無(wú)法表示些己。在使用時(shí)豌鸡,如果超出最大值,回發(fā)生‘正向溢出’段标。小于最小值時(shí)涯冠,會(huì)發(fā)生‘負(fù)向溢出’。

Math.pow(2, 1024) // Infinity
Math.pow(2, -1075) // 0

JavaScript 提供Number對(duì)象的MAX_VALUE和MIN_VALUE屬性逼庞,返回可以表示的具體的最大值和最小值蛇更。

Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_VALUE // 5e-324

其他數(shù)據(jù)類型如果想轉(zhuǎn)換為數(shù)字,可使用減零的方式xxx - 0(如果該數(shù)據(jù)可以轉(zhuǎn)換為數(shù)字的話)。

布爾值

布爾值只有兩個(gè)truefalse械荷,在條件表達(dá)式中共耍,會(huì)將表達(dá)式轉(zhuǎn)換為布爾值,以進(jìn)行下一步操作吨瞎。除了以下六個(gè)falsy值外,其它一切轉(zhuǎn)換為布爾值都為true穆咐。

  • 數(shù)字0
  • NaN
  • null
  • undefined
  • 空字符串''
  • 布爾值false
    要將其它值轉(zhuǎn)換為布爾值可使用雙重取反!!xxx颤诀。

null和undefined

這兩個(gè)類型基本沒(méi)什么區(qū)別,如果一個(gè)變量聲明了而沒(méi)有賦值对湃,則會(huì)自動(dòng)賦值為undefined崖叫。慣例來(lái)說(shuō),如果一個(gè)變量打算賦值為對(duì)象拍柒,而暫時(shí)還未賦值心傀,則會(huì)先賦值為null
另外拆讯,在轉(zhuǎn)換為數(shù)字時(shí)脂男,null會(huì)轉(zhuǎn)換為0,而undefined則會(huì)轉(zhuǎn)換為NaN种呐。

對(duì)象

對(duì)象包括普通對(duì)象宰翅,數(shù)組以及函數(shù)。

var obj = {
  foo: 'Hello',
  bar: 'World'
};
var array = [1, 2, 3];
function fun() {}

對(duì)象的鍵名都是字符串爽室,可以直接使用數(shù)字汁讼,JS會(huì)在后臺(tái)自動(dòng)轉(zhuǎn)換為字符串。
可以使用Object.keys(obj)查看對(duì)象的屬性阔墩。使用delete操作符可以刪除對(duì)象的屬性嘿架,返回true。注意啸箫,刪除一個(gè)不存在的屬性耸彪,delete不報(bào)錯(cuò),而且返回true筐高。

var obj = { p: 1 };
Object.keys(obj) // ["p"]

delete obj.p // true
obj.p // undefined
Object.keys(obj) // []

var obj = {};
delete obj.p // true

只有一種情況搜囱,delete命令會(huì)返回false,那就是該屬性存在柑土,且不得刪除蜀肘。
in運(yùn)算符用于檢查對(duì)象是否包含某個(gè)屬性(注意,檢查的是鍵名稽屏,不是鍵值)扮宠,如果包含就返回true,否則返回false

var obj = { p: 1 };
'p' in obj // true
'toString' in obj // true

in運(yùn)算符的一個(gè)問(wèn)題是坛增,它不能識(shí)別哪些屬性是對(duì)象自身的获雕,哪些屬性是繼承的。就像上面代碼中收捣,對(duì)象obj本身并沒(méi)有toString屬性届案,但是in運(yùn)算符會(huì)返回true,因?yàn)檫@個(gè)屬性是繼承的罢艾。
for...in循環(huán)可用來(lái)遍歷對(duì)象屬性(可枚舉屬性)楣颠,包括繼承的。JS內(nèi)建屬性和方法都不可枚舉咐蚯。

var obj = {a: 1, b: 2, c: 3};

for (var i in obj) {
  console.log('鍵名:', i);
  console.log('鍵值:', obj[i]);
}
// 鍵名: a
// 鍵值: 1
// 鍵名: b
// 鍵值: 2
// 鍵名: c
// 鍵值: 3

復(fù)雜類型和基本類型最大的區(qū)別就是在存儲(chǔ)上面童漩。基本類型的賦值都是使用拷貝春锋,即改變賦值并不會(huì)影響另一個(gè)變量矫膨。而對(duì)象使用的是引用賦值,拷貝給聲明的只是同一個(gè)內(nèi)存地址期奔,當(dāng)改變了對(duì)象的內(nèi)容侧馅,會(huì)影響另外的指向同一內(nèi)存地址的變量。

typeof

使用typeof操作符檢查變量類型能庆。

typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"

function f() {}
typeof f // "function"
typeof undefined // "undefined"
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
typeof /([a-z])/ //"object"

其中需要注意的是施禾,普通對(duì)象,數(shù)組搁胆,null以及正則表達(dá)式都會(huì)返回"object"弥搞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渠旁,隨后出現(xiàn)的幾起案子攀例,更是在濱河造成了極大的恐慌,老刑警劉巖顾腊,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粤铭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡杂靶,警方通過(guò)查閱死者的電腦和手機(jī)梆惯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吗垮,“玉大人垛吗,你說(shuō)我怎么就攤上這事∷傅牵” “怎么了怯屉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我锨络,道長(zhǎng)赌躺,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任羡儿,我火速辦了婚禮礼患,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘失受。我一直安慰自己讶泰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布拂到。 她就那樣靜靜地躺著,像睡著了一般码泞。 火紅的嫁衣襯著肌膚如雪兄旬。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天余寥,我揣著相機(jī)與錄音领铐,去河邊找鬼。 笑死宋舷,一個(gè)胖子當(dāng)著我的面吹牛绪撵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祝蝠,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼音诈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了绎狭?” 一聲冷哼從身側(cè)響起细溅,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎儡嘶,沒(méi)想到半個(gè)月后喇聊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹦狂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年誓篱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凯楔。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窜骄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啼辣,到底是詐尸還是另有隱情啊研,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站党远,受9級(jí)特大地震影響削解,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沟娱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一氛驮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧济似,春花似錦矫废、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至台舱,卻和暖如春律杠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竞惋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工柜去, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拆宛。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓嗓奢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親浑厚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子股耽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • 簡(jiǎn)介 JavaScript 語(yǔ)言的每一個(gè)值,都屬于某一種數(shù)據(jù)類型瞻颂。JavaScript 的數(shù)據(jù)類型豺谈,共有七種。 n...
    sxfshdf閱讀 885評(píng)論 0 48
  • 目錄 概述typeof運(yùn)算符number(數(shù)字)string(字符串)boolean(布爾)undefined &...
    阿小經(jīng)閱讀 780評(píng)論 0 7
  • JavaScript 語(yǔ)言的每一個(gè)值贡这,都屬于某一種數(shù)據(jù)類型茬末。JavaScript 的數(shù)據(jù)類型,共有六種盖矫。 數(shù)值(n...
    七月凜冬閱讀 399評(píng)論 0 0
  • JS里的數(shù)據(jù)類型主要分為兩大類丽惭。 基本類型 字符串(string) 數(shù)字(number) 布爾值(boolean)...
    饑人谷_王捷閱讀 533評(píng)論 0 0
  • JavaScript 語(yǔ)言的每一個(gè)值,都屬于某一種數(shù)據(jù)類型辈双。JavaScript 的數(shù)據(jù)類型责掏,共有六種。(ES6 ...
    Yixi_Li閱讀 384評(píng)論 0 0