javascript - 一个javascipt中for循环的问题
大家讲道理
大家讲道理 2017-04-11 12:13:53
0
4
402

我在《js设计模式和开发实践》书中闭包一章看到如下写法

for(var i=0,type;type=['String','Array','Number'][i++]){
    (function(type){
        Type['is'+type]=function(obj){
            return Object.prototype.toString.call(obj)==='[object'+type+']'
        }
    })(type)        
};

请问这个for循环中的var i=0,type;type='String','Array','Number'是什么意思,我看不太懂

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(4)
左手右手慢动作

for语句括号里不是可以有三种表达式么, 初始化表达式, 控制表达式和循环后表达式, 其中初始化表达式是初始化for循环的时候执行的, 也就是这里的var i=0,type;, 你可以简单的把它看成一个语句, 而控制表达式则是这里的type=['String','Array','Number'][i++], 这里做的就是访问['String','Array','Number']这个数组的第i项并且给i做自增,那么当i > 3之后, 由于 ['String','Array','Number'][i++]undefined, 所以它就不满足继续循环的条件, 然后就会退出了。

不过说实话, 我个人是不喜欢这种风格的for循环的写法的, 就为了所谓的节省语句或者奇淫技巧? 还是说只是习惯而已? 写出这样的代码反而使得代码更难阅读。而且这里循环每执行一次就会重新生成一个数组字面量并去访问里面的值, 很明显这个数组是可以提到外面去从而避免每次都重新生成的。

var types = ['String','Array','Number'], len = types.length;
for(var i=0; i < len; i++){
    // var type = types[i];
    (function(type){
        Type['is'+type]=function(obj){
            return Object.prototype.toString.call(obj)==='[object'+type+']'
        }
    })(types[i])        
};
いいねを押す +0
黄舟

['String','Array','Number']不就是数组嘛…后面的[i++]是数组的 index 啊

いいねを押す +0
黄舟

你可以拆解一下,把

['String','Array','Number']

看作一个变量:

$typeArr = ['String','Array','Number'];

当i从0开始自增时,则$type的值依次为:

$type = $typeArr[0];// 即$type = "string";
$type = $typeArr[1];// 即$type = "Array";
$type = $typeArr[2];// 即$type = "Number";
いいねを押す +0
阿神

也可以写为

        var type=['String','Array','Number'];
        for(var i=0;type[i];i++){
            (function(type){
                Type['is'+type]=function(obj){
                    return Object.prototype.toString.call(obj)==='[object'+type+']'
                }
            })(type)        
            

        }    
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!