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

Created on 15 Sep 2019  ·  7Comments  ·  Source: haizlin/fe-interview

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

js

Most helpful comment

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

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

All 7 comments

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) 是一个函数

Was this page helpful?
0 / 5 - 0 ratings