fe-interview
fe-interview copied to clipboard
[js] 第153天 你知道1和Number(1)的区别是什么吗?
第153天 你知道1和Number(1)的区别是什么吗?
~~1是原始值。~~ ~~Number(1)是包装对象。~~
var a = 1
var b = Number(1)
a === b
// true
typeof a
// "number"
typeof b
// "number"
var c = Number(1)
b === c
// true
楼下来解答吧
题目改成1 与 new Number(1)的区别是不是更好😄
Number(1) 发生了隐式类型转换
Number(1) 发生了隐式类型转换
這類相關訊息 有推薦系統系的學習資源的嗎?
~1是原始值。~ ~Number(1)是包装对象。~
var a = 1 var b = Number(1) a === b // true typeof a // "number" typeof b // "number" var c = Number(1) b === c // true
楼下来解答吧
你这样用变量存起来再进行是没意义的,因为var a = 1时,你再用访问a,会发生转换的 具体区别就是1是值,1.length是会发生语法错误的;而Number(1)是包装对象,Number(1).length不会发生语法错误,为undefined;类似的,这样去访问Number(1).toFixed()是可以的,证明就是包装对象
@maxiangsai 1.length
会出错是语法层面的,解释器会默认把这个.
号认成为小数点,所以1.length
你可以理解为(1.)length
,当然语法错误啦。而你写成1..length
或(1).length
就不会出错了。这里也有解释
无论是1
还是Number(1)
本质就是一个东西,其结果都是字面量,在你尝试将字面量当成对象并调用其方法时会自动装箱并以这样的形式调用:new Number(1).length
var a = 1 是一个常量, 而 new Number(1) 是一个函数
1.toFixed()会报错,因为js解释器对.的解释发生了歧义导致,而Number(1).toFixed()或者1..toFixed()是正确的。