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

1. 變量

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

? 6種原始類型:Boolean蛋欣,Null寡夹,Undefined处面,Number,String菩掏,Symbol(ES6新增)

? 1種對(duì)象類型:object

通過typeof檢測(cè)類型:string魂角,number,boolean智绸,function野揪,object,undefined

JS萬物皆對(duì)象

我們以ECMAScript標(biāo)準(zhǔn)為準(zhǔn)传于,說明每個(gè)類型的特點(diǎn):

1. 字符串(String)

// 單引號(hào)定義
var title = 'hello string';

// 雙引號(hào)定義
var desc = "hello string";

// 反斜線定義(ES6)
var intro = `hello string`;

var name = 'Modeest';
var intro = `hello ${name}`;    // hello Modeest

注意:

  1. 單引號(hào)囱挑,雙引號(hào),反斜線定義字符串沒有本質(zhì)的區(qū)別
  2. 在JS中推薦使用單引號(hào)(雙引號(hào)會(huì)和HTML的屬性沖突)
  3. 反斜線中可以解析變量(特定格式)沼溜,單雙引號(hào)都不可以
  4. 三種方式可以相互嵌套平挑,不能嵌套自身(除非使用轉(zhuǎn)義字符)

字符字面量:

\n 換行
\t 制表
\b 退格
\r 回車
\\ 斜杠
\' 單引號(hào)
\" 雙引號(hào)
\unnnn 十進(jìn)制代碼 nnnn表示一個(gè)Unicode字符(n位0-F)

特別注意:

字符串是不可改變的,字符串一旦創(chuàng)建系草,它們的值不能改變通熄,要改變,先要銷毀原來的字符串找都,用新值填充該變量
    var lang = 'Java';
    lang = lang + 'script';

2. 數(shù)值(number)

根據(jù)ECMAScript標(biāo)準(zhǔn)唇辨,JavaScript只有一種數(shù)字類型:基于IEEE754標(biāo)準(zhǔn)的雙精度64位二進(jìn)制格式的值。

  • 整型

    var int = 10; // 十進(jìn)制
    var int = 070;    // 八進(jìn)制(在嚴(yán)格模式下無效哦能耻,報(bào)錯(cuò)SyntaxError)
    var int = 0xA;    // 十六進(jìn)制
    
  • 浮點(diǎn)型

    var float = 1.1;
    var float = 0.1;
    var float = .1;   // 不推薦
    

    注意:

    0.1 + 0.2 === 0.3 // false
    
    這是使用基于IEEE754數(shù)值的浮點(diǎn)計(jì)算的通病
    
  • NaN(Not a number)

    概念:表示一個(gè)本來要返回?cái)?shù)值的操作數(shù)但是未返回?cái)?shù)值的情況
    
    特點(diǎn):
    1. 0/0報(bào)錯(cuò)赏枚,在JS中結(jié)果是NaN,正數(shù)/0為Infinity晓猛,負(fù)數(shù)/0位-Infinity
    2. 任何涉及NaN的操作都返回NaN
    3. NaN與任何值都不想等饿幅,包括自身
    
    函數(shù):
    isNaN():判斷一個(gè)值是否是NaN
    
    isNaN()注意事項(xiàng):
    isNaN(obj):調(diào)用obj.valueOf(),判斷是否可以轉(zhuǎn)換為數(shù)值,不能再調(diào)用toString()戒职,再測(cè)試返回值栗恩。
    
檢測(cè)值 > +Infinity: Number.MAX_VALUE
檢測(cè)值 < -Infinity: Number.MIN_VALUE

檢測(cè)是否在雙精度浮點(diǎn)數(shù)的取值范圍
Number.isSafeInteger()
Number.MAX_SAFE_INTEGER 
Number.MIN_SAFE_INTEGER 

3. 布爾值(boolean)

  • true:真
  • false:假

4. 未定義(undefined)

undefined是全局對(duì)象的一個(gè)屬性

