JS重点之运算符以及运算符优先级

JavaScript022

JS重点之运算符以及运算符优先级,第1张

JavaScript中的运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符执行。例如,乘法的执行先于加法。

算数运算符:

加+,减—,乘*,除/,求余%,加加++,减减——,

加减乘除求余运算与数学上的用法完全一样。

不过,加号+还有连接字符串的作用,其他运算符还可以将字符串数字转换成数值型,参见 JavaScript中数据类型转换总结 中的隐式转换部分。

++,——分为前置和后置,前置表示在使用该变量之前加/减1,后置表示在使用之后加/减1。

逻辑运算符:

1.&&: 与运算, 当与运算的两个内容都为true的时候,结果为true,只要有一个内容为false,结果都是false,&&可以读作“并且”

2.||: 或运算, 当或运算的两个内容都为false的时候,结果为false,只要有一个内容为true,结果都是true,|| 可以读作“或者”

3.!:非运算, 取反运算,当内容为true时,取反结果为false,当内容为false时,取反结果为true

补充:

&&与||的其他用法

&&

如果两个操作数都不是布尔类型

且两个数值转换成布尔类型都是true,返回第二个操作数

如果有一个操作数转换成布尔类型是false,返回这个数

var b=undefined&&null

console.log(b)

返回undefined

||

如果两个操作数都不是布尔类型

第一个数转换成布尔类型为true,则不往下看,返回第一个数

如果第二个数转换成布尔类型为true,则返回第二个数值。

比较运算符:

== 相等操作符

如果两个操作数相等,则返回 true。

!= 不相等操作符

如果两个操作数不相等,则返回 true。

这两个操作符都会先转换操作数(通常称为强制转型),然后再比较它们的相等性。在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则:

1、 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为 0,而true 转换为 1;

2、如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;

3、 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法,用得到的基本类型值按照前面的规则进行比较;

这两个操作符在进行比较时则要遵循下列规则。

1、 null 和 undefined 是相等的。

2、 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值。

3、 如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true。重要提示:

即使两个操作数都是 NaN,相等操作符也返回 false;因为按照规则, NaN 不等于 NaN。

如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,

则相等操作符返回 true;否则,返回 false。

下表列出了一些特殊情况及比较结果:

=== 全等操作符

在两个操作数未经转换就相等的情况下返回 true。即数值和类型都相同。

var result1 = ("55" == 55)//true,因为转换后相等

var result2 = ("55" === 55)//false,因为不同的数据类型不相等

!== 不全等操作符

在两个操作数未经转换就不相等的情况下返回 true。数据类型不同就不等。

var result1 = ("55" != 55)//false,因为转换后相等

var result2 = ("55" !== 55)//true,因为不同的数据类型不相等

赋值运算符:

=,+=,-=,*=,/=

简单的赋值操作符由等于号(=)表示,其作用就是把右侧的值赋给左侧的变量。

如果在等于号(=)前面再添加乘性操作符、加性操作符或位操作符,就可以完成复合赋值操作。

num = num + 10等同于num += 10

设计这些操作符的主要目的就是简化赋值操作。使用它们不会带来任何性能的提升。

三元运算符:

? :

举个例子:

var max = (num1 >num2) ? num1 : num2

在这个例子中, max 中将会保存一个最大的值。这个表达式的意思是:如果 num1 大于 num2(关系表达式返回 true),则将 num1 的值赋给 max;如果 num1 小于或等于 num2(关系表达式返回 false),则将 num2 的值赋给 max。

位运算符:

JavaScript也有位运算符,需要先转换成16进制数进行运算,在开发中好像还没有用到过,了解一下即可。

javascript 中运算符优先级

js数组遍历某个值求和

一、增

1、push()

可接收任意数量的参数,把它们逐个添加至数组末尾,并返回修改后数组的长度。例如:

2、unshift()

该方法与push()类似,也可接收任意数量的参数,只不过是将参数逐个添加至数组前端而已,同样返回新数组长度。咱们接着上面的例子:

3、concat()

该方法与push()方法有点类似,同样是将元素添加至数组末尾,只不过这个数组已经不是原来的那个数组了,而是其副本,所以concat()操作数组后会返回一个新的数组。具体用法如下:

① 不传参数,返回当前数组副本

② 传递一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中

③ 传递非数组参数,这些参数就会被直接添加到结果数组的末尾

继续接着上面的栗子:

例子中一目了然,原数组保持不变,新数组后面添加了4、5、6三个元素。

4、splice()

前面的三个方法都具有很大局限性,因为不是添加到数组前就是数组后,而splice()就不一样了,它非常灵活和强大。灵活是因为它可以添加元素到数组的任意位置,强大是因为它除了可以添加元素之外还具有删除和替换元素的功能(这个后面会陆续讲到)。

