zoukankan      html  css  js  c++  java
  • js 关于运算顺序的问题

    先介绍涉及到的概念

    表达式:js中的短语,解释器在遇到表达式时,会将短语进行计算,然后再参与到运算中,表达式即js中的短语。

    j所有的s代码都是由操作符和表达式组成的,因此除了操作符,其他的都是js中的表达式。

    如1 + 1 这段代码中,+是操作符,前面的1和后面的1都是表达式。

    表达式的分类:

    原始表达式:常量(如π)、变量、直接量(数字、字符串、正则表达式)、关键字

    初始化表达式:初始化对象和初始化数组

    函数定义表达式:

    函数调用表达式:

    属性访问表达式:

    对象创建表达式:使用new操作符创建函数

    优先级:

    优先级由高至低顺序:属性访问、一元操作符、乘除、加减、比较(<,>等)、判断相等(==,===,!==,!=)、与、或、三目运算、赋值运算

    总结:属性访问表达式拥有最高优先级,其次是以操作符(new也属于一元操作符),优先级最低的是赋值运算。

    例子:

    var a = 3;
    ++a == 3;//false

    上面的例子的结果是数值还是布尔类型,取决于运算的优先级,如果先进行判断a == 3,然后再执行++操作,那么结果是 a = 2,如果是先执行++运算,再判断a == 3,结果是false.

    结和性:(优先级相同时看结合性)

    分为左结合和右结合,

    js中遵循右结合的有:一元操作符、三目运算、赋值运算,

    其他所有都是遵循左结合的。

    例子:

    var a = 3;
    !a++;

    上面的例子中有两个操作符,一个是!,另一个是++,这两个都是一元操作符,如果从左至右进行计算,那结果是1;但是一元操作符是遵循右结合的,也就是说这个语句会先进行a++运算,然后再对a进行取非运算,结果是false.

    再来一个例子:

    x = a ? b : c ? d : e ? f : g

    我看到的时候是很懵的,虽然应该不会有人这么写,但是这种写法是可以存在的,所以我们也要知道是怎么执行的,三目运算也是右结合性的,所以上面的例子等价于:x = a ? b : (c ? d : (e ? f : g )) 

    最后是运算顺序:

    js中的表达式包含表达式时,运算顺序是从左至右。

    var a = 1;
    b = a++ + a;
    var  a = 1;
    b = a++ + ++a;

    猜猜上面两个例子中执行后a和b分别等于什么

  • 相关阅读:
    drf规范——请求与响应
    序列化器——Serializer
    drf 安装与配置
    CBV源码——View,APIView
    django restful framework —— Drf 规范一
    Vue——五
    Vue——四
    今日复习
    冒泡排序
    考试总结
  • 原文地址:https://www.cnblogs.com/leraine/p/7610624.html
Copyright © 2011-2022 走看看