我正在努力理解这种JavaScript行为(javascript n00b alert!!(。问题的来源是我的代码中的拼写错误,导致不希望的情况。我想知道的是某个数字的长度。例如,如果为 100,则答案应为 3,如果为 5893,则答案应为 4,依此类推。为了实现这一点,我所做的只是将数字转换为字符串,然后在字符串上调用.length
。
private getNumberLength(num: number) {
return num.toString().length;
}
在上面的return
声明中,我有错别字,看起来像
return num.toString.length;
结果是没有编译错误,getNumberLength
总是返回1
。我不明白这一点(为什么1
?有人可以帮我理解这一点吗?
如果您愿意,您可以在下面快速测试
var num = 666;
console.log('Length on toString(): ' + num.toString().length);
console.log('Length on toString: ' + num.toString.length);
看起来这是 Javascript 自动将原始值装箱到其 Object 对应项以调用其方法的行为。
该函数看起来是正确的,但要回答您的问题(我不明白反对票(。
toString
是对函数的引用。toString.length
之所以有效,是因为正如Mozilla所引用的那样。
Function.length = length 属性指示函数所需的参数数。
因此,如果您将函数重新声明为
private getNumberLength(num: number, num2: number) {
return num.toString().length;
}
getNumberLength.length
将返回 2。toString.length
将返回 1,因为它只需要一个参数。
参考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length
toString(( 正在调用函数 toString(并获取其返回值(。这是执行到字符串的实际转换。
使用Javascript一切顺利