當(dāng)把 Number 當(dāng)作一個(gè)函數(shù)來調(diào)用,而不是作為構(gòu)造器,它執(zhí)行一個(gè)類型轉(zhuǎn)換。
如果提供了 value,返回 ToNumber(value) 計(jì)算出的數(shù)字值(非 Number 對(duì)象),否則返回 +0。
當(dāng)把 Number 作為 new 表達(dá)式的一部分來調(diào)用,它是構(gòu)造器:它初始化新創(chuàng)建的對(duì)象。
新構(gòu)造對(duì)象的 [[Prototype]] 內(nèi)部屬性設(shè)定為原始數(shù)字原型對(duì)象,它是 Number.prototype 的初始值(15.7.3.1)。
新構(gòu)造對(duì)象的 [[Class]] 內(nèi)部屬性設(shè)定為 "Number"。
新構(gòu)造對(duì)象的 [[PrimitiveValue]] 內(nèi)部屬性在提供了 value 時(shí)設(shè)定為 ToNumber(value),否則設(shè)定為 +0。
新構(gòu)造對(duì)象的 [[Extensible]] 內(nèi)部屬性設(shè)定為 true。
Number 構(gòu)造器的 [[Prototype]] 內(nèi)部屬性值是函數(shù)原型對(duì)象 (15.3.4)。
除了內(nèi)部屬性和 length 屬性(值為 1)之外,Number 構(gòu)造器還有以下屬性:
Number.prototype 的初始值是數(shù)字原型對(duì)象。
這個(gè)屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
Number.MAX_VALUE 的值是數(shù)字類型的最大正有限值,約為 1.7976931348623157 × 10308。
這個(gè)屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
Number.MIN_VALUE 的值是數(shù)字類型的最小正有限值,約為 5 × 10-324。
這個(gè)屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
Number.NaN 的值是 NaN。
這個(gè)屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
Number.NEGATIVE_INFINITY 的值是?∞。
這個(gè)屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
Number.POSITIVE_INFINITY 的值是 +∞。
這個(gè)屬性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
數(shù)字原型對(duì)象其自身是 Number 對(duì)象(其 [[Class]] 是 "Number"),其值為 +0。
數(shù)字原型對(duì)象的 [[Prototype]] 內(nèi)部屬性值是標(biāo)準(zhǔn)內(nèi)置 Object 原型對(duì)象 (15.2.4)。
除非另外明確聲明,以下定義的數(shù)字原型對(duì)象的方法是非通用的,傳遞給它們的 this 值必須是數(shù)字值或 [[Class]] 內(nèi)部屬性值是 "Number" 的對(duì)象。
在以下對(duì)作為數(shù)字原型對(duì)象屬性的函數(shù)的描述中,短語“this Number 對(duì)象”是指函數(shù)調(diào)用中的 this 值,或如果 Type(this 值 ) 是 Number,“this Number 對(duì)象”指仿佛是用表達(dá)式 new Number(this value) 創(chuàng)建的對(duì)象,這里 Number 是標(biāo)準(zhǔn)內(nèi)置構(gòu)造器名。此外,短語“this 數(shù)字值”是指代表 this Number 對(duì)象的數(shù)字值,也就是 this Number 對(duì)象的 [[PrimitiveValue]] 內(nèi)部屬性值;或如果 this 是數(shù)字類型,“this 數(shù)字值”指 this 值。如果 this 值不是 [[Class]] 內(nèi)部屬性為 "Number" 的對(duì)象,也不是數(shù)字類型的值,則拋出一個(gè) TypeError 異常。
Number.prototype.constructor 的初始值是內(nèi)置 Number 構(gòu)造器。
可選參數(shù) radix 應(yīng)當(dāng)是 2 到 36 閉區(qū)間上的整數(shù)。如果 radix 不存在或是 undefined,用數(shù)字 10 作為 radix 的值。如果 ToInteger(radix) 是數(shù)字 10,則將 this Number 對(duì)象作為一個(gè)參數(shù)傳給 ToString 抽象操作;返回結(jié)果字符串值。
如果 ToInteger(radix) 不是在 2 到 36 閉區(qū)間上的整數(shù),則拋出一個(gè) RangeError 異常。如果 ToInteger(radix) 是 2 到 36 的整數(shù),擔(dān)不是 10,則結(jié)果是 this 數(shù)字值使用指定基數(shù)表示法的字符串。字母 a-z 用來指值為 10 到 35 的數(shù)字。基數(shù)不為 10 時(shí)的精確算法是依賴于實(shí)現(xiàn)的,然而算法應(yīng)當(dāng)是 9.8.1 指定算法的推廣形式。
toString 函數(shù)不是通用的;如果 this 值不是數(shù)字或 Number 對(duì)象,拋出一個(gè) TypeError 異常。因此它不能當(dāng)作方法轉(zhuǎn)移到其他類型對(duì)象上。
根據(jù)宿主環(huán)境的當(dāng)前語言環(huán)境慣例來格式化 this 數(shù)字值,生成代表這個(gè)值的字符串。此函數(shù)是依賴于實(shí)現(xiàn)的,允許但不鼓勵(lì)它的返回值與 toString 相同。
此函數(shù)的第一個(gè)參數(shù)可能會(huì)用于本標(biāo)準(zhǔn)的未來版本 ; 建議實(shí)現(xiàn)不以任何用途使用這個(gè)參數(shù)位置。
返回 this 數(shù)字值。
valueOf 函數(shù)不是通用的;如果 this 值不是數(shù)字或 Number 對(duì)象,拋出一個(gè) TypeError 異常。因此它不能當(dāng)作方法轉(zhuǎn)移到其他類型對(duì)象上。
返回一個(gè)包含了 -- 代表 this 數(shù)字值的留有小數(shù)點(diǎn)后 fractionDigits 個(gè)數(shù)字的十進(jìn)制固定小數(shù)點(diǎn)記法 -- 的字符串。如果 fractionDigits 是 undefined,就認(rèn)為是 0。具體來說,執(zhí)行以下步驟:
toFixed 方法的 length 屬性是 1。
如果以多個(gè)參數(shù)調(diào)用 toFixed 方法,則行為是不確定的(見 15 章)。
實(shí)現(xiàn)是被允許在 fractionDigits 小于 0 或大于 20 時(shí)擴(kuò)展 toFixed 的行為。在這種情況下,對(duì)這樣的 fractionDigits 值 toFixed 將未必拋出 RangeError。
對(duì)于某些值,toFixed 的輸出可比 toString 的更精確,因?yàn)?toString 只打印區(qū)分相鄰數(shù)字值的足夠的有效數(shù)字。例如 ,
(1000000000000000128).toString() 返回 "1000000000000000100",
而 (1000000000000000128).toFixed(0) 返回 "1000000000000000128".
返回一個(gè)代表 this 數(shù)字值的科學(xué)計(jì)數(shù)法的字符串,它的有效數(shù)字的小數(shù)點(diǎn)前有一個(gè)數(shù)字,有效數(shù)字的小數(shù)點(diǎn)后有 fractionDigits 個(gè)數(shù)字。如果 fractionDigits 是 undefined,包括指定唯一數(shù)字值需要的盡可能多的有效數(shù)字(就像 ToString,但在這里總是以科學(xué)計(jì)數(shù)法輸出)。具體來說執(zhí)行以下步驟:
toExponential 方法的 length 屬性是 1。
如果用多于一個(gè)參數(shù)調(diào)用 toExponential 方法,則行為是未定義的 ( 見 15 章 )。
一個(gè)實(shí)現(xiàn)可以擴(kuò)展 fractionDigits 的值小于 0 或大于 20 時(shí) toExponential 的行為。這種情況下對(duì)這樣的 fractionDigits 值,toExponential 不一定拋出 RangeError 異常 .
對(duì)于需要提供比上述規(guī)則更準(zhǔn)確轉(zhuǎn)換的實(shí)現(xiàn),建議用以下算法作為指引替代步驟 9.b.i :
返回一個(gè)字符串,它代表 this 數(shù)字值的科學(xué)計(jì)數(shù)法(有效數(shù)字的小數(shù)點(diǎn)前有一個(gè)數(shù)字,有效數(shù)字的小數(shù)點(diǎn)后有 precision-1 個(gè)數(shù)字)或十進(jìn)制固定計(jì)數(shù)法(precision 個(gè)有效數(shù)字)。如果 precision 是 undefined,用 ToString (9.8.1) 調(diào)用代替。具體來說執(zhí)行以下步驟:
toPrecision 方法的 length 屬性是 1。
如果用多于一個(gè)參數(shù)調(diào)用 toPrecision 方法,則行為是未定義的 ( 見 15 章 )。
一個(gè)實(shí)現(xiàn)可以擴(kuò)展 precision 的值小于 1 或大于 21 時(shí) toPrecision 的行為。這種情況下對(duì)這樣的 precision 值,toPrecision 不一定拋出 RangeError 異常 .
數(shù)字實(shí)例從數(shù)字原型對(duì)象繼承屬性,數(shù)字實(shí)例的 [[Class]] 內(nèi)部屬性是 "Number"。數(shù)字實(shí)例還有一個(gè) [[PrimitiveValue]] 內(nèi)部屬性。
[[PrimitiveValue]] 內(nèi)部屬性是代表 this Number 對(duì)象的數(shù)字值。
更多建議: