【问题标题】:Object has no method 'replace'对象没有“替换”方法
【发布时间】:2012-03-12 05:57:00
【问题描述】:

我正在尝试运行这个函数,它将所有选中的复选框值抓取到一个逗号分隔的字符串中,并将"," 转换为", ",所以它读起来更好。问题是我遇到了一个奇怪的错误:

$('.name_boxes').live('click', function() {
    var all_boxes = $('.name_boxes');
    var all_boxes_values = []
    for (var i = 0; i < all_boxes.length; i++) {
        if (all_boxes[i].checked) {
            all_boxes_values.push(all_boxes[i].value)
        }
    }
    var all_boxes_values_clean = all_boxes_values.replace(/,/g,", ");
    alert(all_boxes_values_clean);
});

控制台错误提示:

未捕获的类型错误:对象 Aaron Ramsey,Aaron Renfree 没有“替换”方法。

我没有收到警告框。

这有点超出我的理解,谁能解释我做错了什么?

【问题讨论】:

  • replace-method 只能用于字符串,不能用于Array-object。创建一个循环来替换 all_boxes_values 中的实际值。

标签: javascript typeerror


【解决方案1】:

all_boxes_values 是一个数组,而不是字符串,因此它没有 replace 方法。

试试

var all_boxes_values_clean = all_boxes_values.join(", ");

如果你坚持执行正则表达式,请先将数组转换为字符串:all_boxes_values.toString()。

【讨论】:

    【解决方案2】:

    虽然alert(some_array) 打印出数组的字符串表示形式,但数组本身并不是字符串。因此,它没有.replace。 alert 被强制转换为字符串,因为警告框只能显示字符。

    不过,您可以使用自定义分隔符简单地加入。 join 是数组的函数:

    var all_boxes_values_clean = all_boxes_values.join(", ");
    

    作为旁注,我推荐console.log 而不是alert,因为它:

    1. 显示实际的对象/数组而不是字符串表示形式(特别适用于对象而不是您使用alert 收到的无用[object Object])
    2. 让您不必每次都关闭弹出窗口
    3. 跟踪其他日志,以便您拥有实际的日志日志

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多