zoukankan      html  css  js  c++  java
  • JS--该死的&&和||

      近段时间搞前端js,零零星星的看了一些框架源码,发现大量存在&&和||,其语法看的我是头冒青烟,也不知道怎么回事,度娘搜吧,现在写下来,以防忘掉。

      

    先来约束一下用词:有一表达式A : expr1 &&(||) expr2,包含左右两个表达式expr1和expr2。

      表达式:

        在javascript中除了false表示假之外,"",undefined,null,0都可以表示假,其他的都表示真,像true,'q',2等等...

      短路:

        对于&&,当 expr1 => false 的时候,A表达式便可end;expr1 => true的时候,要继续看expr2的值,如果expr2 => false,则A表达式为false,否则为true。

        对于||,当 expr1 => true 的时候,A表达式便可end;expr1 => false的时候,要继续看expr2的值,如果expr2 => false,则A表达式为false,否则为true。

      简单规则:

        有一个指针p,用来指示执行A表达式的过程,当p指向expr1的时候,计算expr1的值,如果计算出expr1的值无法使A表达式end,例如 false || true,就将p指针指向expr2。

      当A表达式end的时候,A表达式的值就是指针p指向那一部分。

      例子:

     'a' && 0  => 首先p指向'a',由于'a'=>true,无法end该表达式,指针p指向0,结果就是无论0是真是假,表达式回end,此时指针指向0,也就是说返回值是0。
     false || 3  =>首先P指向false,由于false=>false,无法end该表达式,指针后移,你明白了?无需判断,表达式返回3。
     true || 'e' =>首先p指向true,直接end该表达式,返回值为true.
  • 相关阅读:
    hex string 换转
    TX1 flash backup & restore
    Emgu CV
    sql点滴42—mysql中的时间转换
    sql点滴42—mysql中的数据结构
    thinkphp学习笔记9—自动加载
    thinkphp学习笔记8—命名空间
    thinkphp学习笔记7—多层MVC
    js常见执行方法window.onload = function (){},$(document).ready()
    安装64位php开发环境
  • 原文地址:https://www.cnblogs.com/WreckBear/p/6073654.html
Copyright © 2011-2022 走看看