值称为原始值( primitive values ) 有:
Boolean、Null、Undefined、Number、BigInt、String、Symbol
都继承自
Object
typeof操作符
Function对象为function,其他都是object;null值为object,即typeof null === 'object',理解为‘空指针’Object.prototype.toString Object.prototype.toString.call(value) 即可Null、Undefined从「JavaScript 1.8.5」开始支持,需做兼容处理使用原对象的构造函数构造新的对象 遍历对象属性
Array RegExp.prototype.exec 返回的数组中index、input属性需保留Regexp lastIndex属性额外复制Symbol Object(Symbol.prototype.valueOf.call(value))
Object.prototype.propertyIsEnumerable判断某属性是否可枚举Object.prototype.hasOwnProperty()判断对象自身是否有某可枚举属性,包括 ‘字符串’、‘Symbol’ ‘自身’指非原型链继承的属性
indexfor...in 获取对象上的所有可枚举的 ‘字符串’ 属性Object.keys 获取对象自身上的所有可枚举的 ‘字符串’ 属性Object.getOwnPropertyNames() 获取对象自身上的所有 ‘字符串’ 属性(包括不可枚举)Object.getOwnPropertySymbols() 获取对象自身上的所有 ‘Symbol’ 属性(包括不可枚举)
对象初始的时候不会有任何‘Symbol’属性
for...in | keys() | getOwnPropertyNames() | getOwnPropertySymbols() | |
|---|---|---|---|---|
| 包括继承 | Y | N | N | N |
| 包括不可枚举 | N | N | Y | Y |
| 类型 | 字符串 | 字符串 | 字符串 | Symbol |
在一个值中定义多种状态值
/**
* @param {number} bitmask The bitmask flags.
* 1 - Deep clone
* 2 - Flatten inherited properties
* 4 - Clone symbols
*/
function baseClone(value, bitmask, customizer, key, object, stack) {
...
const isDeep = bitmask & (CLONE_DEEP_FLAG = 1)
const isFlat = bitmask & (CLONE_FLAT_FLAG = 2)
const isFull = bitmask & (CLONE_SYMBOLS_FLAG = 4)
...
}
false,1代表true,将值的某一位的0/1值约定为一种状态的是与否;&操作符true时,状态值相加即可