log打印函数定义,以及函数期望的输出

console.log prints function definition, along with function expected output

本文关键字:函数 期望 输出 打印 定义 log      更新时间:2023-09-26

我写了以下代码:

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()函数输出后跟函数定义的结果,而不是它的唯一结果。

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;
};

不要使用for in来遍历数组的元素,您列出了对象属性,包括继承的属性(其中包括您添加的函数)。

改变
for(var j in this) {

for(var j=0; j<this.length; j++) {

From MDN, Array迭代和for…in:

数组索引只是具有整型名称和的可枚举属性在其他方面与一般对象属性相同。没有保证……In将返回任何特定的索引order和,它将返回所有可枚举的属性,包括那些.

还要注意,向不拥有的对象(特别是本机对象)添加意想不到的函数被认为是不好的做法,并且这些函数看起来毫无用处:使用line_arr.join(";")的join可以得到相同的结果。