blogs icon indicating copy to clipboard operation
blogs copied to clipboard

一段画蛇添足的代码 °(°ˊДˋ°) °

Open luokuning opened this issue 10 years ago • 0 comments

前两天因为某个功能写了这么一段代码:

            /*...*/
            var parseStr = function(str) {
                    if (str != null && (typeof str['split'] === 'function')) {
                        var _t1 = str.split(','),
                            i, _t2;
                        for (i = 0; i < _t1.length; i++) {
                            [].splice.bind(_t1, i, 1).apply(_t1, _t1[i].split(','));
                        }
                        _t2 = _t1.filter(function(t) {
                            return t.search(/\S/) > -1;
                        });
                        return _t2;
                    } else {
                        throw {
                            msg: 'parseStr 参数需要是字符串或者字符串对象'
                        }
                    }
                }
                /*...*/

看上去是不是感觉很乱?还有中文逗号是什么鬼?没有类型声明的语言代码看起来确实麻烦,而且还没有注释,毕竟我喜欢写代码不写注释,但是最讨厌别人写代码不写注释:laughing:。开个玩笑,平常写代码的时候建议大家还是多写点注释,否则为了省事最后麻烦的还是自己。

说了这么多,其实当时想要实现的就是对于任何一段字符串,以中英文 (全/半角) 的逗号来分隔成数组,好进行下一步处理,然后才写了这么一段看上去唬人的代码。突然有一天回过头来看代码的时候想起来字符串的split方法是支持正则表达式的,那为何不改用split呢?TC39说split方法的参数要支持正则的形式,于是有了这段代码:

            /*...*/
            var parseStr = function(str) {
                    if (str != null && (typeof str['split'] === 'function')) {
                        var arr;
                        arr = str.split(/,|,/);
                        return arr;
                    } else {
                        throw {
                            msg: 'parseStr 参数需要是字符串或者字符串对象'
                        }
                    }
                }
                /*...*/

所以最开始的那一大坨代码就相当于 str.split(/,|,/) 这一行要完成的功能。感觉自己这一次很好的诠释画蛇添足这个成语的精髓:sweat_smile: !

luokuning avatar Dec 02 '15 01:12 luokuning