splice()可以向数组指定位置添加任意数量的元素,需要传入至少3个参数: 起始位置、0(要删除的元素个数)和要添加的元素。

依然接着上面的例子继续:

可以看出,splice()与push()和unshift()一样是直接在原数组上修改的。

二、删

1、pop()

与push()方法配合使用可以构成后进先出的栈,该方法可从数组末尾删除最后一项并返回该项。

接着上例:

2、shift()

与push()方法配合使用可以构成先进先出的队列,该方法可删除数组第一项并返回该项。

继续接着上例:

3、slice()

定义和用法

slice() 方法以新的数组对象,返回数组中被选中的元素。

slice() 方法选择从给定的 start 参数开始的元素,并在给定的 end 参数处结束,但不包括。

注释:slice() 方法不会改变原始数组。

该方法同concat()一样是返回一个新数组,不会影响原数组,只不过slice()是用来裁剪数组的,返回裁剪下来的数组,具体用法如下:

4、splice()

好,继续讲这个“万能”的方法。

上面讲到,该方法在添加数组元素的时候需要传入3个以上参数,而其中第2个参数就是用于指定要删除元素的个数的,那时我们传的是数字0。那么,如果单单只需删除元素,我们就只需给splice()传入两个参数,第1个参数用于指定要删除的第一项的位置,第2个参数用于指定要删除元素的个数。

继续上例~~

从索引项为2的位置开始删除4个元素,所以结果为 [-1, 0, 1, 2]。

三、改

这个其实最灵活的方式就是直接使用splice()这个强大的方法了,其实通过以上对该方法的了解,我们大致就能知道使用该方法修改数组元素的基本原理。

原理很简单,就是向指定位置插入任意数量的元素,且同时删除任意数量的元素。

依然继续上例~~

四、查

indexOf()和lastIndexOf()

这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中,indexOf()从数组的开头(位置0)开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找。

例如:

当找不到该元素时,返回 -1 ,lastIndexOf()方法同理。

1 数据类型

<script>

2 引用数据类型

object 对象类型

3 number 数字类型

包含所有的数字(整数,浮点数,正数,负数,极大极小数),Infinity(分母为零),NaN(not a number)

4 string 字符串类型

引号包含的任意文本,单双引号都可以

输出展示

2 比较运算符

<script>

/*

1 比较运算符

比较两个值的大小 返回一个布尔值(true 或 false)

> < >= <= == != === !==

== 等于,只判断数值

===全等,绝对等于,即判断数据类型也判断数值

!= == 取反

!== ===取反

console.log(undefined == null)//true 都没有值

console.log(undefined === null)//false 数据类型不同undefined object

console.log(NaN == NaN)//false

console.log(NaN === NaN)//false

console.log(NaN != NaN)//true

console.log(NaN !== NaN)//true

/

</script>

3 逻辑运算符

<script>

/

2 逻辑运算符

连接多个表达式,返回一个布尔值(true 或 false)

&& 逻辑与 并且所有的表达式都为true,结果才为true,有一个为false结果就为false

|| 逻辑或 或者所有的表达式都为false,结果才为false,有一个为true结果就为true

! 逻辑非 取反表达式为true取反就为true,反之亦然

注意: 逻辑与的优先级大于逻辑或

*/

</script>

逻辑运算符演示

输出到控制台的结果

4 赋值运算符

<script>

/*

3 赋值运算符

= 等号右边的值赋值给左边

+= x += y x = x + y 下同

-=

*=

/=

%= 要的是余数

*/

</script>

<script>

x = 7

y = 3

console.log(x/=y)

</script>

5 算术运算符

<script>

/*

算术运算符

+ - * / %(取余,取模) ++(自增) --(自减)

%(取余,取模) 应用 判断奇偶数、倍数

++ 相当于自己加1 x++ 相当于 x = x + 1

-- 相当于自己加1 x-- 相当于 x = x - 1

+运算碰到字符串,直接进行字符串拼接,返回string类型

- * / %遇到字符串,都转换成number类型进行计算,如果不能转换成数字,则返回NaN,数据类型未number

true转换1 false转换为0

++ --

前++和后++,对于变量自己来说没有区别都是+1

前++ 先赋值 在加1

后++ 先加1 再赋值

/

</script>

<script>

/ var x = 5//number

var y = 2//number

comsole.log(x + y)//7

comsole.log(x - y)//3

comsole.log(x * y)//10

comsole.log(x / y)//2.5

comsole.log(x % y)//1 */

这个你可以理解为缩写。

endFn &&endFn()这个&&最后其实就是判断左右两边是true还是false。

第一步就会去判断左边是否为true。就和if(endFn)等价了。

如果这个条件不成立(即为false)。&&就不会在去执行右边的,

如果条件成立为true,就会执行右边的。

例子:1>3 &&5>1。

1>3为false,就没有执行右边的必要了。