运算符的优先级

  在日常的工作中,我们会遇到各种各样的运算,赋值运算、对比运算、一元运算、逻辑运算、三元运算、算术运算,可以说在运算是我们前端工作必不可少的内容,而对于运算符以及运算符的优先级我们是否都弄清楚了呢?

一、首先我列出我在学习过程中遇到的新的运算符:

  1、展开运算符...

    这个的学习我是参照这个地址:http://www.jianshu.com/p/c5230c11781b  写的非常好,在这里给他点个赞。获益匪浅

    在这里简单列举一下:不使用apply调用函数、合并数组、拷贝数组、解构赋值、Math.min(...Array)、将NodeList、arguments转换为数组

  2、yied与yied*

    在学习yied的过程中学习了Iterator与generator,在我的理解中yied更像是打了一个断点,返回断点当前状态。

    官方的解释是: 

    •   1.可以没有真正的集合(像Array),只要有相应的生成规则就行。这种情况下,没有内存的限制,因此可以表示无限序列。
    •   2.不调用next(),迭代器不进行迭代的,因此有延迟加载的特性。
    •   3.迭代器,本质上是一个状态机,每个状态下,进行一些操作,然后进入下一个状态或维持状态不变。

          而yield与yield*的区别是:

    yield 的返回值是当作一个元素
            yield* 的返回值是一个 iterator,会依次返回这个 iterator 中的每个元素

  3、按位与、安慰或、安慰异或、按位左移、按位右移、无符号右移

  4、void

    void在前端的应用比较少,有以下几种用法:

    (1)、<a href=‘javascript:void(0);’></a>  取消a连接跳转

      (2)、void function () {} ()  转换函数申明为函数调用,并申明函数的返回值为undefined,并函数自调用

      在这里说明一点,function (){}(),这样调用的会报错,function fn(){}()也会报错,第一个报错是没有函数名,第二个报错是浏览器解析会认为‘}’就结束了,后面的()是另一个语句,而单独的()会直接报错。

    (3)、void(0)返回undefined, 所以void(0)==undefined 、typeof void(0) == undefined、void(0)==void 0;

 二、运算符的优先级

  在这儿我是借鉴该网址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Associativity

  在这里我只列出我新get到的知识,基础的去看,上面的网址:

    1、优先级最高的是();

    2、成员访问(xx.xx或xx[xx])、函数调用、new(带参数列表)属于次一级的优先级  eg: new Math(),且运算顺序是从左往右

    3、new(不带参数列表)属于第三级优先级 eg: new Math

  容易搞混的就是第2点和第三点的优先级与运算顺序

原文地址:https://www.cnblogs.com/fqlGlog/p/7264724.html