运算符
算数运算符
书写规范:运算符 前后 空格隔开
+ 数值之间的加法运算 有字符串的参与,就会变成 字符串拼接符
let num = 1 + 2; //3
let num1 = "1" + 2; //12
let num3 = 100 + 'px' //100px
- 减号 尽力去把两侧的数据 转成 数值
let num = [2] - 1; //1
let num1 = 3 - "1"; //2
let num3 = 100 - 'px' ; //NaN
* / 与减类似
注意: 2 / 0 infinite 0 / 0 NaN
% 模/取余 大模小 取余 小模大 取小
let num=4%9;
** 指数运算
赋值运算符 =
let obj = {
name:'卡布奇诺',
age:3
}
let a = obj.age // 3 拿到的值
obj.age = 8 // 修改 重新赋值
console.log(a); // 3,注意不是8
let obj = {
name:'kbqn',
age:[1,2]
}
let a = obj.age // [1,2]地址
obj.age = [3,4] // 重新赋值 为 [3,4]的 地址
console.log(a); // [1,2]
let obj = {
name:'kbqn',
age:[1,2]
}
let a = obj.age // [1,2]地址
obj.age[0] = 4 // 修改obj里age存的【1,2】第一个数据为4
console.log(a); // [4,2]
其他赋值运算符
+=
x = x + 3
x += 3
-=
x = x - 3
x -= 3
*= /= %= **=
x++ ++x 自增1
x = x + 1
x-- --x 自减1
x = x - 1
前置++ 和后置++ 的区别 赋值的时候才有区别 没有赋值时 效果一致
有赋值的时候:
前置++ 先运算 再赋值
后置++ 先赋值 后运算
let x = 9;
let num1 = x++;
console.log(num1); //9
let x = 9
let num1 = ++x
console.log(num1); //10
let x = 1
console.log((++x) + (x++) + (++x)); //8
let y = x + ++x + 3 * (x = ++x + x + x++ + 1) + x++ + 3 //y=46
比较运算符
比较运算符 通过比较返回一个 布尔值 满足条件则 true 不满足则false
> ,<,>=,<=,==,!= 比较两边数值是否成立,不看数据类型
=== 全等于 严格比较 要求 类型一致 (不会类型转换)
!== 全不等于 严格比较
let bool = undefined === undefined // true
let bool = NaN === NaN // false
let bool = [] === [] //false 不同的地址
let bool1 = {} === {} //false 不同的地址。
console.log(1 !== 1);
逻辑运算符
逻辑与 &&
let a = 1 && 2 && ""
console.log(a); //空字符串
let a = 1 && 2 && "123" //全部为true 就拿最后一个值
let a = undefined && 0 && '' //有显示false就返回为第一个,undefined
逻辑或||
let a = 0 || undefined || 123 || "123abc" //123
全部为false就拿最后一个值,有一个true就是该值
取反!
console.log( !1 ); //false
console.log( !NaN ); //true
console.log( !!NaN ); //false
优先级非>与>或
let zq = "" || [1] && null || function(){} || 0
console.log(zq); // function(){}