在日常的工作中,我们会遇到各种各样的运算,赋值运算、对比运算、一元运算、逻辑运算、三元运算、算术运算,可以说在运算是我们前端工作必不可少的内容,而对于运算符以及运算符的优先级我们是否都弄清楚了呢?
一、首先我列出我在学习过程中遇到的新的运算符:
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点和第三点的优先级与运算顺序