类似的问题还有'a'与String('a')等,求解释
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
从原型角度考虑呢,1.__proto__会报错,Number(1).__proto__不会报错
Number不加new调用是转换函数,如果是Number实例则直接返回,否则转换成等价的Number表示形式。
我这样理解的。1 是常量;Number(1)是 调用Number(1)的返回值。
在控制台打1 === Number(1) 也是true然后和同事讨论了一下, 目前看来唯一的区别就是var a = 1 是一个常量, 而Number(1) 是一个函数, 当1 === Number(1) 做判断的时候也是拿Number的执行结果进行对比, 所以这就是根本的区别
当Number被调用时,如果有参数,就会对参数执行toNumber方法toNumber方法被调用时,如果参数是数字,直接返回参数(不经过转换).所以如果Number被调用时参数是数字,其实相当于
function Number(arg){ return arg }
从原型角度考虑呢,1.__proto__会报错,Number(1).__proto__不会报错
Number不加new调用是转换函数,如果是Number实例则直接返回,否则转换成等价的Number表示形式。
我这样理解的。
1 是常量;
Number(1)是 调用Number(1)的返回值。
在控制台打1 === Number(1) 也是true
然后和同事讨论了一下, 目前看来唯一的区别就是
var a = 1 是一个常量, 而Number(1) 是一个函数,
当1 === Number(1) 做判断的时候也是拿Number的执行结果进行对比,
所以这就是根本的区别
当Number被调用时,如果有参数,就会对参数执行toNumber方法
toNumber方法被调用时,如果参数是数字,直接返回参数(不经过转换).
所以如果Number被调用时参数是数字,其实相当于