遇到一个奇怪的 js 问题

2016-04-20 15:34:01 +08:00
 isbase
注意看变量reg的位置变化




https://gist.github.com/isbaseby/705828a6e9aed2388386d43a1e374e80

```
function filtrate2() {
var newArr = [], reg = /^\s*$/g,
str = "baidu,google, , ,baidu,google,bg";
arr = str.split(',');
for (var i = 0; i < arr.length; i++) {
//var reg = /^\s*$/g;
if (!reg.test(arr[i])) {
newArr.push(arr[i]);
}
}
return newArr;
}

//执行结果 ["baidu", "google", " ", "baidu", "google", "bg"]



function filtrate2() {
var newArr = [], reg = /^\s*$/g,
str = "baidu,google, , ,baidu,google,bg";
arr = str.split(',');
for (var i = 0; i < arr.length; i++) {
var reg = /^\s*$/g;
if (!reg.test(arr[i])) {
newArr.push(arr[i]);
}
}
return newArr;
}

//执行结果 ["baidu", "google", "baidu", "google", "bg"]
```

我觉得是和 js 的作用域有关,但又说不清楚,请各位赐教。
2551 次点击
所在节点    JavaScript
7 条回复
Niris
2016-04-20 15:50:54 +08:00
isbase
2016-04-20 16:08:22 +08:00
@Niris Thanks
w88975
2016-04-20 16:46:45 +08:00
function filtrate2() {
var newArr = [], reg = /^\s*$/g,
str = "baidu,google, , ,baidu,google,bg";
arr = str.split(',');
for (var i = 0; i < arr.length; i++) {
if (!reg.test(arr[i])) {
newArr.push(arr[i]);
}
reg.lastIndex = 0;
}
return newArr;
}
Arrowing
2016-04-20 17:10:07 +08:00
arr = str.split(','); 导致的,这里的 arr 是全局对象下的 arr
前面一行最后面是分号,不是逗号!!!!
Arrowing
2016-04-20 17:11:50 +08:00
啊,看错题了,忽略上一条 0.0
Arrowing
2016-04-20 17:26:19 +08:00
1 楼说得对,是因为 lastIndex 被改变了,重新定义的 reg 对象又初始化了 lastIndex
isbase
2016-04-20 17:37:37 +08:00
@Arrowing 这个细节没注意到
@w88975

Thanks

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/272538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX