fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

[js] 第153天 你知道1和Number(1)的区别是什么吗?

Open haizhilin2013 opened this issue 4 years ago • 8 comments

第153天 你知道1和Number(1)的区别是什么吗?

haizhilin2013 avatar Sep 15 '19 20:09 haizhilin2013

~~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

楼下来解答吧

NicholasBaiYa avatar Sep 16 '19 00:09 NicholasBaiYa

题目改成1 与 new Number(1)的区别是不是更好😄

encountermm avatar Sep 16 '19 00:09 encountermm

Number(1) 发生了隐式类型转换

mwangshuxin avatar Sep 16 '19 03:09 mwangshuxin

Number(1) 发生了隐式类型转换

這類相關訊息 有推薦系統系的學習資源的嗎?

haoolii avatar Sep 17 '19 02:09 haoolii

~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 avatar Sep 17 '19 06:09 maxiangsai

@maxiangsai 1.length会出错是语法层面的,解释器会默认把这个.号认成为小数点,所以1.length你可以理解为(1.)length,当然语法错误啦。而你写成1..length(1).length就不会出错了。这里也有解释

无论是1还是Number(1) 本质就是一个东西,其结果都是字面量,在你尝试将字面量当成对象并调用其方法时会自动装箱并以这样的形式调用:new Number(1).length

Elity avatar Sep 18 '19 16:09 Elity

var a = 1 是一个常量, 而 new Number(1) 是一个函数

ZindexYG avatar Feb 05 '20 09:02 ZindexYG

1.toFixed()会报错,因为js解释器对.的解释发生了歧义导致,而Number(1).toFixed()或者1..toFixed()是正确的。

xiaoqiangz avatar Jul 21 '22 06:07 xiaoqiangz