运算符
操作符:通过运算符可以对一个值或多个值进行运算,并获取运算的结果。
// typeof 也是一个运算符,可以获得一个值得类型
var a = 123;
var res = typeof a;
console.log(res); // number
//Ta可以返回 number string boolean undefined object
算数运算符:
用于计算:不会对原变量进行影响,要通过返回值
- 任何值做 - * / 运算时都会自动转换成Number类型(为一个值-0,*1,/1,做类型转换)
1。加法运算(+)
var a = 666;
res = a + 1;
console.log(res); // 667
//对非number类型的值会先行转换
res = true + 1; // 2
res = true + false // 1
res = 2 + NaN; // NaN 任何值和NaN做运算都是NaN
//与字符串的特殊情况
res = '123' + '456'; // 如果字符串进行加法,进行拼接字符串
res = 123 + '1'; // 1231 任何值和字符串做加法,先将任何值转换为字符串在做加法
res = true + 'hello'; //truehello
res = 123 + ''; // '123' 将数字转换成字符串(隐式的类型转换)实际上也是调用了String()函数,String(),toString()
res = 1 + 2 + '3'; // 33
res = '1' + 2 + 3; //'123'
2.减法运算(-)
res = 100 - 5; // 95
res = 100 - true; // 99
res = 100 - '1'; //99 除了加法中字符串,其他都会转换成number
3.乘法运算(*)
res = 2*2; //4
res = 2 * 8; //16
res = 2 * undefined; // NaN
res = 2 * null ; // 0
4.除法运算(/)
res = 4 / 2; //2
5.取模运算(%)【取余数】
res = 9 % 3; // 0
一元运算符
只需要一个操作数,也就是一个值
- 对其他的数据类型使用 + 将其转换为 number,原理和number()函数一样
var a = 12;
a = +a; // 正号不会对数字产生影响
console.log(a)
a = -a; // -12 对数字进行负号的取反
a = true;
a = -a; // -1
a = '18';
a = -a; // -18
res = 1 + '2' + 3; //'123'
res = 1 + +'2' + 3; //6
自增和自减运算符
自增:
-
通过自增可以使变量在自身的基础上增加 1 ++
-
对于一个变量自增以后,原来的变量会增加一,影响到原变量
-
不管是前++ 还是后++ 都会使原变量立即自增
var a = 1; a++; //后++ 1 console.log(a); //2 var a = 1; ++a; //前++ 2 console.log(a); //2 //不同点 a : 变量 a++ :表达式 a++ 的值等于原变量的值 ++a 的值是自增以后的值 var a = 10; a++; //10 在10的基础上自增 console.log(c++); //11 第二个在11的基础上自增 var a = 10; console.log(++a); //11 console.log(++a); //12 var a = 10; var res = a++ + ++a + a; // 34; ----------10----12----12--= 34 var a = 10; a = a++; //11
自减:
- 通过自减可以使变量在自身的基础上减1
var a = 10;
a--; //10 变量的原值
--a; // 8 变量的新值
逻辑运算符
布尔值的情况
三种逻辑运算符 !(非) &&(与) ||(或)
- !:用来对一个值进行非运算(利用 !!a 进行转换布尔值,隐式类型转换)
!
var a = true;
a = !a; // 要有返回值
console.log(a); // false
var a = true;
a = !!a; // true
var a = 10;
a = !a; // false
- && :可以对符号两侧的值进行与运算并返回结果(只有两个都为true才会返回true)[找false]
var res = true && true; // true
res = true && false; // false
res = false && false; // false
true && alert("hello"); // 会执行
false && alert('hello'); //只要第一个为false就不会看第二个值
- || :两个都是false才返回false,只要有一个true就会返回[找true] 短路
var res = false || false; // false
res = true || false; // true
res = false || true; // true
res = true || true ; //true
true || alert('hello'); //不会找到第二个
false || alert("hello"); //没找到true就继续往下找,执行
非布尔值的情况:
- 先将其转换成布尔值,运算之后,在返回原值
&&
- 如果第一个值为false直接返回第一个值(找false)
- 如果第一个值为true,则直接返回第二个值
var res = 1 && 2; // 都是true的状态下,则返回后面的值
res = 0 && 2; // 0
res = NaN && 0; // NaN 都是false的情况,返回前面的值
||
- 如果第一个true直接返回第一个值 (找true)
- 如果第一个为false,直接返回第二个值
var res = 1 || 2; // 1
var res = 1 || NaN; //1
var res = NaN || 1; //1
赋值运算符
= : 将右侧的值赋值个左侧的变量
var a = 10;
a = a + 5;
a += 5; // a = a+5
a -= 5;
a *= 5;
a /= 5;
a %= 5;
关系运算符
通过
关系运算符比较两个值之前的大小关系
- 如果关系成立返回true 否则返回 false
var res = 3 > 2; // true
res = 3 > 4; //false
res = 3 >= 3; // true
res = 1 >= true; // true
res = 1 > "0"; // true
res = 1 <= 'h'; //false 先将字符串转换成数字 NaN任何与NaN比较都是返回false
res = 'a' < 'b'; // true 如果两端都是字符串,不会准换为数字进行比较,指挥比较Unicode字符编码
res = 'abc' <'b'; // true 一位一位进行比较,如果两位一样,则比较下一位
res = '111111' <'3'; // 1的unicode与3的unicode编码比较
res = +'111111' < '3' // false 这样借助一元运算符进行比较就可以了
unicode的应用
可以使用unicode里面的图形显示在html上
<span>😻</span> //里面是十进制
document.write('<span>😻</span>')#可以在浏览器上做个测试
相等运算符
- undefined衍生自null
- NaN不和任何值相等,包括本身
- 通过isNaN() 函数判断变量里面是否为NaN
- 使用 != 做不相等
- === 全等 用来判断两个值是否全等,不会做自动类型转换
- !== 不全等 类似全等
var a = 10; // 赋值运算符
console.log(a == 4); //false
console.log('4' == 4); //true
console.log(true == '1'); // true 将字符串和布尔值都转换成1
console.log(null == 0); //false null没有转成number
console.log(null == undefined); // true
console.log(10 != 4); // true
console.log('1' != 1); // 不相等会对变量进行自动的类型转换,如果转换后相等也会返回false
console.log(null === undefined); //false
console.log(null === undefined); // true
条件运算符
三元运算符:三个操作数
-
条件表达式 ? 语句1:语句2;
-
执行了流程:对表表达式进行求值,如果为true执行语句1;如果为false执行语句2
true ? alert('hi') : alert('world'); var a = 10; var b = 20; a > b ? alert('a>b'):alert('a<b'); var max = a > b ? a : b; c = 30; var max = max > c ? max : c; // 一行比较 a,b,c三个变量的大小 var max = a > b ? a > c ? a : c : b > c ? b : c; var max = a > b ? (a > c ? a : c) : (b > c ? b : c);
运算符的优先级
-
使用, 可以分割多个语句,一般可以在声明前进行使用
-
var a=10,b=20,c=30;
-
和数学中的一样,先乘除后加减
-
var res = 1 || 2 && 3; // 与的优先级高
-
优先级表-click
max = a > b ? a > c ? a : c : b > c ? b : c;var max = a > b ? (a > c ? a : c) : (b > c ? b : c);
运算符的优先级
-
使用, 可以分割多个语句,一般可以在声明前进行使用
-
var a=10,b=20,c=30;
-
和数学中的一样,先乘除后加减
-
var res = 1 || 2 && 3; // 与的优先级高
-
在表中越往上优先级就越高,可以进行测试