第十一天H5进阶
运算符
- 一元运算符
+ --> 相当于数学中的正号
- +号不会对数值产生影响
- --> 相当于数学中的符号
- -号可以对当前的数值取反
- 注意:
-当对非数字进行一元加或减运算时,它会自动将值转型为Number类型
所以我们可以通过为一个变量添加一个+的形式将一个变量转换为Number类型
- 例子:
var str = "123"; // string
str = +str; //Number
- 自增和自减
- 自增,表示在原有值的基础自增1,比如:2自增一次以后变成3
-自增有两种:
- 前++ --> ++a;
- 后++ --> a++;
- 自减,表示在原有值的基础自减1,比如:2自减一次以后变成1
-自减有两种:
- 前-- --> --a;
- 后-- --> a--;
- 区别:
- 无论是前置的加加和后置的加加,调用以后原来的变量会立即自增1。
只不过前置的加加和后置的加加的本身的值是不同的,
后置++的值是原变量的值,
前置++的值是变量自增以后的值
- 例子:
例一:
var a = 123;
a++; //123
console.log(a); //124
例二:
var a = 123;
++a; //124
console.log(a); //124
- 自减亦如此,无论是前--还是后--,原变量的值都会自减1,
而前--的值是变量自减以后的值,后--是变量的原值。
var x=4;
x= x++ + ++x +x*10;
//x = 4 + 6 + 60
console.log(x);
- 逻辑运算符
- 非 !
- 使用非运算,可以对一个值进行取反操作。
- 如果对true进行非运算,则会变成false,如果对false进行非运算会变成true。
- 如果对一个非布尔类型的值进行非运算,则会先将其转换为布尔类型,在取反。
所以我们经常为一个非布尔类型的值取两次反,从而将其转换为一个布尔类型
- 例子:
var str = "hello"; //string
str = !!str; // boolean
- 与 &&
- 与可以对与符号两次的值进行与运算
- 如果两侧值都是true,则返回true --> true && true
- 如果两侧的值有false,就返回false --> false && true false && false
- JS中与是短路的与,一旦第一个值为false,则不会在看第二值,第二值如果是一个表达式,则不会执行。
- 对非布尔值也可以进行与运算,它会将非布尔值转换为布尔值,进行与运算,但是它会返回原值,而不是布尔值
- 如果两个值都为true,则返回第二个。
- 如果两个值中有false,则返回靠前的false。
- 或 ||
- 或可以对符合两侧的值进行或运算
- 如果两个值都为false,则返回false --> false || false
- 只要有一个true,则返回true --> false || true true || true
- JS中的或是一个短路的或,如果第一个值为true,则不会在去看第二个值。
- 对非布尔值也可以进行或运算,它会将非布尔值转换为布尔值,再进行或运算,但是它会返回原值,而不是布尔值
- 如果两个值都为false,则返回第二个
- 如果有true,则返回靠前的true
- 关系运算符
- 使用关系运算符可以比较两个变量之间的大小关系
- >
- 判断一个值是否大于另一个值
- >=
- 判断一个值是否大于或等于另一个值
- <
- 判断一个值是否小于另一个值
- <=
- 判断一个值是否小于或等于另一个值
注意:
- 如果是非数字的值进行比较时,它会将它们转换为数字然后在比较
- 如果是两个字符串进行比较,它不会将它们转换为数字,而是比较它们的字符编码
所以这里注意,可以能会出现不可预期的结果,尽量不要比较两个字符串的大小。
- 相等 ==
- 判断符号两侧值是否相等,如果相等则返回true,否则返回false
- 相等会对两侧值进行类型转换,如果转换后相等,它也会返回true
- 不等 !=
- 判断符号两侧值是否不等,如果不等返回true,否则返回false
- 不能也会自动对值进行类型转换,如果转换后相等,他也会返回false
- 全等 ===
- 判断符号两侧值是否全等,和相等类似,只不过全等不会自动转换类型
如果比较的两个值类型不同,直接返回false。
- 全不等 !==
- 判断符号两侧的值是否全不能,和不等类型,只不过全不等不会自动类型转换,
如果比较的两个值的类型不同,直接返回true。
- 注意:
1.undefined值衍生自null值,所以做相等判断时会返回true,全等时会返回false
2.NaN不与任何相等包括它本身,NaN == NaN --> false
- 可以通过isNaN()来判断一个值是否是NaN,
如果是它会返回true,否则返回false。
- 赋值运算符:
=
+=
- 例子:
var a = 123;
a += 5; // a = a+5;
-=
*=
/=
- 例子
var a = 9;
a /= 3 ; //a = a/3;
%=
- 赋值运算符可以将符号右侧的值,赋值给左侧的变量
- 条件运算符(三元运算符,三目运算符)
语法:
表达式1?表达式2:表达式3
- 执行顺序:
1.先执行表达式1,
2.根据表达式1的执行结果来决定执行表达式2还是3
如果表达式1的执行结果为true,则执行表达式2,并将结果返回。
如果表达式1的执行结果为false,则执行表达式3,并将结果返回。
- 优先级:
- 在JS中使用运算符中会有一个执行的顺序问题,优先级高的会先运算,低的后运算。
- 实际上和数学中是基本一致的比如:先乘除、后加减
- 我们有一个运算符的优先级的表,表格中的内容,越靠上优先级越高,优先级越高越先执行
优先级相同的,按照从左往右的顺序执行,但是这个表中的内容不需要记忆,
不清楚的时候,使用小括号来改变优先级!
- 隐式的类型类型转换
- 其他类型转换为String
- 变量 = 变量+"";
- 任何数据和字符串进行加法运算,都会转换为字符串,然后做拼串操作
- 底层也是使用的String()
- 其他类型转换为Number
- 变量 = +变量;
- 使用一元的加会使变量自动转型为Number类型
- 底层也是使用的Number()
- 其他类型转换为Boolean
- 变量 = !!变量;
- 我们可以为一个变量做两次取反操作,来使其变为Boolean
- 底层也是使用的Boolean()