&& amp;和& amp;& amp;逻辑运算符?

时间:2014-08-18 16:56:40

标签: javascript logical-operators

“&&”的各种用途有何不同?逻辑运算符?

来自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))

1 个答案:

答案 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)如果所需的间隔是“真”(我想这里通常不为零,但也没有未定义)等等)旋转木马没有暂停。