每天學點原生JavaScript(三)數(shù)據類型

每天學點原生JavaScript(三)數(shù)據類型

五種基本數(shù)據類型:UndefinedNullBoolean慌植、Number假瞬、String
一種復雜數(shù)據類型:Object喳坠。

注意:FunctionArray是一種特殊的Object鞠评。可以使用typeof操作符來區(qū)分數(shù)據類型壕鹉。

1. Undefined類型

Undefined類型是有一個特殊的值undefined剃幌。在使用var聲明后但未對其進行初始化時,這個變量的值就是undefined晾浴。使用typeof操作符會返回undefined负乡。

注意:未聲明和未初始化的變量執(zhí)行typeof操作符都返回undefined。對于未聲明變量脊凰,只能執(zhí)行typeof這一操作抖棘,其他操作都會報錯。

2. Null類型

Null類型是第二個只有一個值的數(shù)據類型,這個值就是null钉答。null是一個空對象础芍,所以使用typeof操作符會返回object

注意:undefined值派生自null值数尿,所以相等性測試返回true仑性,即null == undefined返回true

3. Boolean類型

Boolean類型有兩個字面量:truefalse右蹦。所有類型的值都會與這兩個Boolean值有等價的值诊杆,即調用轉型函數(shù)Boolean()
轉換規(guī)則:

  1. Boolean類型:true轉換為true何陆,false轉換為false晨汹;
  2. String類型:非空字符串轉換為true空字符串轉換為false贷盲;
  3. Number類型:非零數(shù)字值轉換為true淘这,0NaN轉換為false
  4. Object類型:非空對象轉換為true巩剖,null轉換為false铝穷;
  5. Undefined類型:undefined轉換為false

注意:Boolean值是區(qū)分大小寫的佳魔,即True和False都不是Boolean值曙聂。

4. Number類型

Number支持各種數(shù)值類型,包含十進制鞠鲜、八進制十六進制宁脊,嚴格模式下八進制是無效的。進行算術計算時贤姆,所有八進制和十六進制數(shù)值最終都將被轉換成十進制數(shù)值榆苞。

注意:JavaScript中可以報錯正零+0和負零-0,正零和負零被認為相等霞捡。

浮點數(shù)值

浮點數(shù)值即數(shù)值中必須包含一個小數(shù)點语稠,且小數(shù)點后面至少有一位數(shù)字。雖然小數(shù)點前面可以沒有整數(shù)弄砍,但不推薦這么做仙畦。
由于浮點數(shù)值需要的內存空間是保存整數(shù)數(shù)值的兩倍,所以ECMAScript會在適時的情況下將他轉換成整數(shù)值音婶。對于極大或極小的浮點數(shù)慨畸,會使用科學計數(shù)法進行表示。

var floatNum = .1; // 有效衣式,但不推薦
var floatNum = 10.0; // 解析后為10
var floatNum = 3.125e7; // 等于31250000

注意:浮點數(shù)值得最高精度是17位小數(shù)寸士,但在算術計算時其精確度遠遠不如整數(shù)檐什。浮點數(shù)計算會產生舍入誤差的問題,這是基于IEEE754數(shù)值的浮點計算的通病弱卡。

數(shù)值范圍

由于內存的限制乃正,ECMAScript并不能保存世界上所有的數(shù)值。在大多數(shù)瀏覽器中婶博,最大值和最小值如下:
Number.MIN_VALUE:5e-324瓮具;
Number.MAX_VALUE:1.7976931348623157e+308。
如果超過可這個數(shù)值范圍凡人,則會被轉換成負無窮-Infinity和正無窮+Infinity名党。可以使用isFinite()函數(shù)來判斷挠轴,函數(shù)的參數(shù)在最大值和最小值之間會返回true传睹。

NaN

即非數(shù)值(Not a Number),這個值用來表示一個本來要返回數(shù)值的操作卻未返回數(shù)值的情況岸晦。具有兩個特點:

  1. 涉及NaN的任何操作都會返回NaN欧啤;
  2. NaN的值與任何值都不相等,包含NaN本身启上。

