表达式和运算符
运算符
运算符 |
说明 |
示例 |
+ |
加法 |
3+4 //7 |
- |
减法 |
4-2 //2 |
/ |
除法 |
4/2 //2 |
* |
乘法 |
3*4 //12 |
% |
取余 |
4%3 //1 |
- |
负号 |
-4 |
+ |
正号 |
+4 |
++ |
自增 |
++x, x++ |
-- |
自减 |
--x,x-- |
自增和自减
前置自增(自减),优先增加(减少),然后赋值给变量;
后置自增(自减),优先赋值给变量,然后增加(减少);
如果自增(自减)不赋值给其他变量,前置后置效果是一样的;
let number;
let number1 = 10;
number = ++number1;
console.log(number, number1); // 11 11
number = number1++;
console.log(number, number1); // 11 12
number = --number1;
console.log(number, number1); // 11 11
number = number1--;
console.log(number, number1); // 11 10
number1++;
console.log(number1); // 11
++number1;
console.log(number1); // 12
运算符优先级
高优先级运算优先低优先级运算符,搞不清楚时,善用括号
比较运算符
- ===,严格相等,引用的是相同的对象,或者拥有相同类型(基本类型)和相同的值;
- ==,非严格相等,属于同一个对象,或者强制转化为相同的值;
let num = 33;
let str = '33';
console.log(num === str); // false
console.log(num == str); // true
- 关系运算符
小于(<), 小于等于(<=), 大于(>), 大于等于(>=)
比较运算符比较的是拥有自然排序特性的数据类型,比如,字符串,数字;
比较数字
- NaN与任何值不相等,包括自己(NaN)
- 小数比较时,特别注意,他们之间不要直接比较,而是通过差值和Number.EPSILON比较;
// 因为双精度问题,此循环会一致运行的
let number = 0.1;
while (true) {
number += 0.1;
if (number === 0.3) break;
console.log(number);
}
let number = 0.1;
while (true) {
number += 0.1;
if (Math.abs(number - 0.3) < Number.EPSILON) break;
console.log(number);
}
真值和假值
- 假值
- undefined
- null
- false
- 0
- NaN
- 除了假值,全为真值,惊喜不
与,或和非
与(&&) |
或(||) |
非(!) |
同时满足为真 |
满足一个条件即为真 |
取反 |
x |
y |
x&&y |
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
x |
y |
x||y |
false |
false |
false |
true |
false |
true |
false |
true |
true |
true |
true |
true |
x |
!x |
false |
true |
true |
false |
条件运算符
表达式1 ? 表达式1为true表达式 : 表达式1为false表达式
位运算符
运算符 |
描述 |
示例 |
& |
位与 |
0b1 & 0b0 = 0b0 |
| |
位或 |
0b1 | 0b0 = 0b1 |
^ |
位异或 |
0b1 ^ 0b0 = 0b1, 0b1 ^ 0b1 = 0b0 |
~ |
位非 |
~0b1 = 0b0, ~0b0 = 0b1 |
<< |
左移位 |
0b1 << 1 = 0b10 |
>> |
右移位 |
0b10 >> 1 = 0b1 |
<< |
补零右移位 |
1 << 1 = 0b10 |
类型判断运算符
表达式 |
返回值 |
typeof undefined |
"undefined" |
typeof null |
"object" |
typeof {} |
"object" |
typeof true |
"boolean" |
typeof 1 |
"number" |
typeof "" |
"string" |
typeof Symbol() |
"symbol" |
typeof function(){} |
"function" |
解构赋值
解构赋值,允许把一个对象或者数组分解成多个单独的值
const obj = { a: 2, b: 3};
let {a, b} = obj;
console.log(a, b); //2, 3
const arr = [1, 2, 3];
let [a, b] = arr;
console.log(a, b); //1, 2
const arr = [1, 2, 3, 4];
let [a, b, ...rest] = arr;
console.log(a, b, rest); //1, 2, [3, 4]
展开运算符(...),应用于数组或者对象。 一个对数组或者对象进行展开插值 一个是对数组或者对象进行局部的赋值
对象和数组运算符
运算符 |
描述 |
. |
成员访问 |
[] |
成员访问 |
in |
判断属性是否存在 |
new |
实例化对象 |
instanceof |
原型链测试 |
... |
展开运算符 |
delete |
删除运算符 |
网友评论