JavaScipt之基本概念(3)

Number類型

這種類型使用IEEE754 格式來表示整數(shù)和浮點數(shù)值(浮點數(shù)值在某些語言中也被稱為雙精度數(shù)值)艺玲。

十進(jìn)制整數(shù):
var intNum = 55; // 整數(shù)

八進(jìn)制:
var octalNum1 = 070; // 八進(jìn)制的56

十六進(jìn)制:

var hexNum1 = 0xA; // 十六進(jìn)制的10
var hexNum2 = 0x1f; // 十六進(jìn)制的31

鑒于JavaScript 中保存數(shù)值的方式沦疾,可以保存正零(+0)和負(fù)零(-0)烘绽。

浮點數(shù)值

var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; // 有效,但不推薦

var floatNum1 = 1.; // 小數(shù)點后面沒有數(shù)字——解析為1
var floatNum2 = 10.0; // 整數(shù)——解析為10

var floatNum = 3.125e7; // 等于31250000

關(guān)于浮點數(shù)值計算會產(chǎn)生舍入誤差的問題冒萄,有一點需要明確:這是使用基于IEEE754 數(shù)值的浮點計算的通病池摧,ECMAScript 并非獨此一家;其他使用相同數(shù)值格式的語言也存在這個問題红伦。

數(shù)值范圍

由于內(nèi)存的限制英古,ECMAScript 并不能保存世界上所有的數(shù)值。
ECMAScript 能夠表示的最小數(shù)值保存在Number.MIN_VALUE 中——在大多數(shù)瀏覽器中昙读,這個值是5e-324召调;
ECMAScript 能夠表示的最大數(shù)值保存在number.MAX_VALUE中——在大多數(shù)瀏覽器中,這個值是.7976931348623157e+308蛮浑。
如果某次計算的結(jié)果得到了一個超出JavaScript 數(shù)值范圍的值唠叛,那么這個數(shù)值將被自動轉(zhuǎn)換成特殊的Infinity 值。具體來說沮稚,如果這個數(shù)值是負(fù)數(shù)艺沼,則會被轉(zhuǎn)換成-Infinity(負(fù)無窮),如果這個數(shù)值是正數(shù)蕴掏,則會被轉(zhuǎn)換成Infinity(正無窮)障般。

要想確定一個數(shù)值是不是有窮的(換句話說,是不是位于最小和最大的數(shù)值之間)盛杰,可以使用isFinite()函數(shù)挽荡。

訪問Number.NEGATIVE_INFINITY 和Number.POSITIVE_INFINITY 也可以得到負(fù)和正Infinity 的值〖垂可以想見徐伐,這兩個屬性中分別保存著-Infinity 和Infinity。

NaN

NaN募狂,即非數(shù)值(Not a Number)是一個特殊的數(shù)值办素,這個數(shù)值用于表示一個本來要返回數(shù)值的操作數(shù)未返回數(shù)值的情況(這樣就不會拋出錯誤了)角雷。例如,在其他編程語言中性穿,任何數(shù)值除以0 都會導(dǎo)致錯誤勺三,從而停止代碼執(zhí)行。但在ECMAScript 中需曾,任何數(shù)值除以0 會返回NaN吗坚,因此不會影響其他代碼的執(zhí)行。
NaN 本身有兩個非同尋常的特點呆万。首先商源,任何涉及NaN 的操作(例如NaN/10)都會返回NaN,這個特點在多步計算中有可能導(dǎo)致問題谋减。其次牡彻,NaN 與任何值都不相等,包括NaN 本身出爹。

``
alert(NaN == NaN); //false

/* 可以使用isNaN()函數(shù)來判斷參數(shù)是否是NaN */
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10 是一個數(shù)值)
alert(isNaN("10")); //false(可以被轉(zhuǎn)換成數(shù)值10)
alert(isNaN("blue")); //true(不能轉(zhuǎn)換成數(shù)值)
alert(isNaN(true)); //false(可以被轉(zhuǎn)換成數(shù)值1)
``

在基于對象調(diào)用isNaN()函數(shù)時庄吼,會首先調(diào)用對象的valueOf()方法,然后確定該方法返回的值是否可以轉(zhuǎn)換為數(shù)值严就。如果不能总寻,則基于這個返回值再調(diào)用toString()方法,再測試返回值梢为。而這個過程也是ECMAScript 中內(nèi)置函數(shù)和操作符的一般執(zhí)行流程渐行。

