1. 程式人生 > >ONE PIECE ------ javascript

ONE PIECE ------ javascript

Number 型別,來表示整數和浮點數值(浮點數值在某些語言中也被稱為雙精度數值)
最基本的數值字面量格式是十進位制整數,十進位制整數可以像下面這樣直接在程式碼中輸入:
var intNum = 55; // 整數
除了以十進位制表示外,整數還可以通過八進位制(以8 為基數)或十六進位制(以16 為基數)的字面值來表示。其中,八進位制字面值的第一位必須是零(0),然後是八進位制數字序列(0~7)。如果字面值中的數值超出了範圍,那麼前導零將被忽略,後面的數值將被當作十進位制數值解析。請看下面的例子:
var octalNum1 = 070; // 八進位制的56
var octalNum2 = 079; // 無效的八進位制數值——解析為79
var octalNum3 = 08; // 無效的八進位制數值——解析為8
八進位制字面量在嚴格模式下是無效的,會導致支援的JavaScript 引擎丟擲錯誤。
十六進位制字面值的前兩位必須是0x,後跟任何十六進位制數字(0~9 及A~F)。其中,字母A~F
可以大寫,也可以小寫。如下面的例子所示:
var hexNum1 = 0xA; // 十六進位制的10
var hexNum2 = 0x1f; // 十六進位制的31
在進行算術計算時,所有以八進位制和十六進位制表示的數值最終都將被轉換成十進位制數值。
JavaScript 中儲存數值的方式,可以儲存正零(+0)和負零(-0)。正零和負零被認為相等。

浮點數值:
所謂浮點數值,就是該數值中必須包含一個小數點,並且小數點後面必須至少有一位數字。雖然小數點前面可以沒有整數,但我們不推薦這種寫法。以下是浮點數值的幾個例子:
var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; // 有效,但不推薦
由於儲存浮點數值需要的記憶體空間是儲存整數值的兩倍,因此ECMAScript 會不失時機地將浮點數值轉換為整數值。顯然,如果小數點後面沒有跟任何數字,那麼這個數值就可以作為整數值來儲存。同樣地,如果浮點數值本身表示的就是一個整數(如1.0),那麼該值也會被轉換為整數,如下面的例子所示:
var floatNum1 = 1.; // 小數點後面沒有數字——解析為1
var floatNum2 = 10.0; // 整數——解析為10
預設情況下,會將那些小數點後面帶有6 個零以上的浮點數值轉換為以e 表示法表示的數值(例如,0.0000003 會被轉換成3e-7)。
浮點數值的最高精度是17 位小數,但在進行算術計算時其精確度遠遠不如整數。例如,0.1 加0.2的結果不是0.3,而是0.30000000000000004
。這個小小的舍入誤差會導致無法測試特定的浮點數值
例如:
if (a + b == 0.3){ // 不要做這樣的測試!
alert("You got 0.3.");
}
在這個例子中,我們測試的是兩個數的和是不是等於0.3。如果這兩個數是0.05 和0.25,或者是0.15和0.15 都不會有問題。而如前所述,如果這兩個數是0.1 和0.2,那麼測試將無法通過。因此,永遠不要測試某個特定的浮點數值
能夠表示的最小數值儲存在Number.MIN_VALUE 中——在大多數瀏覽器中,這個值是5e-324;能夠表示的最大數值儲存在Number.MAX_VALUE 中——在大多數瀏覽器中,這個值是1.7976931348623157e+308。如果某次計算的結果得到了一個超出JavaScript 數值範圍的值,那麼這個數值將被自動轉換成特殊的Infinity 值。具體來說,如果這個數值是負數,則會被轉換成-Infinity(負無窮),如果這個數值是正數,則會被轉換成Infinity(正無窮)。
如上所述,如果某次計算返回了正或負的Infinity 值,那麼該值將無法繼續參與下一次的計算,因為Infinity 不是能夠參與計算的數值。要想確定一個數值是不是有窮的(換句話說,是不是位於最小和最大的數值之間),可以使用isFinite()函式
。這個函式在引數位於最小與最大數值之間時會返
回true,如下面的例子所示:
var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result)); //false
儘管在計算中很少出現某些值超出表示範圍的情況,但在執行極小或極大數值的計算時,檢測監控這些值是可能的,也是必需的。

