Open haizhilin2013 opened 5 years ago
包装对象是用来处理基础类型数据的对象,使得字符串、布尔值等变量可以直接调用方法,在对字符串、布尔值进行方法调用的时候,js引擎会自动创建一个包装对象,将操作的值作为原始值,这一过程是隐式的。但是数字类型除外,想要调用数字对象的方法必须显示创建一个Number对象,否则报类型错误。 例如 "a".slice(0) 可以,但是 10.toString(2) 不可以,应该写成 new Number(10).toString(2)
10..toString(2)
works, which is just a syntax issue.
@DarthVaderrr
10.toString(2)报的是Uncaught SyntaxError: Invalid or unexpected token
,这是词法分析出错而不是类型错误。错误原因在于js编译器将.
视为小数点而非点运算符,由于小数点后出现了非数字字符故而被视为无效的token。
更深层的原因在于js中只存在IEEE 754
规范的双精度数字,并没有整数这一类型,出现在数字之后的第一个.
会被看作是小数点。
Workaround
对象是JavaScript语言最主要的数据类型,三种原始类型的值――数值、字符串、布尔值――在一定条件下,也会自动转为对象,也就是原始类型的“包装对象”(wrapper)。 所谓“包装对象”,指的是与数值、字符串、布尔值分别相对应的Number、String、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象
第128天 说说你对js包装对象的理解