數(shù)值轉(zhuǎn)換

有3 個函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值:Number()、parseInt()和parseFloat()铸董。

Number()

var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1

*由于Number()函數(shù)在轉(zhuǎn)換字符串時比較復(fù)雜而且不夠合理祟印,因此在處理整數(shù)的時候更常用的是parseInt()函數(shù)。

parseInt()

var num1 = parseInt("1234blue"); // 1234
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六進(jìn)制數(shù))
var num4 = parseInt(22.5); // 22
var num5 = parseInt("070"); // 56(八進(jìn)制數(shù))
var num6 = parseInt("70"); // 70(十進(jìn)制數(shù))
var num7 = parseInt("0xf"); // 15(十六進(jìn)制數(shù))

在ECMAScript 3 JavaScript 引擎中袒炉,"070"被當(dāng)成八進(jìn)制字面量,因此轉(zhuǎn)換后的值是十進(jìn)制的56樊零。而在ECMAScript 5 JavaScript 引擎中我磁,parseInt()已經(jīng)不具有解析八進(jìn)制值的能力,因此前導(dǎo)的零會被認(rèn)為無效驻襟,從而將這個值當(dāng)成"70"夺艰,結(jié)果就得到十進(jìn)制的70。在ECMAScript 5 中沉衣,即使是在非嚴(yán)格模式下也會如此郁副。為了消除在使用parseInt()函數(shù)時可能導(dǎo)致的上述困惑,可以為這個函數(shù)提供第二個參數(shù):轉(zhuǎn)換時使用的基數(shù)(即多少進(jìn)制)豌习。如果知道要解析的值是十六進(jìn)制格式的字符串存谎,那么指定基數(shù)16 作為第二個參數(shù)拔疚,可以保證得到正確的結(jié)果。

var num1 = parseInt("AF", 16); //175
var num2 = parseInt("AF"); //NaN

var num1 = parseInt("10", 2); //2 (按二進(jìn)制解析)
var num2 = parseInt("10", 8); //8 (按八進(jìn)制解析)
var num3 = parseInt("10", 10); //10 (按十進(jìn)制解析)
var num4 = parseInt("10", 16); //16 (按十六進(jìn)制解析)

/* 多數(shù)情況下既荚,我們要解析的都是十進(jìn)制數(shù)值稚失,因此始終將10 作為第二個參數(shù)是非常必要的。 */

parseFloat()
parseFlaot與parseInt非常類似恰聘。

var num1 = parseFloat("1234blue"); //1234 (整數(shù))
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //31250000

String類型

String 類型用于表示由零或多個16 位Unicode 字符組成的字符序列句各,即字符串。字符串可以由雙引號(")或單引號(')表示晴叨。

表示方法:

var firstName = "Nicholas";
var lastName = 'Zakas';

與PHP 中的雙引號和單引號會影響對字符串的解釋方式不同凿宾,ECMAScript 中的這兩種語法形式?jīng)]有什么區(qū)別。

字符字面量

String 數(shù)據(jù)類型包含一些特殊的字符字面量兼蕊,也叫轉(zhuǎn)義序列初厚,用于表示非打印字符,或者具有其他用途的字符遍略。

字面量 含義
\n 換行
\t 制表
\b 空格
\r 回車
\f 進(jìn)紙(走紙換紙)
\ 斜杠
' 單引號(')惧所,在用單引號表示的字符串中使用。
" 雙引號(")绪杏,在用雙引號表示的字符串中使用下愈。
\Xnn 以十六進(jìn)制代碼nn表示的一個字符(其中n為0~F)。例如蕾久,\x41表示"A"势似。
\Unnnn 以十六進(jìn)制代碼nnnn表示的一個Unicode字符(其中n為0~F)。例如僧著,\u03a3表示希臘字符Σ履因。

字符串的特點

ECMAScript 中的字符串是不可變的,也就是說盹愚,字符串一旦創(chuàng)建栅迄,它們的值就不能改變。要改變某個變量保存的字符串皆怕,首先要銷毀原來的字符串毅舆,然后再用另一個包含新值的字符串填充該變量。

舉個栗子

var lang = "Java";
lang = lang + "Script";

