对象介绍
对象是java脚本中的一个基本实体。它存储了键和值对的列表。
重要的一点是:
-
每种类型的数据都通过原型继承来扩展Object类。
-
对象数据包含有键和值的属性,用方括号[]括起来。
-
键包含字符串和符号类型的数据
-
类型的值包含原始类型,如String、number、bigint(最新)、undefined、null和Function。
-
它包含可枚举和不可枚举的属性
下面是一个例子
const myobject = {
id:"1",
name:"john",
department:"sales"
};
myobject.salary=5000;
创建了myobject,它的id、name和department带有属性,这些被称为外部属性。
每个对象都有内部的内置属性,这些属性是不可见的,如enumerable,value等。
Enumerable有布尔值true - 这些在用for循环和object.keys方法迭代时显示,false - 不可见。
可列举的属性
当for-in或object.key方法被调用时,可枚举的属性是可迭代的。
这些可以通过2种方式被分配。
一种是使用对象上的属性初始化:
const myobject = {
id:"1",
name:"john",
department:"sales"
};
上面的例子中,id、name和department都是使用赋值表达式的关键属性 对象属性是使用属性key的赋值来添加的
myobject.salary=5000;
console.log(myobject.id);
console.log(myobject.name);
console.log(myobject.department);
for(let key in myobject){
console.log(key +'-'+myobject[key])
}
or
console.log(Object.keys(myobject));
输出是
id-1
name-johndepartment-sales
[ 'id', 'name', 'department' ]
所有使用initialize和assignment创建的属性都可以使用for in loop和object.key进行迭代。
不可枚举的属性
这些属性在遍历对象时是不可见的。使用defineProperty创建非枚举属性 。
Object.defineProperty(myobject,"location",{value:"India",enumerable:false})
console.log(Object.keys(myobject));
[ 'id', 'name', 'department' ]
正如你在上面的例子中所看到的,为myobject创建了位置属性,其中包含enumerable:false,表示非枚举属性在Object.keys()迭代过程中不可见。
Object.defineProperty(myobject,"location",{value:"India",enumerable:true})
console.log(Object.keys(myobject));
[ 'id', 'name', 'department', 'location']
如何检查一个对象的属性是否可列举?
对象中的propertyIsEnumerable()方法检查属性键是否是可列举的,如果是真的,它就是对象自己的属性。
const myobject = {
id:"1",
name:"john",
department:"sales"
};
Object.defineProperty(myobject,"location",{value:"India",enumerable:false})
console.log(myobject.propertyIsEnumerable("id")); //true
console.log(myobject.propertyIsEnumerable("name"));// true
console.log(myobject.propertyIsEnumerable("location")) ;//false