NaN(原書如此,但實際上只有0 除以0 才會返回NaN,正數除以0 返回Infinity,負數除以0 返回-Infinity)
即非數值(Not a Number)是一個特殊的數值,這個數值用於表示一個本來要返回數值的運算元未返回數值的情況(這樣就不會丟擲錯誤了)。例如,在其他程式語言中,任何數值除以0 都會導致錯誤,從而停止程式碼執行。但在ECMAScript 中,任何數值除以0 會返回NaN,因此不會影響其他程式碼的執行。NaN 本身有兩個非同尋常的特點,首先,任何涉及NaN 的操作(例如NaN/10)都會返回NaN,這個特點在多步計算中有可能導致問題。其次,NaN 與任何值都不相等,包括NaN 本身。例如,下面的程式碼會返回false:
alert(NaN == NaN); //false
針對NaN 的這兩個特點,ECMAScript 定義了isNaN()函式。這個函式接受一個引數,該引數可以是任何型別,而函式會幫我們確定這個引數是否“不是數值”。isNaN()在收到一個值之後,會嘗試將這個值轉換為數值。某些不是數值的值會直接轉換為數值,例如字串"10"或Boolean 值。而任何不能被轉換為數值的值都會導致這個函式返回true
。請看下面的例子:
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10 是一個數值)
alert(isNaN("10")); //false(可以被轉換成數值10)
alert(isNaN("blue")); //true(不能轉換成數值)
alert(isNaN(true)); //false(可以被轉換成數值1)

有3 個函式可以把非數值轉換為數值:Number()、parseInt()和parseFloat()。第一個函式,即轉型函式Number()可以用於任何資料型別,而另兩個函式則專門用於把字串轉換成數值。這3 個函式對於同樣的輸入會有返回不同的結果
Number()函式的轉換規則如下:
 如果是Boolean 值,true 和false 將分別被轉換為1 和0。
