Number 對象

2018-06-16 15:46 更新

作為函數(shù)調(diào)用的 Number 構(gòu)造器

 當把 Number 當作一個函數(shù)來調(diào)用,而不是作為構(gòu)造器,它執(zhí)行一個類型轉(zhuǎn)換。

Number ( [ value ] )

 如果提供了 value,返回 ToNumber(value) 計算出的數(shù)字值(非 Number 對象),否則返回 +0。

Number 構(gòu)造器

 當把 Number 作為 new 表達式的一部分來調(diào)用,它是構(gòu)造器:它初始化新創(chuàng)建的對象。

new Number ( [ value ] )

 新構(gòu)造對象的 [[Prototype]] 內(nèi)部屬性設(shè)定為原始數(shù)字原型對象,它是 Number.prototype 的初始值(15.7.3.1)。

 新構(gòu)造對象的 [[Class]] 內(nèi)部屬性設(shè)定為 "Number"。

 新構(gòu)造對象的 [[PrimitiveValue]] 內(nèi)部屬性在提供了 value 時設(shè)定為 ToNumber(value),否則設(shè)定為 +0。

 新構(gòu)造對象的 [[Extensible]] 內(nèi)部屬性設(shè)定為 true。

Number 構(gòu)造器的屬性

 Number 構(gòu)造器的 [[Prototype]] 內(nèi)部屬性值是函數(shù)原型對象 (15.3.4)。

 除了內(nèi)部屬性和 length 屬性(值為 1)之外,Number 構(gòu)造器還有以下屬性:

Number.prototype

 Number.prototype 的初始值是數(shù)字原型對象。

 這個屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

Number.MAX_VALUE

 Number.MAX_VALUE 的值是數(shù)字類型的最大正有限值,約為 1.7976931348623157 × 10308。

 這個屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

Number.MIN_VALUE

 Number.MIN_VALUE 的值是數(shù)字類型的最小正有限值,約為 5 × 10-324。

 這個屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

Number.NaN

 Number.NaN 的值是 NaN。

 這個屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

Number.NEGATIVE_INFINITY

 Number.NEGATIVE_INFINITY 的值是?∞。

 這個屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

Number.POSITIVE_INFINITY

 Number.POSITIVE_INFINITY 的值是 +∞。

 這個屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

數(shù)字原型對象的屬性

 數(shù)字原型對象其自身是 Number 對象(其 [[Class]] 是 "Number"),其值為 +0。

 數(shù)字原型對象的 [[Prototype]] 內(nèi)部屬性值是標準內(nèi)置 Object 原型對象 (15.2.4)。

 除非另外明確聲明,以下定義的數(shù)字原型對象的方法是非通用的,傳遞給它們的 this 值必須是數(shù)字值或 [[Class]] 內(nèi)部屬性值是 "Number" 的對象。

 在以下對作為數(shù)字原型對象屬性的函數(shù)的描述中,短語“this Number 對象”是指函數(shù)調(diào)用中的 this 值,或如果 Type(this 值 ) 是 Number,“this Number 對象”指仿佛是用表達式 new Number(this value) 創(chuàng)建的對象,這里 Number 是標準內(nèi)置構(gòu)造器名。此外,短語“this 數(shù)字值”是指代表 this Number 對象的數(shù)字值,也就是 this Number 對象的 [[PrimitiveValue]] 內(nèi)部屬性值;或如果 this 是數(shù)字類型,“this 數(shù)字值”指 this 值。如果 this 值不是 [[Class]] 內(nèi)部屬性為 "Number" 的對象,也不是數(shù)字類型的值,則拋出一個 TypeError 異常。

Number.prototype.constructor

 Number.prototype.constructor 的初始值是內(nèi)置 Number 構(gòu)造器。