以上示例中的變量lang 開始時包含字符串"Java"愈腾。而第二行代碼把lang 的值重新定義為"Java"與"Script"的組合憋活,即"JavaScript"。實現(xiàn)這個操作的過程如下:首先創(chuàng)建一個能容納10 個字符的新字符串虱黄,然后在這個字符串中填充"Java"和"Script"悦即,最后一步是銷毀原來的字符串"Java"和字符串"Script",因為這兩個字符串已經(jīng)沒用了。這個過程是在后臺發(fā)生的辜梳。

轉(zhuǎn)換為字符串

要把一個值轉(zhuǎn)換為一個字符串有兩種方式:
第一種是使用幾乎每個值都有的toString()方法粱甫;
第二種是使用轉(zhuǎn)型函數(shù)String()

var age = 11;
var ageAsString = age.toString(); // 字符串"11"
var found = true;
var foundAsString = found.toString(); // 字符串"true"

/* toString()可以輸出以二進(jìn)制冗美、八進(jìn)制魔种、十六進(jìn)制,乃至其他任意有效進(jìn)制格式表示的字符串值 */
var num = 10;
alert(num.toString()); // "10"
alert(num.toString(2)); // "1010"
alert(num.toString(8)); // "12"
alert(num.toString(10)); // "10"
alert(num.toString(16)); // "a"

/* 
  使用轉(zhuǎn)型函數(shù)String() 
  *如果值有toString()方法粉洼,則調(diào)用該方法(沒有參數(shù))并返回相應(yīng)的結(jié)果节预;
  *如果值是null,則返回"null"属韧;
  *如果值是undefined安拟,則返回"undefined"。
*/
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); // "10"
alert(String(value2)); // "true"
alert(String(value3)); // "null"
alert(String(value4)); // "undefined"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宵喂,一起剝皮案震驚了整個濱河市糠赦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锅棕,老刑警劉巖拙泽,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異裸燎,居然都是意外死亡顾瞻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門德绿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荷荤,“玉大人,你說我怎么就攤上這事移稳≡棠桑” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵个粱,是天一觀的道長古毛。 經(jīng)常有香客問我,道長都许,這世上最難降的妖魔是什么稻薇? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮梭稚,結(jié)果婚禮上颖低,老公的妹妹穿的比我還像新娘絮吵。我一直安慰自己弧烤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暇昂,像睡著了一般莺戒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上急波,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天从铲,我揣著相機與錄音,去河邊找鬼澄暮。 笑死名段,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泣懊。 我是一名探鬼主播伸辟,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼馍刮!你這毒婦竟也來了信夫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤卡啰,失蹤者是張志新(化名)和其女友劉穎静稻,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匈辱,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡振湾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梅誓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恰梢。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖梗掰,靈堂內(nèi)的尸體忽然破棺而出嵌言,到底是詐尸還是另有隱情,我是刑警寧澤及穗,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布摧茴,位于F島的核電站,受9級特大地震影響埂陆,放射性物質(zhì)發(fā)生泄漏苛白。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一焚虱、第九天 我趴在偏房一處隱蔽的房頂上張望购裙。 院中可真熱鬧,春花似錦鹃栽、人聲如沸躏率。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薇芝。三九已至蓬抄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夯到,已是汗流浹背嚷缭。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耍贾,地道東北人阅爽。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像荐开,于是被迫代替她去往敵國和親优床。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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

  • 什么是 JavaScript 語言誓焦? JavaScript 是一種輕量級的腳本語言胆敞。所謂“腳本語言”(script...
    oWSQo閱讀 1,790評論 0 1
  • 本章內(nèi)容 語法 數(shù)據(jù)類型 流控制語句 理解函數(shù) 3.1 語法 3.1.1 區(qū)分大小寫 區(qū)分大小寫 3.1.2 標(biāo)識...
    悶油瓶小張閱讀 719評論 0 0
  • ECMAScript中有5種簡單數(shù)據(jù)類型(也稱為基本數(shù)據(jù)類型):Undefined 、Null杂伟、 Boolean ...
    胖胖冰閱讀 241評論 0 0
  • 20多歲剛參加工作赫粥,在工地做工程監(jiān)理观话。和校友師弟站在剛開挖的基坑前,我就默默的告訴自己未來一定要我所看越平、所想...
    羽斐閱讀 252評論 3 1
  • 中國足球 文||與你相識 一次次希望 換來一次次失望 那些青春和力量 為何總負(fù)于時光 綠茵場上的雄壯 何時才能回蕩...
    與你相識_40fa閱讀 134評論 4 2