Object has no method 'replace'
-
28-10-2019 - |
Question
I'm try to run this function, which grabs all the checked checkbox values in to a comma separated string, and converts ","
in to ", "
, so it reads better. The problem is I'm getting a strange error:
$('.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);
});
The console error says:
Uncaught TypeError: Object Aaron Ramsey,Aaron Renfree has no method 'replace'.
I'm not getting the alert box.
This is a bit beyond me, can anybody explain what I'm doing wrong?
Solution
Although alert(some_array)
prints a string representation of the array, the array itself is not a string. Thus, it does not have .replace
. alert
is forced to convert it into a string because the alert box can only show characters.
You can simply join using a custom separator, though. join
is a function of arrays:
var all_boxes_values_clean = all_boxes_values.join(", ");
As a side note, I recommend console.log
over alert
because it:
- shows the actual object/array instead of a string representation (especially useful with objects instead of the useless
[object Object]
you receive withalert
) - frees you from closing the popup each time
- keeps track of other logs so that you have an actual log of logs
OTHER TIPS
all_boxes_values
is an array, not a strings and thus it has no replace
method.
Try
var all_boxes_values_clean = all_boxes_values.join(", ");
If you insist on performing regular expressions, convert an array to string first: all_boxes_values.toString()
.