我們可以使用isNaN()函數(shù)來判斷是否“不是數(shù)值”堂油。即返回true說明傳入參數(shù)不是數(shù)值且不能轉換成數(shù)值。

數(shù)值轉換

數(shù)值轉換的函數(shù)有三個:Number()碧绞、parseInt()parseFloat()。第一個可以用于任何數(shù)據類型吱窝,而另外兩個則專門用于把字符串轉換成數(shù)值讥邻。

Number()函數(shù)轉換規(guī)則:

  1. Boolean類型:truefalse分別被轉換為10
  2. Number類型:只是簡單的傳入和返回院峡;
  3. Null類型:返回0兴使;
  4. Undefined類型:返回NaN
  5. String類型:如果字符串只包含數(shù)字照激,則將其轉換成十進制數(shù)值发魄;如果字符串包含有效的浮點數(shù)值,則將其轉換成對應的浮點數(shù)值俩垃;如果字符串包含有效的十六進制格式励幼,則將其轉換為相等大小的十進制數(shù)值;如果是空字符串口柳,則轉換為0苹粟;如果包含上述格式以外的字符,則將其轉換為NaN跃闹;
  6. Object類型:會調用valueOf()方法嵌削,然后依照上面的規(guī)則轉換返回的值毛好;如果轉換的結果是NaN,則調用toString()方法苛秕,然后再依照前面的規(guī)則返回字符串值肌访。
var num = Number("hello"); // NaN
var num = Number(""); // 0
var num = Number("0011"); // 11
var num = Number(true); // 1

由于Number()函數(shù)轉換字符串時復雜且不夠合理,因此在處理整數(shù)時更常用parseInt()函數(shù)艇劫。轉換規(guī)則如下:

  1. 會忽略字符串前面的空格吼驶,直到找到第一個非空格字符串;
  2. 如果第一個不是數(shù)字字符或負號港准,就返回NaN旨剥;
  3. 空字符串:parseInt()返回NaNNumber返回0浅缸;
  4. 從第一個數(shù)字字符開始解析轨帜,直到遇到一個非數(shù)字字符,后面的字符會被忽略衩椒;
  5. 浮點數(shù):小數(shù)點之后的會被忽略蚌父;
  6. 參數(shù):parseInt()第一個參數(shù)為字符串,第二個參數(shù)為轉換時使用的基數(shù)毛萌,即多少進制苟弛。
var num = parseInt("1234blue"); // 1234
var num = parseInt(""); // NaN
var num = parseInt(22.5); // 22
var num = parseInt("0xA"); // 10(十六進制)
var num = parseInt("070"); // 10(八進制)
var num = parseInt("0xAF", 16); // 175
var num = parseInt("AF", 16); // 175
var num = parseInt("AF"); // NaN

parseFloat()類似,也是從第一個字符開始解析阁将,字符串中第一個小數(shù)點有效膏秫,其余的無效。

  1. 字符串中第一個小數(shù)點有效做盅,第二個就無效了缤削;
  2. 十六進制字符串始終被轉換為0
  3. 只能解析十進制數(shù)值吹榴,因此沒有第二個參數(shù)亭敢;
  4. 如果字符串包好一個可以解析為整數(shù)的數(shù)值,則會返回整數(shù)图筹。
var num = parseFloat("1234blue"); // 1234
var num = parseFloat("0xA"); // 0
var num = parseFloat("22.5"); // 22.5
var num = parseFloat("22.5.5"); // 22.5
var num = parseFloat("3.125e7"); // 31250000

5. String類型

用于表示由零活多個16位Unicode字符組成的字符序列帅刀,即字符串≡妒#可以由雙引號"或單引號'表示扣溺。字符串一旦創(chuàng)建就是不可變的,要改變只能銷毀后重新創(chuàng)建瓜晤〗考耍可以使用length屬性訪問其長度。

字符字面量

  1. \n:換行活鹰;
  2. \t:制表哈恰;
  3. \b:退格只估;
  4. \r:回車;
  5. \f:進紙着绷;
  6. \\:斜杠蛔钙;
  7. \':單引號,在單引號表示的字符串中使用荠医;
  8. \":雙引號吁脱,在雙引號表示的字符串中使用;
  9. \xnn:以十六進制代碼nn表示一個字符彬向,n為0~F兼贡;
  10. \unnn:以十六進制代碼nnnn表示Unicode字符,n為0~F娃胆。

