首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跳过JavaScript for循环,没有错误

跳过JavaScript for循环,没有错误
EN

Stack Overflow用户
提问于 2013-04-21 04:26:26
回答 3查看 776关注 0票数 0

我这里有一段JC代码:$

代码语言:javascript
运行
复制
 function Test() {
        var form = $('form').serializeArray();
        var str = "";
        var Price = {};
        var OneUp = 1;
        var NextName = "";
        var PriceIndex = 0
    for (var i = 0, l = form.length; i < l; i++) {
        OneUp = i + 1;
        if (form[i].name.indexOf("_Sel_") != -1) {
            NextName = form[OneUp].name.substring(0, form[OneUp].name.indexOf(":"));
            Price[PriceIndex] = form[OneUp].name.substring(form[OneUp].name.indexOf(":") + 1, form[OneUp].name.length);
            PriceIndex += 1;
            str += form[i].name.replace("_Sel_", "") + ':   <span class="ColorMe">' + NextName + "</span><br/>";
        }
    }

    for (var i = 0, l = Price.length; i < l; i++) {
        Price[i] = parseFloat(Price[i]) + .05;
    }
    var Total = 0.05;
    for (var i = 0, l = Price.length; i < l; i++) {
        Total += Price[i];
    }
    $(".PriceMe").html(Total.toString());
    $(".UpdateMe").html(str);

};

由于没有明显的原因或任何错误,这部分代码将被跳过:

代码语言:javascript
运行
复制
for (var i = 0, l = Price.length; i < l; i++) {
    Price[i] = parseFloat(Price[i]) + .05;
}
var Total = 0.05;
for (var i = 0, l = Price.length; i < l; i++) {
    Total += Price[i];
}
$(".PriceMe").html(Total.toString());

谁能给我解释一下为什么和/或解决我目前的问题。另外,我很抱歉我是一个新手JC程序员,所以你在我的代码中看到的任何风格或其他问题都会很高兴地接受。Thxs.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-21 04:32:27

价格是一个对象({}),因此它没有length属性来遍历您需要执行此操作的对象,例如:

代码语言:javascript
运行
复制
var obj = {};
obj['key'] = 'value';
obj['key2'] = 'value2';
for(var val in obj){
   //val => key
   //obj[val] => value
}
票数 2
EN

Stack Overflow用户

发布于 2013-04-21 04:36:35

此时Price.length是未定义的,因此请使用以下命令:

代码语言:javascript
运行
复制
  for (var i = 0, l = $(Price).length; i < l; i++) {
        Price[i] = parseFloat(Price[i]) + .05;
    }
    var Total = 0.05;
    for (var i = 0, l = Price.length; i < l; i++) {
        Total += Price[i];
    }
    $(".PriceMe").html(Total.toString());

对于访问obj值,您可以使用for(var key in obj)

票数 0
EN

Stack Overflow用户

发布于 2013-04-21 04:51:33

你在var PriceIndex = 0后面忘了一个分号。不需要在for循环中声明数百个变量。您可以简单地使用for (var i = 0; i < Price.length; i++)

如果你一个接一个地声明多个变量,你可以这样做:

代码语言:javascript
运行
复制
var a = 0, b = 1, c = 2;

你不需要一直使用varlength方法仅适用于数组或html元素集合。为了从一个对象中获得属性,你用in关键字循环那个对象,比如这个for (i in object)来访问对象,你可以使用object.property或者object["property"]来访问对象。如果你这样做,object[property]会认为属性是一个变量,并且会搜索它,如果找到了,javascript就会返回这个值,并开始在那个对象中搜索。如果这个值不是字符串,或者在那个对象中找不到这个值,javascript就会返回值undefined

编辑:

表单具有长度属性,因为jQuery在DOM中搜索该元素,并返回一个html element集合,该集合与数组一样具有长度属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16124847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档