JS中IF的逻辑问题

发布于 2022-09-12 04:05:54 字数 600 浏览 25 评论 0

我通过JS调用WordPress的API。

number的值有时候时00,我想把这些值为00的,都变为0,这样就可以求和了。

大概代码如下:

var sum = 0;
for (i = 0; i < postsData.length;  i++) { 
    var x =postsData[i].number;
    if (x === "00") {
       x= 0;
       sum += x;
       } else {sum += x;}
}

但结果是错误的,当number是00时,则不显示求和结果,也没有错误提示.

补充:
求和的代码大概是这样的:

if (sum > 0 ) { document.getElementById("test").innerHTML = sum; }

原始代码比较复杂,是一个Nested loop.
number是字符串。
当number的值都不是两个零时,计算结果正确。
但当number的其中一个值为两个零时,不显示计算结果,也没有错误提示。我感觉是if这块写错了。当一个函数等于某个值时,可以再给这个函数赋予另一个值吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

同尘 2022-09-19 04:05:54
var sumFun = function(postsData_){
    var sum = 0;
    for (var i = 0; i < postsData_.length;  i++) { 
        var x =postsData_[i];
        if (x === "00") {
           x= 0;
           sum += x;
           } else {
           sum += x;
           }
    }
    return sum;
}
var postsData =['00','0','1',00,2,3];//字符串和数字混合,第1个00字符串转成数字0,相加sum还是数值0,第2个为字符串0,那么就转为字符串拼接,后续都是字符串拼接操作
console.log(sumFun(postsData));//001023 字符串
postsData =[00,1,2,3];//都是数字,数值求和
console.log(sumFun(postsData));//001023

+操作符在JS中,有如下规则

  • 当2个操作数都是数字时,执行数值加法操作;
  • 当2个操作数都是字符串是,执行字符串拼接操作
  • 优先考虑进行字符串拼接
  • 如果其中一个操作数为对象,那么就会用调用valueOf方法(日期对象调用toString方法)转成原始类型
  • 原始类型包括字符串,数值,布尔类型,null,undefined,
  • 操作数都是原始值后,如果一个操作数为字符串,那么另一个操作数也转成字符串,进行字符串拼接操作。
  • 否则,2个操作数都将转成数字或NaN,进行加法操作
还不是爱你 2022-09-19 04:05:54
// 如果不考虑 NaN 的存在
// 直接通过 Number 转格式就好了,if 都不需要
sum += x => sum += Number(x)

// 如果需要考虑其他字符导致的 NaN
x = Number(x);
if(!Number.isNaN(x)){
    sum += Number(x)
}
浊酒尽余欢 2022-09-19 04:05:54

按照描述,你已经能确定postsData[i].number一定是数字,及时不是数字类型,也是字符串类型的数字。这样,只要把这个制转换成数字就可以实现你说的功能了,忽略00,将所有的值都转换,确保值一定是数字类型。

var sum = 0;
for (i = 0; i < postsData.length;  i++) { 
    var x =postsData[i].number;
    sum += +x; //+x作用是把字符串转成数字
}

注意知识点,js中字符串转数字最简单的方法,可以直接用+、-实现,由于-会是数值变号,所以建议使用+。

转身泪倾城 2022-09-19 04:05:54

如果想数字求和,其实用Number对象,或者文本转数字parseInt显式转换处理后更好。

var sum = 0;
for (i = 0; i < postsData.length;  i++) { 
    let x =parseIn(postsData[i].number);
    sum += x; 
}
为你拒绝所有暧昧 2022-09-19 04:05:54
sum = eval(postsData.map(v=>v.number).join('+'))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文