如果是數字值,只是簡單的傳入和返回。
如果是null 值,返回0。
如果是undefined,返回NaN。
如果是字串,遵循下列規則:
如果字串中只包含數字(包括前面帶正號或負號的情況),則將其轉換為十進位制數值,即"1"會變成1,"123"會變成123,而"011"會變成11(注意:前導的零被忽略了);
如果字串中包含有效的浮點格式,如"1.1",則將其轉換為對應的浮點數值(同樣,也會忽略前導零);
如果字串中包含有效的十六進位制格式,例如"0xf",則將其轉換為相同大小的十進位制整數值;
如果字串是空的(不包含任何字元),則將其轉換為0;
如果字串中包含除上述格式之外的字元,則將其轉換為NaN。
如果是物件,則呼叫物件的valueOf()方法,然後依照前面的規則轉換返回的值。如果轉換的結果是NaN,則呼叫物件的toString()方法,然後再次依照前面的規則轉換返回的字串值
由於Number()函式在轉換字串時比較複雜而且不夠合理,因此在處理整數的時候更常用的是parseInt()函式。parseInt()函式在轉換字串時,更多的是看其是否符合數值模式。它會忽略字串前面的空格,直至找到第一個非空格字元。如果第一個字元不是數字字元或者負號,parseInt()就會返回NaN;也就是說,用parseInt()轉換空字串會返回NaN(Number()對空字元返回0)如果第一個字元是數字字元,parseInt()會繼續解析第二個字元,直到解析完所有後續字元或者遇到了一個非數字字元。例如,"1234blue"會被轉換為1234,因為"blue"會被完全忽略。類似地,"22.5"會被轉換為22,因為小數點並不是有效的數字字元。如果字串中的第一個字元是數字字元,parseInt()也能夠識別出各種整數格式(即前面討論的十進位制、八進位制和十六進位制數)。也就是說,如果字串以"0x"開頭且後跟數字字元,就會將其當作一個十六進位制整數;如果字串以"0"開頭且後跟數字字元,則會將其當作一個八進位制數來解析在ECMAScript 3 JavaScript 引擎中,"070"被當成八進位制字面量,因此轉換後的值是十進位制的56。而在ECMAScript 5 JavaScript 引擎中,parseInt()已經不具有解析八進位制值的能力,因此前導的零會被認為無效,從而將這個值當成"70",結果就得到十進位制的70。在ECMAScript 5 中,即使是在非嚴格模式下也會如此。為了消除在使parseInt()函式時可能導致的上述困惑,可以為這個函式提供第二個引數:轉換時使用的基數(即多少進位制)。如果知道要解析的值是十六進位制格式的字串,那麼指定基數16 作為第二個引數,可以保證得到正確的結果不指定基數意味著讓parseInt()決定如何解析輸入的字串,因此為了避免錯誤的解析,我們建議無論在什麼情況下都明確指定基數(多數情況下,我們要解析的都是十進位制數值,因此始終將10 作為第二個引數是非常必要的。),與parseInt()函式類似,parseFloat()也是從第一個字元(位置0)開始解析每個字元。而且也是一直解析到字串末尾,或者解析到遇見一個無效的浮點數字字元為止。也就是說,字串中的第一個小數點是有效的,而第二個小數點就是無效的了,因此它後面的字串將被忽略。舉例來說,"22.34.5"將會被轉換為22.34。除了第一個小數點有效之外,parseFloat()與parseInt()的第二個區別在於它始終都會忽略前導的零。parseFloat()可以識別前面討論過的所有浮點數值格式,也包括十進位制整數格式。但十六進位制格式的字串則始終會被轉換成0。由於parseFloat()只解析十進位制值,因此它沒有用第二個引數指定基數的用法。最後還要注意一點:如果字串包含的是一個可解析為整數的數(沒有小數點,或者小數點後都是零),parseFloat()會返回整數

相關推薦

ONE PIECE ------ javascript

Number 型別,來表示整數和浮點數值(浮點數值在某些語言中也被稱為雙精度數值) 最基本的數值字面量格式是十進位制整數,十進位制整數可以像下面這樣直接在程式碼中輸入: var intNum = 55; // 整數 除了以十進位制表示外,整數還可以通過八進位制(以8 為基數)或十六進位制(以16 為基數

SPOJ:One piece(最大匹配問題)(Gut Problem!)

這一 bit 估值 clu 排除 DC multipl contain any One of DB and TN common interests is traveling. One day, they went to Grand Line and found One Pi

Plus One-LeetCode JavaScript

