我写了以下代码:
Array.prototype.toMyString = function() {
var _new_line_str = '';
for(var j in this) {
(this.length-1) != j
? _new_line_str += this[j]+';'
: _new_line_str += this[j];
}
return _new_line_str;
};
使用以下代码调用上述方法:
_new_line_str = line_arr.toMyString();
console.log(_new_line_str);
但是使用上面写的 console.log(_new_line_str); 打印结果后跟 toMyString()函数的函数定义,而不是唯一的结果。< / p>
Output:
this;is;a;result;of;above;code;;;;23function() {
var _new_line_str = '';
for(var j in this) {
(this.length-1) != j
? _new_line_str += this[j]+';'
: _new_line_str += this[j];
}
return _new_line_str;
};
答案 0 :(得分:3)
不要使用for in
来迭代数组的元素,而是列出对象属性,包括继承的属性(其中包括你添加的函数)。
更改
for(var j in this) {
到
for(var j=0; j<this.length; j++) {
来自MDN,Array iteration and for...in:
数组索引只是具有整数名称的可枚举属性 否则与一般对象属性相同。没有 保证for ... in将返回任何特定的索引 order和它将返回所有可枚举的属性,包括那些 使用非整数名称和继承的名称。
另请注意,将意外函数添加到您不拥有的对象(特别是原生对象)并将此函数看作无用之后,这被认为是不好的做法:您可以使用{{3}获得相同的结果与line_arr.join(";")
。