对象没有方法'替换'

时间:2012-02-21 21:51:19

标签: javascript typeerror

我尝试运行此功能,将所有选中的复选框值抓取到以逗号分隔的字符串中,并将","转换为", ",以便更好地读取。问题是我遇到了一个奇怪的错误:

$('.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);
});

控制台错误说:

  

Uncaught TypeError:对象Aaron Ramsey,Aaron Renfree没有方法'替换'。

我没有收到警报框。

这有点超出我的意思,任何人都可以解释我做错了吗?

2 个答案:

答案 0 :(得分:11)

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

但您可以使用自定义分隔符进行简单连接。 join是数组的函数:

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

作为旁注,我建议console.log优先于alert因为它:

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

答案 1 :(得分:4)

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

尝试

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

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