一个JS语法的问题

    //这个&&怎么理解你,是前面的变量为真,则赋值后面的函数吗?
    _blobSlice: $.support.blobSlice && function () {
        var slice = this.slice || this.webkitSlice || this.mozSlice;
        return slice.apply(this, arguments);
    }
阅读 4.8k
5 个回答

&& 和 || 都是短路操作符:

a && b; 当a为真时,结果是b; 当a为假时,结果为a,并且不执行b.
a || b; 当a为假时,结果是b; 当a为真时,结果为a,并且不执行b.

大致是这样哈。

从最简单的开始分析。

var t = a() && b()

引擎会首先计算 a() 的值,如果为假值(包括 false0nullundefined 等等),则将结果赋值给 t,并且不再继续往右执行;如果是真值(包括 true、非零数值、字符串、对象等等),那么就计算 b(),并且把计算结果赋值给 t

var func = support && function () {
  // ...
}

因此,这个表达式的作用就是在 support 为真的时候将一个函数赋值给 func 了。

或运算同理。

//这个&&怎么理解你,是前面的变量为真,则赋值后面的函数吗?
_blobSlice: $.support.blobSlice && function () {
    var slice = this.slice || this.webkitSlice || this.mozSlice;
    return slice.apply(this, arguments);
}

//这个其实不难理解,只要楼主搞明白JS短路现象。就很好理解这段代码。
//这段代码很明显:_blobSlice是个对象的方法,如果执行了它,
//首先要判断$.support.blobSlice的值是否为真,如果为真。
//则把后面的匿名函数赋值给_blobSlice并执行。

是的 = =

var test;

test = {
  a: true && function() {
    return 3;
  }
};

alert(test.a);

简单测试了下,结果是返回那个匿名函数
楼主的想法是正确的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题