最大安全数
JavaScript的Number类型为双精度 IEEE 754 64 位浮点类型。它的最大安全数是Number.MAX_SAFE_INTEGER
Number.MAX_SAFE_INTEGER // 9007199254740991 - 16位数字
Number.MAX_SAFE_INTEGER === Math.pow(2,53)-1 // true
如果数字超过了JavaScript的最大安全值,在转化成字符串的时候可能会出问题。
举例:
'232493080146659329'.length // 18
String(232493080146659329) // 232493080146659330
模板
如何正确的转化呢,如果出现了大数?可以考虑使用模板。
ES6新增了模板的概念。用模板来转换是对的。
`232493080146659329` // 232493080146659329
在JS中,可执行的只有语句或表达式吗?肯定也不是,现在说的模板也算是一种特殊的可执行结构。
模板的语法是:
let name = 'juejin'
console.log(`${name}`) // juejin
在大括号内部,可以是任何语句或表达式。
再接着刚才说的可执行结构,还有哪些呢?
参数列表应该也算,很特殊,当函数调用的时候,参数间会有对应的映射关系进行匹配,ES6中还新增了缺省参数和给参数赋默认值等扩展参数功能。
还有种情况,如下:
let obj = {
a: 1,
b: 2
}
let {a, b} = obj
这种赋值模板,左操作数的标识符属性和由操作数的对象中属性进行映射赋值。
再看看模板的原理,有人说,它是上述说的几种甚至更多的这些可执行结构的集大成者。它本身是一个特殊的可执行结构,它调动了包括引用、求值、标识符绑定、内部可执行结构存储,以及执行函数调用在内的几乎全部能力。或许是这样,但这种特殊的可执行结构或其他的东西在一门语言中不宜过多,这也是容易产生坏味道的来源。