You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 11:22:49