获取对象数值
let obj = {k1:'v1',k2:'v2'}
Object.keys(obj); // 返回key数组:['k1','k2']
Object.values(obj); // 返回value数组:['v1','v2']
Object.entries(obj);// 返回key、value数组:[['k1','v1'],['k2','v2']]
Object.fromEntries(); // entries的逆操作,数组转成对象
判断是否相同
Object.is(1,1); // true
Object.is('a','a'); // true
Object.is(NaN,Nan); // true
Object.is({},{}); // false
Object.is(-0,+0); // false
获取对象长度
Object.keys(Obj).length;
Symbol
// 新的数据类型,独一无二的值,自己和自己也不一样
let s1 = Symbol('s')
let s2 = Symbol('s')
s1 != s2
// 用于防止变量名冲突
// 在别人的对象中,加入自己要的属性key,容易冲突
let obj = {a:'aaa'}
let key = Symbol('a')
obj[key] = 'bbb'
obj.a // 输出aaa
obj[key] // 输出bbb
// 示例:如果type不是Symbol类型,调用doIt时,容易误传rect
let type = Symbol('rect')
function doIt(_type){
switch(_type){
case type:break;
}
}
doIt(type)
`Symbol.for(), Symbol.keyFor`
// 创建相同的Symbol值
// symbol.for在创建时,会登记在全局供搜索;在创建前,先会搜索全局,若已存在,直接返回,否则新建
let s1 = Symbol('s')
let s2 = Symbol('s')
s1 != s2
let t1 = Symbol.for('t1')
let t2 = Symbol.for('t1')
t1 == t2
// Symbol.keyFor返回已全局登记的key
let s1 = Symbol.for('s')
Symbol.keyFor(s1) // 返回: 's'
`Object.getOwnPropertySymbols(obj)`
// 获取obj中所有的symbol属性名
/*
// 只获取Symbols属性名:
Object.getOwnPropertySymbols(obj)
可以获取所有类型属性名:
Reflect.ownKeys(obj)
无法获取symbol属性名:
for in
for of
Object.keys
Object.getOwnPropertyNames
JSON.stringfy
*/
`Object.getPrototypeOf(obj)`
// 读取实例对象的原型prototype
function PERSON = {name:'caiquan'}
let man = new PERSON();
Object.getPrototypeOf(man) // 等于 PERSON.prototype
`Object.setPrototypeOf(obj1,obj2)`
// 将原型prototype指向obj2
// 示例一:
let proto = {}
let obj = {name:'caiquan'}
Object.setPrototypeOf(obj,proto); // 将原型指向proto,所以proto属性改变,obj也会改变
proto.age = 32;
obj.name // 'caiquan'
obj.age // 32
// 示例二:将super指向其他对象,this不变
const PERSON = {
_sex:'default',
sex(){return this._sex;}
}
const MAN = {
_sex:'male',
getSex(){ return super.sex();} // super指向PERSON,但sex中的this依旧是MAN
}
Object.setPrototypeOf(MAN,PERSON)
MAN.getSex(); // 输出:male
`Object.create`
/**
创建原型是{age:32}的对象,用于继承
{
__proto__:{
age:32
}
}
*/
Object.create({age:32});
Object.assign(); // 合并对象
Object.getOwnPropertyDescriptors(); // 获取对象属性的描述
`属性是否存在`
// 1. 无法区分自身和原型链上的属性
'name' in test //true
// 2. 只判断自身属性的场景。
test.hasOwnProperty('name')//true 自身属性
// 3.
// 创建对象
let test = {name : 'lei'} // 获取对象的自身的属性
test.name //"lei"
test["name"] //"lei"
// 获取不存在的属性
test.age //undefined
// 获取原型上的属性
test["toString"] //toString() { [native code] }
// 新增一个值为undefined的属性
test.un = undefined
test.un //undefined 不能用在属性值存在,但可能为 undefined的场景
网友评论