对象


let obj={a:1,b:2}
属性:字符串属性用.访问,变量属性用[]访问
ES5用字符串作为对象属性
ES6用任意类型作为对象属性,最终会将属性通过toString()转换成字符串
ES6属性名支持表达式,通过[]使用
对象简洁表示方式:
1、值是变量时,名字与属性相同,则可省略值
let a=10,b=20;
let obj={a,b};
2、方法的表示方式:
{
a:function(){},
b:()=>{},this,new有问题
c(){} new 有问题
}
常用c方式
对象的遍历方式
*for...in,遍历对象(自身和继承的)可枚举属性
*Object.keys(obj),结果是对象自身所有可枚举属性组成的数组
Object.getOwnPropertyNames(obj),自身所有的属性,不含Symbol属性
HTMLCollection:length属性
Object.getOwnPropertySymbols(obj),获取自身所有的Symbol属性
*Reflect.ownKeys(obj),获取自身所有的属性

属性的遍历顺序:
先按数字属性从小到大获取
然后字母属性按设置时间升序获取
最后是Symbol属性,按设置时间升序获取

可枚举属性影响哪些操作?
for...in
Object.keys()
JSON.stringify(),将自身可枚举的属性转换成字符串,忽略不可枚举属性,忽略继承的属性
Object.assign(),合并自身可枚举属性,忽略继承的属性

super:父类、超类,与继承有关
必须用在子类简洁方法中(fn(){}),代表父类

扩展运算符
let {a,...b}={a:1,b:2,c:3}
{...objA,...objB}

方法:
Object.is(a,b),比较两个数据是否相等,===严格比较,两个与===比较不同:
0不等于-0
NaN等于NaN

Object.preventExtensions(obj),阻止对象进行扩展,只能操作原有属性,不能增加新属性

Object.isExtensible(obj),检测对象是否可扩展


let obj={x:10,y:20,z:30};
Object.keys(obj) 属性或索引
["x","y","z"]
Object.values(obj) 值
[10,20,30]
Object.entries(obj) 键值对
[["x",10],["y",20]]
获取到的数组可以用for...of遍历

Object.fromEntries(arr),将键值对数组或者map数据恢复成对象形式

Object.setPrototypeOf(A,B)
A.__proto__==B
Object.getPrototypeOf(B)
B.__proto__=?
B.isPrototypeOf(A)
B是否在A的原型链上

A instanceof B
构造函数B的原型,是否在实例A的原型链上

a.hasOwnProperty("x")
x是否是a的自身属性

"x" in a
a是否能访问到x属性

*/
/*
验证变量是否存在
try{//尝试,将不确定是否出错的语句写入
a
console.log("存在")
}catch(e){//try中的语句出错时,在此处理
console.log("不存在")
}finally{//最终,无论是否出错都会执行

}

 


Symbol:新数据类型,不能new
Symbol()作为对象的属性名,其唯一性保证属性名不会冲突

区分属性名,可以加标记
Symbol("qwertyu")

Symbol.for(str),用于在全局注册str名字,注册之前,先从全局查找是否已注册,未注册时才能注册成功,如果已注册,则使用注册过的

Symbol.keyFor(s),取Symbol.for参数

 

posted @ 2022-09-20 17:07  孟仔  阅读(88)  评论(0)    收藏  举报