繁体   English   中英

.toFixed函数不适用于js-object

[英].toFixed function doesn't work with js-object

为什么当我想给格式化数字赋变量时显示错误?

 var jsObject = new Object(); jsObject.number = 0; for (i = 1; i <= 10; i++) { jsObject.number += 0.1; console.log((jsObject.number).toFixed(1)); // works and shows right numbers jsObject.number = (jsObject.number).toFixed(1); // TypeError: jsObject.number.toFixed is not a function } 

因为.toFixed()会重新调整字符串,所以您将数字替换为字符串。 简单的日志记录将向您显示正在发生的事情。

 var jsObject = new Object(); jsObject.number = 0; for(i = 1; i <= 10; i++) { jsObject.number += 0.1; console.log(i, "before", jsObject.number, typeof jsObject.number) jsObject.number = (jsObject.number).toFixed(1); console.log(i, "after", jsObject.number, typeof jsObject.number) } 

输出将是:

1 before 0.1 number
1 after 0.1 string
2 before 0.10.1 string
"Uncaught TypeError: jsObject.number.toFixed is not a function",

JavaScript不包含尾随零。 因此,如果需要它们进行输出,最好在输出数字的地方进行。 或唯一的其他选择是在添加之前将其解析为Float Number。

jsObject.number = Number(jsObject.number) + 0.1;
jsObject.number = parseFloat(jsObject.number) + 0.1;

toFixed返回一个字符串,并且字符串没有toFixed方法。 像这样更新您的for循环可解决该问题。

for (i = 1; i < 10; i++) {
    jsObject.number += 0.1;
    console.log((jsObject.number).toFixed(1));
    jsObject.number = parseFloat((jsObject.number).toFixed(1)); // <--
}

此方法返回一个字符串。

https://www.geeksforgeeks.org/javascript-tofixed-function/

返回值:它以字符串表示形式返回一个数字。

因此,它第一次工作,但随后在所有后续时间都失败了,不再是数字。

您可以解析为一个数字,或强制转换为一个数字(例如,通过使用乘法):

for(i = 1; i <= 10; i++) {

    jsObject.number += 0.1;

    console.log( (jsObject.number).toFixed(1) ); // works and shows right numbers

    jsObject.number = 1 * (jsObject.number).toFixed(1); // TypeError: jsObject.number.toFixed is not a 
} 

如评论中所述,您正在用数字的字符串表示形式覆盖数字( toFixed会这样做)。 因此,您必须将字符串重新转换为数字格式。 有很多方法可以正确执行此操作,我更喜欢将其除以1(或乘以)

 var jsObject = new Object(); jsObject.number = 0; for (i = 1; i <= 10; i++) { jsObject.number += 0.1; console.log((jsObject.number).toFixed(1)); // works and shows right numbers jsObject.number = (jsObject.number).toFixed(1) / 1; // TypeError: jsObject.number.toFixed is not a function } 

您需要将从toFixed()返回的string转换为正确的数据类型。

toFixed()返回一个string所以在第二次迭代,它试图调用string.toFixed()这是自不存在toFixed()是不是strings

 var jsObject = new Object(); jsObject.number = 0; for(i = 1; i <= 10; i++) { jsObject.number += 0.1; console.log( jsObject.number.toFixed(1) ); jsObject.number = Number.parseFloat(jsObject.number.toFixed(1)); } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM