1.当对非number类型的值进行运算:
1>会将这些值转换为Number然后再运算
result = true + 1 //2 result = 2 + null;//2
2>任何值和NaN做运算结果都是NaN
result=2+NaN;//NaN
3> 如果对两个字符串进行加法,则会进行拼块操作
result="123"+"456";//"123456"
4>任何值和字符串相加,都会先将值转化为字符串再拼接
result =123+"1";//"1231"
5>可以将任意数据 + 一个 " "即可将其转为String,这是一种隐式的类型转
换,由浏览器览器自动完成,实际上它也是调用String()函数
var c =123; c=c + " ";//"123" result=1+2+"3";//"33" result="1"+2+3;//"123"
2. 100-true//99 100-"1"//99
3. 2*"8";//16 2*NaN//NaN 2*undefined//NaN 2*null//0
1>任何数做 - * / 运算都会自动转化为Number 可以利用这一特点做隐式的
类型转换 -0 *1 /1来将其转化为Number,原理和Number()函数一样,用
起来更加简单
2>% 取模运算(取余数)
4. 一元运算符,只需要一个操作数
1> + 正号,正号不会对数字产生任何影响
- 负号 ,负号可以对数字进行负号的取反
2>对于非Number类型的值,它会将其先转化为 Number,然后在运算,可
以对一个其他的数据类型使用+,来将其转化为 number,它的原理和
number()函数一样 1+ +“2” +3;//6
5.自增 ++
1>通过自增可以使变量在自身基础上增加1
2>对于一个变量自增以后,原变量的值会立即自增1
3>自增分为后加加(a++) 前加加(++a),无论是哪种,都会立即使原变量的
值自增1,
4>不同的是++a和a++的值不同
a++的值等于原变量的值(自增前的值),
++a的值原 变量新值(自增后的值)
var d=20; d++ + ++d + d;//20+22+22
6.自减 --
1>通过自减可以使变量在自身基础上减1
2>自减分为后减减(a--) 前减减(--a),无论是哪种,都会立即使原变量的值
自减1,
3>不同的是--a和a--的值不同
a--的值等于原变量的值(自减前的值)
--a的值原变量 新值(自减后的值)
7.逻辑运算符
1> !非 所谓非运算就是对布尔值进行取反操作
true变false,false变true
如果对一个值进行两次取反,他不会改变
如果对非布尔值进行取反,则会将其转化为布尔值,然后再取
反,所以我们可以利用该特点,来将一个其他的数据类型转化为
布尔值,可以为任意一个数据类型取两次反,来将其转化为布尔
值,原理和Boolean()函数一样
var a = "hello";
a = !!a; //true
2> && 与 可以对符号两侧的值进行与运算并返回结果
只有两端的值都为true时,才会返回true。只要有一个false就会返回false。
与是一个短路的与,如果第一个值是false,则不再检查第二个值,第一个true会检查第二个
对于非布尔值,它会将其转换为布尔值然后做运算,并返回原值
规则:
1.如果第一个值为false,则返回第一个值 0&&1;//0
2.如果第一个值为true,则返回第二个值 5&&6;//6
3> || 或 可以对符号两侧的值进行或运算并返回结果
只有两端都是false时,才会返回false。只要有一个true,就会返回true。
或是一个短路的或,如果第一个值是true,则不再检查第二个值,第一个false会检查第二个
对于非布尔值,它会将其转换为布尔值然后做运算,并返回原值
规则:
1.如果第一个值为true,则返回第一个值 2||1;//2
2.如果第一个值为false,则返回第二个值 NaN || 1;//1
8.赋值运算符:
= += -= *= /= %=
9.关系运算符
关系运算符用来比较两个值之间的大小关系的
>= > = <= <
如果关系成立则返回true,关系不成立则返回false。
如果比较的两个值是非数值,会将其转换为Number然后再比较。
任何值和NaN作比较都是false
如果比较的两个值都是字符串,此时会比较字符串的Unicode编
码,而不会转换为Number
一位一位进行比较,两位一样,则比较下一位,所以使用
它来对英文进行排序,比较中文没有意义
"11"<"5";//true(第一位先比较即是1和5比较编码大小)
10.相等运算符
==
- 相等,判断左右两个值是否相等,如果相等返回true,如果不等返回false
- 相等会自动对两个值进行类型转换,如果对不同的类型进行比
较,会将其转换为相同的类型然后再比较,转换后相等它也会返回true
!=
- 不等,判断左右两个值是否不等,如果不等则返回true,如果相等则返回false
- 不等也会做自动的类型转换。
===
- 全等,判断左右两个值是否全等,它和相等类似,只不过它不会进行自动的类型转换,
如果两个值的类型不同,则直接返回false
!==
- 不全等,和不等类似,但是它不会进行自动的类型转换,
如果两个值的类型不同,它会直接返回true
特殊的值:
- null和undefined
- 由于undefined衍生自null,所以null == undefined 会返回true。
但是 null === undefined 会返回false。
- NaN
- NaN不与任何值相等,包括它自身 NaN == NaN //false
- 判断一个值是否是NaN
- 使用isNaN()函数
11.条件运算符(三元运算符):
- 语法:条件表达式?语句1:语句2;
- 执行流程:
先对条件表达式求值判断,
如果判断结果为true,则执行语句1,并返回执行结果
如果判断结果为false,则执行语句2,并返回执行结果
如果条件表达式的求值结果是一个非布尔值,会将其转化为布尔值再运算
12 , 运算符
使用逗号可以分割多个语句,一般可以在申明多个变量时使用
var a, b,c;
可以同时申明多个变量并赋值
var a=1,b=2,c=3;
13.运算符优先级:
- 和数学中一样,JS中的运算符也是具有优先级的,
比如 先乘除 后加减 先与 后或
var result 1||2&&3;//1
- 具体的优先级可以参考优先级的表格,在表格中越靠上的优先级越高,
优先级越高的越优先计算,优先级相同的,从左往右计算。
- 优先级不需要记忆,如果越到拿不准的,使用()来改变优先级。
优先级.png