源码中的位运算
- 按位于 运算
if (shapeFlag & ShapeFlags.TELEPORT) {
解释:如果shapFlag本身值为8,type为1的话,那么转换为二进制(js都是32位)那就是
shapFlag:00000000 00000000 00000000 00001000
type: 00000000 00000000 00000000 00000001
结果为: 00000000 00000000 00000000 00000000
按位进行运算,如果两个都为为1那就是1,否则为0,所以结果为0
2. 按位或 赋值
vnode.shapeFlag |= type
// 和这个代码一样
vnode.shapeFlag = vnode.shapeFlag |type
解释:如果shapFlag本身值为8,type为1的话,那么转换为二进制(js都是32位)那就是
shapFlag:00000000 00000000 00000000 00001000
type: 00000000 00000000 00000000 00000001
结果为: 00000000 00000000 00000000 00001001
按位进行运算,如果有一个为1那就是1,所以结果为9