表明變量沒有被初始化

常見的情況:

  • 未定義的變量
  • 定義但是未賦值的變量
var title;  // undefined
typeof age; // undefined

// 變量前置
console.log(username);  // undefined
var username = 'Modeest';

主要功能:用于比較

ES3之前未引入,ES3引入為了區(qū)分 空對(duì)象指針與未經(jīng)初始化的變量洪燥。

5. null - 空對(duì)象指針

值null是一個(gè)字面量磕秤,null是表示缺少的標(biāo)識(shí)(“空值/空對(duì)象”),指示變量未指向任何對(duì)象捧韵。

常用于函數(shù)返回空對(duì)象

null與undefined

null:空對(duì)象的指針(在沒有保存對(duì)象之前申明為空對(duì)象)市咆,推薦針對(duì)空對(duì)象顯式設(shè)置
undefined:定義但是未賦值的變量值,一般不要顯式的設(shè)置

注意:
1. null == undefined // true,但是不推薦
2. null === undefined // false,推薦全等于判斷

6. Symbol

后面專門介紹Symbol

7. Object

后面專門介紹Object

2. 數(shù)據(jù)類型的相互轉(zhuǎn)換

1 其他類型 => 字符串:

1. String()

'title' => 'title'
1 => '1'
true => 'true'
['a', 'b', 'c'] => 'a,b,c'
null => 'null'

var fun = function(){}
String(fun) => 'function(){}'   // 返回函數(shù)的內(nèi)容

var obj = {};
String(obj) => '[object Object]'

2. toString()

var age = 28;
age.toString(); // '28'

var b = true;
b.toString();   // 'true'

var o = { name: 'Modeest' };
o.toString();   // "[object Object]"

注意:

  1. 30.toString():語法錯(cuò)誤再来,不能直接調(diào)用
  2. null和undefined:沒有toString()方法
  3. toString(2|8|10|16):有進(jìn)制轉(zhuǎn)換能力

3. +空字符串

3 + ''
true + ''

2 其他類型 => 布爾值:Boolean()

轉(zhuǎn)換為布爾值為假的幾種情況

  1. 空字符串('')
  2. 0
  3. NaN
  4. false
  5. undefined
  6. null

注意:除上述幾個(gè)值之外蒙兰,其余都轉(zhuǎn)為true(' ', '0','false'等都轉(zhuǎn)為布爾值true)

3 其他類型 => 數(shù)值

  1. Number()

    1. true=>1 false=>0
    2. 數(shù)值類型 => 傳入和返回
    3. null => 0
    4. Undefined => NaN
    5. 字符串
    1. 只包含數(shù)字和正負(fù)號(hào)的字符串,轉(zhuǎn)換為十進(jìn)制數(shù)字
    2. 只包含有效的浮點(diǎn)數(shù),返回對(duì)應(yīng)的浮點(diǎn)數(shù)
    3. 以0x開頭的有效十六進(jìn)制癞己,轉(zhuǎn)換為相同大小的十進(jìn)制:'0xf' => 16
    4. '' => 0
    5. 其他字符串 => NaN
    
    1. 對(duì)象
    1. 先調(diào)用valueOf(),根據(jù)上面規(guī)則轉(zhuǎn)換
    2. 如果得到NaN膀斋,再調(diào)用toString(),再根據(jù)規(guī)則進(jìn)行轉(zhuǎn)換
    
  2. parseInt()

    轉(zhuǎn)換規(guī)則:從第一個(gè)字符開始查找痹雅,直到找到非法字符(非數(shù)字)截止仰担,返回找到的數(shù)字(可以識(shí)別進(jìn)制)

    1. parseInt('070')    // 70
    2. parseInt('12ab')    // 12
    3. parseInt('12.12ab')    // 12
    
    ES3引擎中,"070"被當(dāng)成八進(jìn)制字面量绩社,因此被轉(zhuǎn)換為十進(jìn)制56
    ES5引擎中摔蓝,parseInt不具備解析八進(jìn)制能力,忽略前面的0愉耙,"070"解析結(jié)果是70
    
    為了消除這些不確定結(jié)果贮尉,給parseInt傳遞第二個(gè)參數(shù)即可
    4. parseInt('070', 2)    二進(jìn)制 0
    5. parseInt('070', 8)    二進(jìn)制 56
    6. parseInt('070', 10)    二進(jìn)制 70
    7. parseInt('070', 16)    二進(jìn)制 112
    
  3. parseFloat()的轉(zhuǎn)換規(guī)則

