一、算数运算符 + - * / %(取余符号)
计算机进行自动数据类型转换:不同数据类型之间没有办法进行运算,将数据转成同一数据类型,再进行计算。
- 其中一个操作数是字符串,运算符是+号,别的数据类型转换成字符串,两个字符串会拼接起来。
alert('hello' + 100);//hello100
alert('hello' + true);//hellotrue
alert('hello' + NaN);//helloNaN
alert('hello' + undefined);//helloundefined
alert('hello' + 'de');//hellode
- 任何数据和字符串做+以外的操作,那么字符串要先转成数字再去进行运算。(100 - "20"结果为80)
-
如果字符串是一个纯数字字符组成的字符串,转成对应的数字;
-
如果字符串中含有除数字外的字符,转成NaN, NaN和任何数据运算都是NaN ;
alert(100 - '20');//相当于100-20 结果为80
alert(100 -"20a");//'20a'转换成数字为NaN,所以结果为NaN
- 除字符串以外的数据,进行算术运算的时候,先转成数字,再进行运算
alert(10 + true);//true=>1
alert(10 +false); //false=>0
alert(100 - NaN); //结果NaN
alert(100 -undefined);//结果NaN
alert(100 -null); //结果100 null=>0
注意:
<1>计算机不会进行小数运算
<2>在js中除数能为0
alert(0.8-0.1)
alert(10 / 0);//Infinity
alert(-10 / 0);//-Infinity
Infinity是一个数字,可以跟数字运算 ,结果总是无穷大。
二、 关系运算符 < > <= >= == != === !==
- 判断的结果绝对是布尔值
- 不同数据类型在进行比较的时候所遵循的规律:
(1) 两个操作数都是数值,则数值进行比较。
(2)两个操作符都是字符串,则比较两个字
符串对应的字符编码值。ASCII码表是电脑内部每一个字符对应编码得一张表。
①如果是两个单个字符进行比较,直接进行比较ASCII码值。
②逐位进行比较,直到比较出大小 得到结果。
“abcd” < “ad” : a相同 , b为98, d为100, 所以结果为true.
(3)两个操作数有一个是数值,则将另一个转化为数值,再进行数值比较。
1 == true //true转成数字是1,false转成数字是0,比较结果是true
10 == "10" //结果是true
(4)NaN, ==返回false,!=返回true,且NaN与自身不等。
alert(10 == "10a" );//false
alert(10 != "10a");//true
alert("10a" == NaN);//false
-
=== 恒等 必须数字和数据类型都相同,才返回true
注意:Number(null)是0;Number(undefined)是NaN; 但是null == undefined是true.
三、 逻辑运算符 && || !
-
与运算:
&& (表达式1 && 表达式2 ) 只有当两个表达式都为true时,整个表达式才为真。 注意短路操作:只要左边一个为假,整个表达式就为假,不会再运行右边的代码。比如 10<5 && alert(num); 不会报未声明变量num的错误,因为右边不执行。
-
或运算:
|| (表达式1 || 表达式2) 只有当两个表达式都为false时,整个表达式为假。 (同样表达式1为真的话就会不在运行表达式二,直接得出整个表达式为true)
-
非运算:
!表达式 将表达式的数据类型转换为布尔值(非0即真,非空即真),然后再取反。
四、一元运算符 ++ - -
- a++:
对原来变量进行加1操作 ,先取a得值作为a++表达式得值 ,再对a加一
- ++a:
对原来变量进行加1操作,先对a加一,再将a的值作为++a的表达式。
var a = 5;
alert(a++);//5
alert(++a);//7 上一语句先将a的值作为a++的值输出,再对a加一变成6,此句将a加一变成7,再讲a得值7作为++a的值输出。
- a- - 、 - -a
对原来变量进行减1操作
五、 赋值运算符 基本 = 复合+= -= *
“=” 将等号右边的值赋值给等号左边的变量:
var num = 10 + 20;
alert(num); //结果是30
“+=” : num = num + 9 => num += 9