算数运算符
对非Number类型的值进行运算时,会先转换成Number再进行运算 (除了字符串的加法)
任何值和NaN做运算都得NaN
+:
result = "123"+"456"; //返回123456
//对字符串进行加号的运算会拼成一个新串
//任何数据类型和字符串做加法,都会先转换成字符串再运算
a = true + "hi"; //返回truehi
b = “1”+ 123; //返回1231
//可以利用加法进行数据类型的转换,只需要加上一个空串(隐式类型转换)
var a = 12;
a = a + "";
可以用-、/、*将其他数据类型转换成Number (隐式类型转换)
var d = "23";
d = d - 0; //返回Number 23
一元运算符(+、-)
//可以对其他数据类型使用+,来使其转换成number
var a = true;
a = +a; // 返回1
a = "18";
a = +a; //返回18
var b = 1 ++"2"+3; //返回6 2前面有两个加号变成了number
自增和自减
- 通过自增可以使变量在自己的基础上增加1
var a = 1;
a++; //原变量立刻自增1
++a;
console.log("a="+a); //返回a=2
//自增分为前++和后++,即++a和a++,无论是前还是后,原变量都会立刻自增1;但是a++和++a的值是不同的
// a是表达式,a++和++a是表达式
var a = 1;
a++;
console.log(a++); //返回1,是自增之前变量的值
++a;
console.log(++a); //返回2,是自增后的值
//如果调用两次,看清楚是在谁的基础上自增
var c = 10;
console.log(c++);
console.log(c++); //返回11,是在前一个c++的基础上自增
var e =20;
console.log(++e);//返回21
console.log(++e); //返回22
var d = 20;
console.log(++d + d++ + d); // 21+22+22
自增和自减差不多
逻辑运算符(!非/ &&与/ ||或)
一、布尔值的逻辑运算
(1)非运算— 对一个布尔值进行取反操作;如果是对非布尔值取反,则会先将数据类型转换成布尔值(可以利用该特点进行隐式转换)
var a = true;
a = !a;
console.log(a); //返回false
a = !!a;
console.log(a); //返回true
// 对非布尔值取反,原理和Boolean()函数一样
var b = 10;
b = !!10; //取反两次
console.log(b); // true
(2)&&与运算— 两个值中只要有一个false就返回false;JS中的“与”是短路的与,如果第一个值是false就不会再看第二个值,直接返回false
(3)||或运算— 两个值中只要有一个值是true则返回true;“或”也是短路的或,如果第一个值是true则不会再检查第二个值
二、非布尔值的逻辑运算
先将其转换成布尔值再进行运算,最后返回原值而不是布尔值
//&&运算
result = 1 && 2;
console.log("result=" + result); // 返回result= 2
// 两个值都是true, 则会返回第二个值
result = 0 && 2;
console.log("result=" + result); // 返回result=0
//如果有false,则返回靠前的false
// ||或运算
result = 1 || 2;
console.log(result); //返回1
//如果第一个值为true,则直接返回第一个值
result = NaN || 2;
console.log(result); //返回2
//如果第一个值是false,直接返回第二个值
赋值运算符
var a = 10; //“=” 可以将符号右侧的值赋值给左侧
a += 5; // +=也是赋值运算符相当于 a = a + 5;
console.log(a); //返回15
// *=、-=等也都是一样的
关系运算符(比较大小)
如果关系成立返回true,不成立返回false
对于非number类型进行比较,先将其转换成Number
console.log(1>true); // false
console.log(1>=true); //true
console.log(1>"0"); //true
//任何值和NaN做任何比较都是false
console.log(10>"hello"); //false, hello先转成NaN
如果符号两侧的值都是字符串时,不会将其转换成Number进行比较,而是分别比较字符串中字符的unicode编码
console.log("a"<"b"); //true
console.log("abc"<"b"); //true
//比较字符编码的时候,是一位一位进行比较,如果满足直接返回true
#unicode编码的使用
(1)在JS中,\u+编码
(2)在HTML的<body>标签中,&#+编码,但是这里的编码是十进制的
相等运算符(==)
如果相等则返回true, 否则会返回false
var a = 10;
console.log(a == 4);// 返回false
如果比较的时候数据类型不同,会先进行自动类型转换,再进行比较。
//一般都是将其他数据类型转换成Number
console.log(true == "1"); //true
//但是如果是null,没有转number
console.log(null ==0); //false
//因为undefined是从null中衍生出来的
console.log(undefined == null); ///true
//NaN不和任何值相等,包括他本身
console.log(NaN == NaN); //false
//可以通过isNaN()函数来判断一个值是否为NaN
var b = NaN;
console.log(isNaN(b)); //true
不相等运算符(!=)和相等运算符一样,也会自动进行类型转换。
全等运算符(===)/ 不全等运算符(!==),基本和相等/不相等运算符的用法一致,但是不会做自动的类型转换。如果两个值的类型不同会直接返回false
条件运算符(三元运算符)
语法:条件表达式?语句1:语句2;
条件运算符在执行的时候,先对条件表达式进行求值(其他数据类型会转换成布尔值),true则执行语句1并返回执行结果,false则执行语句2并返回。
var a = 10;
var b = 20;
a>b? alert("a大"):alert("b大");
//可以用来获取最大值
var max = a>b? a : b;
//如果a>b,则将a赋值给max
//获取abc中的最大值
max = max>c? max : c;