Number.prototype.toString ( [ radix ] )

 可選參數(shù) radix 應(yīng)當是 2 到 36 閉區(qū)間上的整數(shù)。如果 radix 不存在或是 undefined,用數(shù)字 10 作為 radix 的值。如果 ToInteger(radix) 是數(shù)字 10,則將 this Number 對象作為一個參數(shù)傳給 ToString 抽象操作;返回結(jié)果字符串值。

 如果 ToInteger(radix) 不是在 2 到 36 閉區(qū)間上的整數(shù),則拋出一個 RangeError 異常。如果 ToInteger(radix) 是 2 到 36 的整數(shù),擔不是 10,則結(jié)果是 this 數(shù)字值使用指定基數(shù)表示法的字符串。字母 a-z 用來指值為 10 到 35 的數(shù)字?;鶖?shù)不為 10 時的精確算法是依賴于實現(xiàn)的,然而算法應(yīng)當是 9.8.1 指定算法的推廣形式。

 toString 函數(shù)不是通用的;如果 this 值不是數(shù)字或 Number 對象,拋出一個 TypeError 異常。因此它不能當作方法轉(zhuǎn)移到其他類型對象上。

Number.prototype.toLocaleString()

 根據(jù)宿主環(huán)境的當前語言環(huán)境慣例來格式化 this 數(shù)字值,生成代表這個值的字符串。此函數(shù)是依賴于實現(xiàn)的,允許但不鼓勵它的返回值與 toString 相同。

 此函數(shù)的第一個參數(shù)可能會用于本標準的未來版本 ; 建議實現(xiàn)不以任何用途使用這個參數(shù)位置。

Number.prototype.valueOf ( )

 返回 this 數(shù)字值。

 valueOf 函數(shù)不是通用的;如果 this 值不是數(shù)字或 Number 對象,拋出一個 TypeError 異常。因此它不能當作方法轉(zhuǎn)移到其他類型對象上。

Number.prototype.toFixed (fractionDigits)

 返回一個包含了 -- 代表 this 數(shù)字值的留有小數(shù)點后 fractionDigits 個數(shù)字的十進制固定小數(shù)點記法 -- 的字符串。如果 fractionDigits 是 undefined,就認為是 0。具體來說,執(zhí)行以下步驟:

  1. 令 f 為 ToInteger(fractionDigits). ( 如果 fractionDigits 是 undefined, 此步驟產(chǎn)生 0 值 ).
  2. 如果 f < 0 或 f > 20, 拋出一個 RangeError 異常 .
  3. 令 x 為 this 數(shù)字值 .
  4. 如果 x 是 NaN, 返回字符串 "NaN".
  5. 令 s 為空字符串 .
  6. 如果 x < 0, 則令 s 為 "-".令 x = –x.
  7. 如果 x ≥ 1021, 則令 m = ToString(x).
  8. 否則 , x < 1021令 n 為一個整數(shù),讓 n ÷ 10f – x 準確的數(shù)學(xué)值盡可能接近零。如果有兩個這樣 n 值,選擇較大的 n。如果 n = 0, 令 m 為字符串 "0". 否則 , 令 m 為由 n 的十進制表示里的數(shù)組成的字符串(為了沒有前導(dǎo)零)。如果 f ≠ 0, 則令 k 為 m 里的字符數(shù)目 .如果 k ≤ f, 則令 z 為 f+1–k 個 ‘0’ 組成的字符串 .令 m 為 串聯(lián)字符串 z 的 m 的結(jié)果 .令 k = f + 1.令 a 為 m 的前 k–f 個字符,令 b 為其余 f 個字符。令 m 為 串聯(lián)三個字符串 a, ".", 和 b 的結(jié)果。
  9. 返回串聯(lián)字符串 s 和 m 的結(jié)果。

 toFixed 方法的 length 屬性是 1。

 如果以多個參數(shù)調(diào)用 toFixed 方法,則行為是不確定的(見 15 章)。

 實現(xiàn)是被允許在 fractionDigits 小于 0 或大于 20 時擴展 toFixed 的行為。在這種情況下,對這樣的 fractionDigits 值 toFixed 將未必拋出 RangeError。

 對于某些值,toFixed 的輸出可比 toString 的更精確,因為 toString 只打印區(qū)分相鄰數(shù)字值的足夠的有效數(shù)字。例如 ,

 (1000000000000000128).toString() 返回 "1000000000000000100",

 而 (1000000000000000128).toFixed(0) 返回 "1000000000000000128".