看到這個題目剛開始不知道讓幹什麼,於是試了幾個customer testcase發現讓加一。 於是我腦海中閃現兩種演算法:1:從後向前遍歷陣列以進位; 2:轉為數字,+1,再轉回陣列。 先用第二種方法寫出來: var plusOne = function(digits) { var

One Piece Of Advice

COMBINED they represent over 300 years of knowledge; women who in their own right have made their mark in photojournalism. With stoicism and pride, they ha

重磅來襲 Vue 3.0 One Piece 正式釋出

代號為One Piece 的Vue3.0 在9月19日凌晨正式釋出!! 此次vue3.0 為使用者提供了全新的 composition-api 以及更小的包大小,和更好的 TypeScript 支援。 釋出地址 Vue-next Vue3.0 是當前非常流行的框架,Vue3.0更是醞釀了2年多

javascript事件委托和jQuery事件綁定on、off 和one

作用 clas title 現實 調用 指定 更強 die() 停止 一. 事件委托什麽是事件委托?用現實中的理解就是:有100 個學生同時在某天中午收到快遞,但這100 個學生不可能同時站在學校門口等,那麽都會委托門衛去收取,然後再逐個交給學生。而在jQuery 中,我們

JavaScript BOM(one);

var end 元素 屬性 AR clas java div script 一:BOM節點: 節點分為:元素節點(標簽) 文本節點(TEXT) 屬性節點(CSS) ; 節點關系: 父節點 子節點

JavaScript學習筆記——變數,變數型別,運算子,語句—day one

目錄 一、瀏覽器 二、JS基本語法: 1、變數 2、變數型別 值型別(基本型別) 引用型別 型別轉換 typeof操作符 3、運算子 算術運算子 關係運算符 邏輯運算子 4、語句 條件語句 迴圈語句 跳轉語句 一、瀏覽器

[Javascript] Convert a Callback-Based JavaScript Function to a Promise-Based One

Sometimes, you might want to convert a JavaScript function that accepts a callback to one that returns a Promiseobject. This lesson shows how t

JavaScript入門——變數,值型別,運算子,語句——day one

目錄 一、瀏覽器 1、變數 值型別 引用型別 型別轉換 3、運算子 算術運算子 關係運算符 邏輯運算子 4、語句 條件語句 迴圈語句 跳轉語句 一、瀏覽器 瀏覽器的組成:shell部分(可視部分)                

Here’s Why We Just Can’t Agree on One JavaScript Framework

Indeed! Why can’t we just get along and use one single JavaScript framework? Or two!? Here’s what I think about this situation that a lot of people conside

多個JavaScript庫使用 $ 號的命名沖突問題

多個 script 一個 對象 conflict onf java read 調用 多個JavaScript庫使用 $ 號的命名沖突問題:  1. 為解決這個問題,jQuery 提供了一個 jQuery.noConflict() 方法,調用該方法可以把對 $ 標

javascript字符串方法總結

大小寫 comm 其他 tolower 匹配 一行 ror 運算 轉換 一、單引號字符串內部可以使用雙引號,雙引號字符串內部也可以使用單引號 "hello ‘world‘" ‘welcome "to" js‘ 二、多行和轉義 如果要在單引號字符串的內部,使用單引號(或者

keycode 大全,javascript 再也不用操心我不知道的keycode了

end acer als doc rac amd capture 瀏覽器 ket keycode 8 = BackSpace BackSpace keycode 9 = Tab Tab keycode 12 = Clear keycode 13 =

每天一個JavaScript實例-展示設置和獲取CSS樣式設置

width func height nts style scrip meta on() 屬性 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" conte

JavaScript基本數據類型

null script 引號 進制 數字類型 所有 ava def fin   JavaScript語言中有五大基本數據類型:     數字;     字符串;     布爾值;     undefined;     null;   任何不屬於基本數據類型的東西都屬於對象。

十分鐘徹底理解javascript 的 this指向,不懂請砸店

hub 改變 alert blog var rip def 徹底 文章 函數的this指向誰,和函數在哪裏被定義的,函數在哪裏被執行的沒有半毛錢關系,只遵守下面的規律: 在非嚴格模式中: 1、自執行函數裏面,this永遠指向window; <script

JavaScript遍歷IP段內所有IP

hive write ora cor script list urn get ray 思路:將兩個IP轉換為數字進行比較,小的那個慢慢加一,直到變成大的那個IP所轉換的數字,將這其中的數字再轉換為IP地址即為IP段內所有的IP。 1 //IP轉數字 2 functio

javascript裏上下文this的理解和call()使用

指向 asc 傳遞 bsp say animal 指定 nim strong call 方法 語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 大概寫法:call(Object,arg1,arg2,...); 定義:調用一個對

JavaScript閉包

方式 jquer 關聯 通過 添加 指向 訪問 def nbsp 什麽是閉包   在JavaScript中,閉包是指有權訪問另一個函數作用域中的變量的函數。創建閉包指的就是在一個函數內部創建另一個函數。 閉包的作用   1.可以使外部作用域讀取到內部作用域的變量