Open lizhongzhen11 opened 4 years ago
Number
[[NumberData]]
[[Prototype]]
规范中短语 "this Number value" 表示将方法的 this 值作为参数传给抽象操作 thisNumberValue 调用后返回的结果
初始值为 %Number%
// 有趣 // 和 https://github.com/lizhongzhen11/lizz-blog/issues/96 提到的思考本质是一样的 77.toExponential() // 报错 77..toExponential() // "7.7e+1" 77 .toExponential() // "7.7e+1"
定义 x 为 ? thisNumberValue(this 值)
定义 f 为 ? ToInteger(fractionDigits)
断言:如果 fractionDigits 为 undefined,则 f 为 0
如果 x 不是有限的,返回 ! Number::toString(x)
如果 f < 0 或 f > 100,抛 RangeError 异常
定义 s 为空字符串
如果 x < 0,
如果 x = 0,
否则,
如果 f ≠ 0
如果 e = 0,
设置 m 为 m,"e",c 和 d 的字符拼接
返回 s 和 m 的字符拼接
2.34.toFixed(3) // '2.340' 2.45.toFixed(1) // '2.5' 2.55.toFixed(1) // '2.5' -2.34.toFixed(1) // -2.3 (-2.34).toFixed(1) // '-2.3' 2.34.toFixed(100) // 自己去试下吧
对于某些值,toFixed 的输出可能比 toString 更精确,因为 toString 仅打印足够的有效数字以将数字与相邻数字值区分开。
toFixed
toString
(1000000000000000128).toString() // "1000000000000000100" (1000000000000000128).toFixed(0) // "1000000000000000128"
// 好方便啊,我真第一次知道 123456789 .toLocaleString() // "123,456,789"
该方法的 "length" 属性值为 1.
属于普通对象,属性继承自 Number 原型对象。实例也有 [[NumberData]] 内置插槽。该插槽表示该 Number 对象的 Number 类型值
主要还是浮点运算问题。看算法内部,走第9步:
由于js采用 IEEE-754 64位双精度浮点类型来表示数字,所以先要得出 25.5 的二进制表示,然后再确定最接近的那个整数。这个算起来好麻烦。。。
Daily-Interview-Question 第143题
我第一想法就是用 toLocaleString,不过转换成 . 真没记住。。。
toLocaleString
.
Number 原型对象和实例上的属性
Number
对象;有[[NumberData]]
内置插槽值为 +0[[Prototype]]
内置插槽其值为 %Object.prototype%thisNumberValue(value)
Number
类型,返回 valueNumber
类型Number.prototype.constructor
初始值为 %Number%
Number.prototype.toExponential ( fractionDigits )
定义 x 为 ? thisNumberValue(this 值)
定义 f 为 ? ToInteger(fractionDigits)
断言:如果 fractionDigits 为 undefined,则 f 为 0
如果 x 不是有限的,返回 ! Number::toString(x)
如果 f < 0 或 f > 100,抛 RangeError 异常
定义 s 为空字符串
如果 x < 0,
如果 x = 0,
否则,
Number
值为 x,并且 f 尽可能的小。注意 n 的十进制表示有 f + 1 个数字,n 不能被 10 整除,但是这些标准不一定能唯一确定 n 的最低有效位。如果 f ≠ 0
如果 e = 0,
否则,
设置 m 为 m,"e",c 和 d 的字符拼接
返回 s 和 m 的字符拼接
Number.prototype.toFixed ( fractionDigits )
Number.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
Number.prototype.toPrecision ( precision )
Number.prototype.toString ( [ radix ] )
Number
值的字符串表示。字母a-z用于数值从10到35的数字。精度算法与实现有关,但是,该算法应该是 Number::toString(x) 中指定的算法的概括。Number.prototype.valueOf ( )
Number 实例属性
属于普通对象,属性继承自
Number
原型对象。实例也有 [[NumberData]] 内置插槽。该插槽表示该Number
对象的 Number 类型值为何 2.45.toFixed(1) 是 '2.5' 而 2.55.toFixed(1) 还是 '2.5'?
主要还是浮点运算问题。看算法内部,走第9步:
由于js采用 IEEE-754 64位双精度浮点类型来表示数字,所以先要得出 25.5 的二进制表示,然后再确定最接近的那个整数。这个算起来好麻烦。。。
2020-07-31 补充
Daily-Interview-Question 第143题
我第一想法就是用
toLocaleString
,不过转换成.
真没记住。。。