JavaScript教程之对象属性基础与实例

83 阅读2分钟

对象介绍
对象是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