V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
isbase
V2EX  ›  JavaScript

遇到一个奇怪的 js 问题

  •  
  •   isbase · 2016-04-20 15:34:01 +08:00 · 2682 次点击
    这是一个创建于 3134 天前的主题,其中的信息可能已经有所发展或是发生改变。
    注意看变量reg的位置变化






    ```
    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 的作用域有关,但又说不清楚,请各位赐教。
    7 条回复    2016-04-20 17:37:37 +08:00
    isbase
        2
    isbase  
    OP
       2016-04-20 16:08:22 +08:00
    @Niris Thanks
    w88975
        3
    w88975  
       2016-04-20 16:46:45 +08:00   ❤️ 1
    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
        4
    Arrowing  
       2016-04-20 17:10:07 +08:00
    arr = str.split(','); 导致的,这里的 arr 是全局对象下的 arr
    前面一行最后面是分号,不是逗号!!!!
    Arrowing
        5
    Arrowing  
       2016-04-20 17:11:50 +08:00
    啊,看错题了,忽略上一条 0.0
    Arrowing
        6
    Arrowing  
       2016-04-20 17:26:19 +08:00   ❤️ 1
    1 楼说得对,是因为 lastIndex 被改变了,重新定义的 reg 对象又初始化了 lastIndex
    isbase
        7
    isbase  
    OP
       2016-04-20 17:37:37 +08:00 via Android
    @Arrowing 这个细节没注意到
    @w88975

    Thanks
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1058 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:38 · PVG 03:38 · LAX 11:38 · JFK 14:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.