“&&”的各种用途有何不同?逻辑运算符?
来自Oliver Steele的Functional.js库。 第4行,“args.length&& arg”:
0 Function.prototype.partial = function(){
1 var fn = this, args = Array.prototype.slice.call(arguments);
2 return function(){
3 var arg = 0;
4 for ( var i = 0; i < args.length && arg < arguments.length; i++ )
5 if ( args[i] === undefined )
6 args[i] = arguments[arg++];
7 return fn.apply(this, args);
8 };
9 };
来自bootstrap.js。 下面第11行,“'悬停'&amp;&amp; this。$ element”:
1 var Carousel = function (element, options) {
2 this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))
3 this.$indicators = this.$element.find('.carousel-indicators')
4 this.options = options
5 this.paused =
6 this.sliding =
7 this.interval =
8 this.$active =
9 this.$items = null
10
11 this.options.pause == 'hover' && this.$element
12 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
13 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
14 }
为什么不在第一个例子中使用+算术运算符?
这是另一个我在grostking中遇到麻烦的例子,来自bootstrap.js的同一个Carousel部分:
this.options.interval
&& !this.paused
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
答案 0 :(得分:3)
嗯,它在任何地方都是相同的运算符,但被程序员用于不同的目的。
第一个代码示例根本没有args.length && arg
,而是等同于(i < args.length) && (arg < arguments.length)
,因为&&
的优先级低于<
。这意味着,“循环直到i
处于或超过参数计数或arg
处于或超过参数计数”。因此,您可以看到+
在此上下文中并不相同。
其他代码示例都利用了逻辑运算符(&&
)在其左侧操作数为false时短路的事实,即它只评估表达式上的表达式如果左边的那个是真的,那就正确。
因此,this.options.pause == 'hover' && this.$element.on(...
只是在暂停选项设置为'悬停'时才附加事件侦听器的简单方法(因为如果不是,则左侧表达式将为false,并且{ {1}}函数不会被调用。)
同样,你发现的最后一个例子只调用on
(并将结果赋给setInterval
)如果所需的间隔是“真”(我想这里通常不为零,但也没有未定义)等等)旋转木马没有暂停。