字符串轉換

將一個值轉換成字符串有兩種方式:toString()String()遍希。toString()String()方法的區(qū)別是前置不能轉換nullundefined,而后者可以里烦。
toString()可以傳遞一個參數(shù):輸出數(shù)值的基數(shù)凿蒜,即多少進制。

var num = 10;
num.toString(); // "10"(十進制)
num.toString(2); // "1010"(二進制)
var flag = true;
flag.toString(); // "true"

String()轉換規(guī)則:

  1. 如果值有toString()方法胁黑,則調用該方法并返回相應的結果废封;
  2. 如果值是null,返回"null"丧蘸;
  3. 如果值是undefined漂洋,返回"undefined"

6. Object類型

ECMAScript中的對象其實就是一組數(shù)據和功能的集合力喷。在ECMAScript中刽漂,Object類型是所有它的實例的基礎。
Object的每個實例都具有下列屬性和方法:

  1. constructor():保存著用于創(chuàng)建當前對象的函數(shù)冗懦,即構造函數(shù);
  2. hasOwnProperty(propertyName):用于檢查給定的屬性在當前對象實例中(而不是在實例的原型中)是否存在仇祭。屬性名以字符串格式傳入披蕉;
  3. isPrototypeOf(object):用于檢查傳入的對象是否是當前對象的原型;
  4. propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語句類枚舉乌奇;
  5. toLocaleString():返回對象的字符串表示没讲,該字符串與執(zhí)行環(huán)境的地區(qū)對應;
  6. toString():返回對象的字符串表示礁苗;
  7. valueOf():返回對象的字符串爬凑、數(shù)值或布爾值表示。通常與toString()返回值相同试伙。

歡迎大佬糾錯指導嘁信,歡迎同行交流學習于样。

GitHub:https://github.com/Code4GL
簡書:http://www.reibang.com/u/7f5541a6b6d2
知乎:https://www.zhihu.com/people/code4gl/activities
公眾號:code_everything
QQ:771841496
郵箱:guanli1991@163.com

掃碼關注公眾號code_everything
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市潘靖,隨后出現(xiàn)的幾起案子穿剖,更是在濱河造成了極大的恐慌,老刑警劉巖卦溢,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糊余,死亡現(xiàn)場離奇詭異,居然都是意外死亡单寂,警方通過查閱死者的電腦和手機贬芥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宣决,“玉大人蘸劈,你說我怎么就攤上這事∑T” “怎么了昵时?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長椒丧。 經常有香客問我壹甥,道長,這世上最難降的妖魔是什么壶熏? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任句柠,我火速辦了婚禮,結果婚禮上棒假,老公的妹妹穿的比我還像新娘溯职。我一直安慰自己,他們只是感情好帽哑,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布谜酒。 她就那樣靜靜地躺著,像睡著了一般妻枕。 火紅的嫁衣襯著肌膚如雪僻族。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天屡谐,我揣著相機與錄音述么,去河邊找鬼。 笑死愕掏,一個胖子當著我的面吹牛度秘,可吹牛的內容都是我干的。 我是一名探鬼主播饵撑,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼剑梳,長吁一口氣:“原來是場噩夢啊……” “哼唆貌!你這毒婦竟也來了?” 一聲冷哼從身側響起阻荒,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤挠锥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侨赡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蓖租,經...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年羊壹,在試婚紗的時候發(fā)現(xiàn)自己被綠了蓖宦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡油猫,死狀恐怖稠茂,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情情妖,我是刑警寧澤睬关,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站毡证,受9級特大地震影響电爹,放射性物質發(fā)生泄漏。R本人自食惡果不足惜料睛,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一丐箩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恤煞,春花似錦屎勘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喜喂,卻和暖如春瓤摧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夜惭。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工姻灶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铛绰,地道東北人诈茧。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像捂掰,于是被迫代替她去往敵國和親敢会。 傳聞我的和親對象是個殘疾皇子曾沈,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內容