关于逻辑与、逻辑或的短路问题

172 阅读1分钟

 一、逻辑与

    // 逻辑与
    // 运行结果为1
    // 2 > 3返回结果为flase,由于逻辑与只要遇到false,就可以得出最终结果为false
    // 得到结果后就会停止运行,之后的等式就不会运行了,所以++i没有执行
    var i = 1
    if (2 > 3 && ++i) {
      alert("看打印结果")
    }
    document.write(i)

    // 逻辑与
    // 运行结果为2
    // 2 < 3返回结果为true,由于逻辑与还没遇到false,所以需要继续往后执行,直到遇到第一个false或等式结束,就输出结果
    // 所以2 < 3判断完后,等式会继续往后运行,所以++i执行了
    var i = 1
    if (2 < 3 && ++i) {
      alert("看打印结果")
    }
    document.write(i)

二、逻辑或

    // 逻辑或
    // 运行结果为2
    // 2 > 3返回结果为false,由于逻辑或只要遇到true,就可以得出最终结果为true,
    // 当遇到false时,会继续往后执行,直到遇到第一个ture或等式结束,就输出结果
    // 所以2 > 3判断完后,等式会继续往后运行,所以++i执行了
    var i = 1
    if (2 > 3 || ++i) {
      alert("看打印结果")
    }
    document.write(i)

    // 逻辑或
    // 运行结果为1
    // 2 < 3返回结果为true,由于逻辑或只要遇到true,就可以得出最终结果为true,
    // 所以2 < 3判断完后,等式就不会运行,所以++i没有执行
    var i = 1
    if (2 < 3 || ++i) {
      alert("看打印结果")
    }
    document.write(i)