如果有条件的& unlider.js中的运算符

时间:2015-01-29 10:42:47

标签: javascript

我刚刚浏览了unslider插件代码,我需要自定义这个插件,因为我想让我的webside carouself响应。

现在当我浏览代码时,我发现了以下内容:

o.autoplay && setTimeout(function() {
                if (o.delay | 0) {
                    _this.play();

                    if (o.pause) {
                        el.on('mouseover mouseout', function(e) {
                            _this.stop();
                            e.type == 'mouseout' && _this.play();
                        });
                    };
                };
            }, o.init | 0);

我真的没有在javascript中看到过类似的内容,上面是if语句吗?

我对上述内容的解释如下:

if(o.autoplay){
 setTimeout(function() {
                    if (o.delay | 0) {
                        _this.play();

                        if (o.pause) {
                            el.on('mouseover mouseout', function(e) {
                                _this.stop();
                                e.type == 'mouseout' && _this.play();
                            });
                        };
                    };
                }, o.init | 0);

} // end if 

这是我自己能做的最好的事情,现在我也尝试逐一理解代码的每个组成部分,我通过了&&和运算符,我理解setInterval函数的工作原理。

但没有在线,我看过&&运算符按照它在这里使用的方式使用。

总结我的问题,这个o.autoplay &&在setTimeOut函数之前做了什么?这是某种设计模式吗?

编辑::

为什么o.init | 0参数为setTimeout函数?我理解o.init被传递,因为它是一个用户定义的值发送到插件,但为什么| 0?请解释 。

谢谢。

亚历山大。

1 个答案:

答案 0 :(得分:1)

两个片段都做同样的事情。该插件的创建者只使用o.autoplay && setTimeout()作为简写符号。这是一个品味问题,但简写符号的缺点是它只适用于个别陈述。您无法将其用于块(这就是代码还包含if语句的原因)。

所以你可以这样做:

o.autoplay && setTimeout();

但是如果您需要多个语句,则需要if块:

if (o.autoplay) {
    setTimeout();
    something();
    something_else();
    another_thing();
}