在封装方法的时候发现个问题,颠覆我对数组的看法,直接贴代码:
String.prototype.replaces=function(reg,str){
var arr = [];
var newStr= this;
var i= '';
var d;
while((d = reg.exec(newStr))!=null) {
//debugger
try{
//console.log(d)
if(reg.global){
arr = newStr.split(d[0]);
newStr = arr.join(str);
continue
}else{
if(reg.ignoreCase){
console.log(d instanceof Array);
for(var x of d){
console.log(x)
}
}
break;
}
}catch(e){
console.log(e)
}
}
return newStr
}
var s ="我是a,c,a,cc,c,c,cc".replaces(/a/i,'b')
console.log(s);
把上面代码直接贴到控制台就可以测试,问题来了,d这个变量,他到底是array还是object
打印出的d:
console.log(d instanceof Array)得出d是数组,但是用for循环和for of
都只能打印出一个变量,用d[1]访问会报错,d['index']则不会报错反而正确,
如果他是对象数组,则d[1]['index']才会正确吧?
js中并没有真正意义上的数组,你所用的数组是伪数组,实际上是一个对象。
首先你肯定能理解下面这段代码
那么这样你理解起来也没问题了
让我们变得更像数组一点
你完全可以自己写一个数组出来