Number.prototype.toExponential (fractionDigits)

 返回一個代表 this 數(shù)字值的科學(xué)計數(shù)法的字符串,它的有效數(shù)字的小數(shù)點前有一個數(shù)字,有效數(shù)字的小數(shù)點后有 fractionDigits 個數(shù)字。如果 fractionDigits 是 undefined,包括指定唯一數(shù)字值需要的盡可能多的有效數(shù)字(就像 ToString,但在這里總是以科學(xué)計數(shù)法輸出)。具體來說執(zhí)行以下步驟:

  1. 令 x 為 this 數(shù)字值 .
  2. 令 f 為 ToInteger(fractionDigits).
  3. 如果 x 是 NaN, 返回字符串 "NaN".
  4. 令 s 為空字符串 .
  5. 如果 x < 0, 則令 s 為 "-".令 x = –x.
  6. 如果 x = +∞, 則返回串聯(lián)字符串 s 和 "Infinity" 的結(jié)果 .
  7. 如果 fractionDigits 不是 undefined 且 (f < 0 或 f > 20), 拋出一個 RangeError 異常 .
  8. 如果 x = 0, 則令 f = 0.令 m 為包含 f+1 個‘0’的字符串。令 e = 0.
  9. 否則 , x ≠ 0如果 fractionDigits 不是 undefined, 則令 e 和 n 為整數(shù),使得滿足 10f ≤ n < 10f+1 且 n × 10e–f – x 的準確數(shù)學(xué)值盡可能接近零。如果 e 和 n 有兩個這樣的組合,選擇使 n × 10e–f 更大的組合。否則 , fractionDigits 是 undefined令 e, n, 和 f 為整數(shù),使得滿足 f ≥ 0, 10f≤ n < 10f+1, n × 10e–f 的數(shù)字值是 x, 且 f 的值盡可能小。注:n 的十進制表示有 f+1 個數(shù)字,n 不能被 10 整除,并且 n 的最少有效位數(shù)不一定唯一由這些條件確定。令 m 為由 n 的十進制表示里的數(shù) 組成的字符串(沒有前導(dǎo)零)。
  10. 如果 f ≠ 0, 則令 a 為 m 中的第一個字符 , 令 b 為 m 中的其余字符 .令 m 為串聯(lián)三個字符串 a, ".", 的 b 的結(jié)果 .
  11. 如果 e = 0, 則令 c = "+".令 d = "0".
  12. 否則如果 e > 0, 則 令 c = "+".否則 , e ≤ 0令 c = "-".令 e = –e.令 d 為有 e 的十進制表示里的數(shù) 組成的字符串(沒有前導(dǎo)零)。
  13. 令 m 為串聯(lián)四個字符串 m, "e", c, 和 d 的結(jié)果 .
  14. 返回串聯(lián)字符串 s 和 m 的結(jié)果 .

 toExponential 方法的 length 屬性是 1。

 如果用多于一個參數(shù)調(diào)用 toExponential 方法,則行為是未定義的 ( 見 15 章 )。

 一個實現(xiàn)可以擴展 fractionDigits 的值小于 0 或大于 20 時 toExponential 的行為。這種情況下對這樣的 fractionDigits 值,toExponential 不一定拋出 RangeError 異常 .

 對于需要提供比上述規(guī)則更準確轉(zhuǎn)換的實現(xiàn),建議用以下算法作為指引替代步驟 9.b.i :

  1. 令 e, n, 和 f 為整數(shù),使得滿足 f ≥ 0, 10f≤ n < 10f+1, n × 10e–f 的數(shù)字值是 x, 且 f 的值盡可能小。如果這樣的 n 值可能多個,選擇使 n × 10e–f 的值盡可能接近 x 的 n 值。如果有兩個這樣的 n 值,選擇偶數(shù)。