轉(zhuǎn)換規(guī)則:從第一個(gè)字符開始查找,直到找到非法字符(除數(shù)字和第一個(gè)小數(shù)點(diǎn)之外的字符)截止朴沿,返回找到的數(shù)字

 parseFloat('1234abcd');   // 1234
 parseFloat('12.23ab');    // 12.34
 parseFloat('0xA');    // 0
 parseFloat('023');    // 23

注意:parseFloat只解析十進(jìn)制猜谚,八進(jìn)制忽略前面的0,十六進(jìn)制返回0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赌渣,一起剝皮案震驚了整個(gè)濱河市魏铅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坚芜,老刑警劉巖览芳,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鸿竖,居然都是意外死亡沧竟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門缚忧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悟泵,“玉大人,你說我怎么就攤上這事搔谴】啵” “怎么了桩撮?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵敦第,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我店量,道長(zhǎng)芜果,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任融师,我火速辦了婚禮右钾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己舀射,他們只是感情好窘茁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脆烟,像睡著了一般山林。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邢羔,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天驼抹,我揣著相機(jī)與錄音,去河邊找鬼拜鹤。 笑死框冀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的敏簿。 我是一名探鬼主播明也,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼惯裕!你這毒婦竟也來了诡右?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤轻猖,失蹤者是張志新(化名)和其女友劉穎帆吻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咙边,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猜煮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了败许。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片王带。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖市殷,靈堂內(nèi)的尸體忽然破棺而出愕撰,到底是詐尸還是另有隱情,我是刑警寧澤醋寝,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布搞挣,位于F島的核電站,受9級(jí)特大地震影響音羞,放射性物質(zhì)發(fā)生泄漏囱桨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一嗅绰、第九天 我趴在偏房一處隱蔽的房頂上張望舍肠。 院中可真熱鬧搀继,春花似錦、人聲如沸翠语。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肌括。三九已至险毁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間们童,已是汗流浹背畔况。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慧库,地道東北人跷跪。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像齐板,于是被迫代替她去往敵國和親吵瞻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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

  • 1、標(biāo)識(shí)符 標(biāo)識(shí)符是指變量济舆、函數(shù)卿泽、屬性的名字,或函數(shù)的參數(shù)滋觉。 格式規(guī)則: 第一個(gè)字符必須是一個(gè)字母签夭、下劃線(_)或...
    風(fēng)中丶凌亂閱讀 1,622評(píng)論 0 0
  • 1我纪、JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型(或基本數(shù)據(jù)類型)和復(fù)雜類...
    徐國軍_plus閱讀 468評(píng)論 0 1
  • 一慎宾、ES6簡(jiǎn)介 ? 歷時(shí)將近6年的時(shí)間來制定的新 ECMAScript 標(biāo)準(zhǔn) ECMAScript 6(亦稱 ...
    一歲一枯榮_閱讀 6,062評(píng)論 8 25
  • [TOC] 參考阮一峰的ECMAScript 6 入門參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,773評(píng)論 0 1
  • 突然有種短暫的失落。 有段時(shí)間喜歡不斷的拿起手機(jī)又放下浅悉,放下又拿起趟据。在拿起的瞬間總希望朋友圈出現(xiàn)那么一個(gè)紅色...
    兮雯123閱讀 143評(píng)論 0 1