值称为原始值( 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’ ‘自身’指非原型链继承的属性
index
for...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
时,状态值相加即可