Number.prototype.toPrecision (precision)

 返回一個字符串,它代表 this 數(shù)字值的科學(xué)計數(shù)法(有效數(shù)字的小數(shù)點前有一個數(shù)字,有效數(shù)字的小數(shù)點后有 precision-1 個數(shù)字)或十進制固定計數(shù)法(precision 個有效數(shù)字)。如果 precision 是 undefined,用 ToString (9.8.1) 調(diào)用代替。具體來說執(zhí)行以下步驟:

  1. 令 x 為 this 數(shù)字值 .
  2. 如果 precision 是 undefined, 返回 ToString(x).
  3. 令 p 為 ToInteger(precision).
  4. 如果 x 是 NaN, 返回字符串 "NaN".
  5. 令 s 為空字符串 .
  6. 如果 x < 0, 則令 s 為 "-".令 x = –x.
  7. 如果 x = +∞, 則返回串聯(lián)字符串 s 和 "Infinity" 的結(jié)果 .
  8. 如果 p < 1 或 p > 21, 拋出一個 RangeError 異常 .
  9. 如果 x = 0, 則令 m 為 p 個 '0' 組成的字符串 .令 e = 0.
  10. 否則 x ≠ 0,令 e 和 n 為整數(shù),使得滿足 10p–1 ≤ n < 10p 且 n × 10e–p+1 – x 的準確數(shù)學(xué)值盡可能接近零。如果 e 和 n 有兩個這樣的組合,選擇使 n × 10e–p+1 更大的組合。令 m 為由 n 的十進制表示里的數(shù) 組成的字符串(沒有前導(dǎo)零)。如果 e < –6 或 e ≥ p, 則令 a 為 n 的第一個字符 , 令 b 為 m 的其余 p–1 個字符 .令 m 為串聯(lián)三個字符串 a, ".", 和 b 的結(jié)果 .如果 e = 0, 則令 c = "+" ,令 d = "0".否則 e ≠ 0,如果 e > 0, 則令 c = "+".否則 e < 0,令 c = "-".令 e = –e.令 d 為由 e 的十進制表示里的數(shù) 組成的字符串(沒有前導(dǎo)零)。令 m 為串聯(lián)五個字符串 s, m, "e", c, 和 d 的結(jié)果 .
  11. 如果 e = p–1, 則返回串聯(lián)字符串 s 和 m 的結(jié)果 .
  12. 如果 e ≥ 0, 則令 m 為 m 的前 e+1 個字符 , 字符‘.’, m 的其余 p– (e+1) 個字符 串聯(lián)的結(jié)果 .
  13. 否則 e < 0,令 m 為 字符串 "0.", –(e+1) 個字符‘0’, 字符串 m 串聯(lián)的結(jié)果 .
  14. 返回字符串 s 和 m 串聯(lián)的結(jié)果 .

 toPrecision 方法的 length 屬性是 1。

 如果用多于一個參數(shù)調(diào)用 toPrecision 方法,則行為是未定義的 ( 見 15 章 )。

 一個實現(xiàn)可以擴展 precision 的值小于 1 或大于 21 時 toPrecision 的行為。這種情況下對這樣的 precision 值,toPrecision 不一定拋出 RangeError 異常 .

數(shù)字實例的屬性

 數(shù)字實例從數(shù)字原型對象繼承屬性,數(shù)字實例的 [[Class]] 內(nèi)部屬性是 "Number"。數(shù)字實例還有一個 [[PrimitiveValue]] 內(nèi)部屬性。

 [[PrimitiveValue]] 內(nèi)部屬性是代表 this Number 對象的數(shù)字值。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號