Math.floor(4.9) === 4 //true
// 简写为:
~~4.9 === 4 //true
不过要注意,对正数来说 ~~
运算结果与 Math.floor( )
运算结果相同,而对于负数来说与Math.ceil( )
的运算结果相同:
~~4.5 // 4
Math.floor(4.5) // 4
Math.ceil(4.5) // 5
~~-4.5 // -4
Math.floor(-4.5) // -5
Math.ceil(-4.5) // -4
右移运算符 >>
运算符执行有符号右移位运算。与左移运算操作相反,它把 32 位数字中的所有有效位整体右移,再使用符号位的值填充空位。移动过程中超出的值将被丢弃。
举个例子:假设我们往右移动一位,其实就是除于2然后向下取整了,如果移动2位,就是除于4向下取整,以此类推,反正就是2的n次方。
4 >> 1 // 2
9 >> 1 // 4
15 >> 2 // 3
左移运算符 <<
同上,这里为乘,就不解释了
+ 正号
这个符号既是加号,也是正号,可以最优雅的将某个值转换成数字。
const timestamp = +new Date() // 时间戳
console.log(+'18' === 18) // true
空值合并运算符 ??
只有左侧的值为null或undefined的时候才使用右侧的值。
let obj = {age: 0, name: '', sex: null, has: false};
obj.has ?? '111'; // false
obj.age ?? '111'; // 0
obj.name ?? '111'; // ''
obj.sex ?? '111'; // 111
obj.addr ?? '111'; // 111
空值赋值运算符 ??=
和空值合并运算符??类似(可常量、可变量)。
当??=左侧的值为null、undefined的时候,会将右侧的值赋值给左侧变量。
let obj = {name: '', age: 0, has: false, sex: null}
obj.name ??= 'jack'
obj.age ??= 18
obj.has ??= true
obj.sex ??= 'man'
obj.add ??= '...'
console.log(obj) // {name: '', age: 0, has: false, sex: 'man', add: '...'}
可选链操作符 ?.
可选链操作符平时经常能看见,但是对象用中括号取值的时候可能就比较小众了。
let obj = {name: '', age: 0, has: false, sex: null}
obj?.['name']?.['length']
obj.getName?.()
使用BigInt支持大整数计算问题
es2020引入了一种新的数据类型 BigInt,用来表示任意位数的整数
例如
// 超过 53 个二进制位的数值(相当于 16 个十进制位),无法保持精度
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true
// BigInt
BigInt(Math.pow(2, 53)) === BigInt(Math.pow(2, 53)) + BigInt(1) // false
除了使用BigInt来声明一个大整数,还可以使用数字后面加n的形式
1234 // 普通整数
1234n // BigInt
### React
* 介绍一下react
* React单项数据流
* react生命周期函数和react组件的生命周期
* react和Vue的原理,区别,亮点,作用
* reactJs的组件交流
* 有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢
* 项目里用到了react,为什么要选择react,react有哪些好处
* 怎么获取真正的dom
* 选择react的原因
* react的生命周期函数
* setState之后的流程
* react高阶组件知道吗?
* React的jsx,函数式编程
* react的组件是通过什么去判断是否刷新的
* 如何配置React-Router
* 路由的动态加载模块
* Redux中间件是什么东西,接受几个参数
* redux请求中间件如何处理并发
