JavaScript中toString与toString()的差异:为何toString.length返回1?
为什么
num.toString.length始终返回1而不是数字的长度? 这是个新手很容易踩的小坑,我给你拆解得明明白白:
核心区别:调用方法 vs 引用方法本身
- 当你写
num.toString()时,你执行了toString方法,得到的是数字转换后的字符串(比如666会变成"666"),然后你取的是这个字符串的length属性——这正是你原本想要的行为,所以结果是3。 - 但当你写成
num.toString时,你并没有调用这个方法,而是直接拿到了toString这个函数对象本身。此时你访问的length是这个函数对象自带的属性,不是字符串的长度。
为什么函数的length是1?
在JavaScript中,函数的length属性表示的是这个函数声明时定义的形参个数。
对于Number.prototype.toString方法来说,它的定义是可以接受一个可选的「基数参数」(比如传入2可以把数字转成二进制字符串,不传则默认用十进制)。也就是说,这个方法的形参列表里有1个参数(即使它是可选的),所以它的length属性值就是1——这就是你看到结果始终为1的原因。
测试代码验证
你给出的测试代码正好能直观体现这个区别:
var num = 666; console.log('Length on toString(): ' + num.toString().length); // 输出3,正确获取字符串长度 console.log('Length on toString: ' + num.toString.length); // 输出1,获取的是函数的形参个数
为什么没有编译错误?
在TypeScript中,Number类型的toString确实是一个函数类型的属性,而函数类型本身就包含length属性,所以编译器认为这个写法是合法的,不会抛出错误。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

