我正在努力理解此JavaScript行为(javascript n00b警报!!!)。问题的根源是我的代码中的错字,导致了不希望的情况。我想知道的是一定数量的长度。例如,如果其值为100,则答案应为3,如果其5893为1,则答案应为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);
答案 0 :(得分:2)
看起来像是Java行为,即自动将原始值装箱到其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(并获取其返回值)。这是在实际转换为String。
使用Javascript一切顺利