逻辑符的运算优先级表(根据优先级从大到小排列)

优先级    运算类型    关联性    运算符
19    圆括号    n/a    ( … )
18    成员访问    从左到右    … . …
    需计算的成员访问    从左到右    … [ … ]
    new (带参数列表)    n/a    new … ( … )
17    函数调用    从左到右    … ( … )
    new (无参数列表)    从右到左    new …
15    逻辑非    从右到左    ! …
    一元加法    从右到左    + …
    一元减法    从右到左    - …
    前置递增    从右到左    ++ …
    前置递减    从右到左    -- …
    typeof    从右到左    typeof …
    void    从右到左    void …
    delete    从右到左    delete …
14    乘法    从左到右    … * …
    除法    从左到右    … / …
    取模    从左到右    … % …
13    加法    从左到右    … + …
    减法    从左到右    … - …
12    按位左移    从左到右    … << …

11    小于    从左到右    … < …
    小于等于    从左到右    … <= …
    大于    从左到右    … > …
    大于等于    从左到右    … >= …
    in    从左到右    … in …
    instanceof    从左到右    … instanceof …
10    等号    从左到右    … == …
    非等号    从左到右    … != …
    全等号    从左到右    … === …
    非全等号    从左到右    … !== …
9    按位与    从左到右    … & …
8    按位异或    从左到右    … ^ …
7    按位或    从左到右    … | …
6    逻辑与    从左到右    … && …
5    逻辑或    从左到右    … || …
4    条件运算符    从右到左    … ? … : …
3    赋值    从右到左    … = …
… += …
… -= …
… *= …
… /= …
… %= …
… &= …
… ^= …
… |= …

总结:

   1、赋值操作排在所有的比较最后,(num == 1)里的内用最优先运算。
   2、成员访问的优先级在,()运算之后,在其他的运算之前。
   3、函数的执行,在其他比较和运算符之前之前。
   4、判断的优先级也在赋值 = 号的最前边。
   5、逻辑与 和 逻辑或 要在左右两边的运算完成以后,在进行 逻辑与  和 逻辑或 比较。

这里是运算优先级的例子

    var  obj = 1==1;
    // console.log(obj);
    var obj2 = 1>2;
    var obj3 = 3*2;
    var obj4 = !1 == 0; // 先运算 !1(1的取反),然后再和  == 0 ,进行比较,把比较的结果值赋给obj4

    // 特殊例子
    var i = 0;
    var obj5 =  ++i; // 前置型递增,就是将i的值i本身再进行相加,然后再赋值给obj5
    var obj6 =  i++;// 后置型递增,就是将i的值先赋值给obj5,然后i本身再进行相加
    console.log(obj6);

    // 函数运算的优先级
    var objOne = {
        name: 'zhaoxuan',
        method:(function () {
            return function () {
                this.method = 1;
                return 'fn是一个字符串'
            }
        })()
    };
    // 函数运算执行的优先级,在赋值之前,先进行自执行函数运算,然后再把自执行函数运算的返回值,赋值给obj.method属性。
    var fn = objOne.method();
    console.log(fn);
    // 这里也是,objOne.method();函数的运算优先,先将函数进行运算,然后再把返回值给fn,fn现在的值就是字符串‘fn是一个字符串’


    // 逻辑与 和 逻辑或
    // 逻辑与 比 逻辑或的优先级高。
    console.log(1 && 2 || 0);
    // 先进行 1&&2 运算,然后拿 1&&2的运算结果 2和0进行逻辑或运算 ,也就是(2 || 0)。
    console.log(1 && true || 0);// true
    console.log(1 && 0 || 3 && 1 && true);

    // 逻辑与,两个条件都成立,返回结果才是true
    var num1 = 2;
    var num2 = true;
    if (num1 && num2) {
        console.log('这才是成立的');
    }
    var num3 = false;
    if (num1 && num3) {
        console.log('这是不成立的,所以不打印');
    }

    //  true && false,第一个ture成立则返回第二个,如果,第一个不成立 false&&false,则直接返回第一个
    console.log(false && true);
    
    // 逻辑或  两个或者多个条件其中一个成立,则返回成立true
    if( 1==1 || 2==0) {
        console.log('这种或就成立的,因为1==1成立了');
    }
    // 如果两个都不成立,则就返回false
    if( 1==3 || 2== 3) {
        console.log('因为两个都不成立,所以这里面的不打印');
    }

折丹
139 声望9 粉丝

debug