1.1算数运算符
算术运算符即算术运算符号。是完成基本的算术运算
(arithmetic operators)
符号,就是用来处理四则运算的符号。
算数运算符分为以下
:
加法运算符(+):
var box = 1 + 2 ; // 等于 3var box = 1 + NaN ; //NaN ,只要有一个 NaN 就为 NaNvar box = Infinity + Infinity ; //Infinityvar box = - Infinity + - Infinity ; //-Infinityvar box = Infinity + - Infinity ; //NaN ,正无穷和负无穷相加等 NaNvar box = 100 + '100' ; //100100 ,字符串连接符,有字符串就不是加法var box = ' 您的年龄是: ' + 10 + 20 ; // 您的年龄是: 1020 ,被转换成字符串var box = 10 + 20 + ' 是您的年龄 ' ; //30 是您的年龄,没有被转成字符串var box = ' 您的年龄是: ' + ( 10 + 20 ); // 您的年龄是: 30 ,没有被转成字符串
其中 NaN 是 not a number 的缩写,表示不是一个数; infinity 是无穷大的数。任意数据类型的数值和字符串做 “+” 运算,得到的肯定是字符串
减法运算符:
var box = 100 - 70; //等于30
var box = - 100 - 70 ; // 等于 -170var box = - 100 - - 70 ; //-30 ,一般写成 -100 - (-70) 比较清晰var box = 1 - NaN ; //NaN ,只要有一个 NaN 就为 NaNvar box = Infinity - Infinity ; //NaNvar box = - Infinity - - Infinity ; //NaNvar box = 100 - true ; //99 , true 转成数值为 1var box = 100 - false ; //100 , false 转成数值为 0var box = 100 - '' ; //100 , '' 转成了 0var box = 100 - '70' ; //30 , '70' 转成了数值 70var box = 100 - null ; //100 , null 转成了 0var box = 100 - 'Lee' ; //NaN , Lee 转成了 NaN
乘法运算符:
var box = 100 * 70 ; //7000var box = 100 * NaN ; //NaN ,只要有一个 NaN 即为 NaNvar box = Infinity * Infinity ; //Infinityvar box = - Infinity * Infinity ; //-Infinityvar box = - Infinity * - Infinity ; //Infinityvar box = 100 * true ; //100 , true 转成数值为 1var box = 100 * '' ; //0 , '' 转成了 0var box = 100 * null ; //0 , null 转成了 0var box = 100 * 'Lee' ; //NaN , Lee 转成了 NaN
除法运算符:
var box = 100 / 70 ; //1.42....var box = 100 / NaN ; //NaNvar box = Infinity / Infinity ; //NaNvar box = - Infinity / Infinity ; //NaNvar box = - Infinity / - Infinity ; //NaNvar box = 100 / true ; //100 , true 转成 1var box = 100 / '' ; //Infinity ,var box = 100 / null ; //Infinity ,var box = 100 / 'Lee' ; //NaN
求模运算符(求余数):
var box = 10 % 3 ; //1 ,余数为 1var box = 100 % NaN ; //NaNvar box = Infinity % Infinity ; //NaNvar box = - Infinity % Infinity ; //NaNvar box = - Infinity % - Infinity ; //NaNvar box = 100 % true ; //0var box = 100 % '' ; //NaNvar box = 100 % null ; //NaNvar box = 100 % 'Lee' ; //NaN
JS里面的算数运算规则:
- 任意数据类型和字符串进行加法运算,都是字符串的拼接
- 任意数据类型和NaN进行四则运算,结果都是NaN
- 当true和false参与运算,true转换为1,false转换为0
- 除+运算外,数值类型字符串参与运算,都转换为数值;但是非数值类型字符参与运算,结果都是NaN
- 除+运算外,空字符串转换为0,null转换为0
- 0可以作为除数,得到结果都是无穷大
- 0参与取余运算,得到结果都是NaN
- 任意数据类型和字符串进行加法运算,都是字符串的拼接
- 任意数据类型和NaN进行四则运算,结果都是NaN
- 当true和false参与运算,true转换为1,false转换为0
- 除+运算外,数值类型字符串参与运算,都转换为数值;但是非数值类型字符参与运算,结果都是NaN
- 除+运算外,空字符串转换为0,null转换为0
- 0可以作为除数,得到结果都是无穷大
- 0参与取余运算,得到结果都是NaN
1.2 一元运算符
递增和递减运算符概述:
- 如果需要反复给数字变量添加或减去1,可以使用递增(++)和递减( -- )运算符来完成。
- 在 JS中,递增(++)和递减( -- )既可以放在变量前面,也可以放在变量后面。放在变量前面时,我们可以称为前置递增(递减)运算符,放在变量后面时,我们可以称为后置递增(递 减)运算符。
- 递增和递减运算符必须和变量配合使用。
示例:
前置
++
var num1 = 5 ;++ num1 ; // num1 = 6;var num2 = 6 ;console . log ( num1 + ++ num2 ); // 13
后置++
var num1 = 5 ;num1 ++ ; // num1 = 6var num2 = 6console . log ( num1 + num2 ++ ); // 12
前置和后置的区别:
在没有赋值操作,前置和后置是一样的。但在赋值操作时,如果递增或递减运算符前置,那么前置
的运算符会先累加或累减再赋值,如果是后置运算符则先赋值再累加或累减。运算的时候也是一样
;
其他类型应用一元运算符的规则:
var box = '89' ; box ++ ; //90 ,数值字符串自动转换成数值var box = 'ab' ; box ++ ; //NaN ,字符串包含非数值转成 NaNvar box = false ; box ++ ; //1 , false 转成数值是 0 ,累加就是 1var box = 2.3 ; box ++ ; //3.3 ,直接加 1
注:如果数值字符串使用一元运算符,即使是加法运算,也直接转换为数值。
1.3 赋值运算符
用来把数据赋值给变量的运算符。前面我们使用的
=
其实也是一个运算符,被称之为 赋值(
assignments
)运算符。
在JavaScript中,赋值运算符是“=”,其含义就是把赋值运算符的右边的数值或表达式的值赋给赋值运算符的左边的变量或表达式。
例如:
var t = 5 ; // 其意义就是把数值 5 赋给变量 t;var k = x + y + 5 ; // 其意义就是把表达式 x+y+5 最后的值赋给变量 k 。var box = 100 ;box += 100 ; // 200 , += 代替 box+100
1.4 关系运算符(比较运算符)
比较运算符(关系运算符)是两个数据进行比较时所使用的运算符,比较运算后,会返回一个布尔值(true / false
)作为比较运算的结果。
比较原则:
1.若一个是数值字符串,一个是数值,字符串会自动转换成数值进行比较。
2.
若两个都是数值字符串,则比较首个数字的大小。
3.
布尔值的
false
和
true
会转换成
0
和
1
。
4.
两个操作数都是数值,则数值比较。
5. 两个操作数都是字符串,则比较两个字符串对应的字符编码值。
- 字符转ascii码:用charCodeAt();
在相等和不等的比较上,如果操作数是非数值,则遵循以下规则:
- 一个操作数是布尔值,则比较之前将其转换为数值,false 转成0,true 转成1;
- 一个操作数是字符串,则比较之前将其转成为数值再比较;
- 不需要任何转换的情况下,null 和undefined 是相等的;
- 一个操作数是NaN,则==返回false,!=返回true;并且NaN 和自身不等;
- 在全等和全不等的判断上,比如值和类型都相等,才返回true,否则返回false。
特殊值对比表
:
相等运算符
==
:判断两个操作数是否相等。不同数据类型会自动转换为相等数据类型再做比较。
等同运算符
===
:全等(值和类型),严格意义的相等,两个操作数的值和他们类型须完全一致。
var result = '55' == 55; // true
var result = '55' === 55 ; // false 值相等,类型不相等var result = 55 === 55 ; // true
1.5 逻辑运算符
逻辑运算符通常用于布尔值的操作,一般和关系运算符配合使用,有三个逻辑运算符:
逻辑与
(AND)
、逻辑或
(OR)
、逻辑非
(NOT)
。
- 逻辑与运算符属于短路操作,顾名思义,如果第一个操作数返回是false,第二个数不管是true 还是false 都返回的false。
- 和逻辑与运算符相似,逻辑或运算符也是短路操作。当第一操作数的求值结果为true,就不会对第二个操作数求值了。
- 逻辑非运算符可以用于任何值。无论这个值是什么数据类型,这个运算符都会返回一个布尔值。它的流程是:先将这个值转换成布尔值,然后取反。
注:
JavaScript
虽说也有
&
和
|
,但是这里不是做逻辑运算符,而是位运算符
1.6 三目运算符
三目运算符,又叫三元条件运算符
三元条件运算符其实就是后面将要学到的
if
语句的简写形式。
根据条件在两个语句中执行其中的一个,使用符号 ?:
语法如下:条件表达式?语句
1
:语句
2
参数说明:
- 条件表达式,结果会被作为布尔值处理
- 语句1:如果条件表达式返回true则执行
- 语句2:如果条件表达式返回false则执行
var box = 5 > 4 ? ' 对 ' : ' 错 ' ; // 对, 5>4 返回 true 则把 ' 对 ' 赋值给 box ,反之,把错赋给 box 。// 判断一个年龄是否成年 , 当年龄超过 18 返回 成年 否则返回未成年var age = 19 ;// console.log( age >= 18 ? ' 成年 ' : ' 未成年 ' );var msg = age >= 18 ? ' 成年 ' : ' 未成年 ' ;console . log ( msg );
1.7 运算符优先级
运算符优先级描述了在计算表达式时执行运算 的顺序。先执行具有较高优先级的运算,然后执行较低优 先级的运算。例如,先执行相乘,再执行相加。
运算符比较多,可以合理使用
()
来改变表达式的优先级。
()
的用法和数学中的
()
用法相同,
()
内的会优先计算。