对象是包括属性与方法的数据类型,是一种引用数据类型。
1.面向对象编程具有一下特征:
2.对象是属性和方法的集合即封装
3.将复杂功能隐藏在内部,只开放给外部少量方法,更改对象内部的复杂逻辑不会对外部调用造成影.响即抽象
4.继承是通过代码复用减少冗余代码
5.根据不同形态的对象产生不同结果即多态
基本声明与使用
var obj = {
name: "js",
age: 30,
fun: function (){
console.log(this.name,this.age);
}
}
console.log(obj.name);
console.log(obj["age"]);
obj.fun();
输出:js
30
js 30
解构赋值
解构赋值是一种简洁的赋值特性,可以理解为分解一个数据结构。
var {name,age} = {name:"js",age: 18};
console.log(name,age);
输出:js 18
属性管理
1.添加属性
var obj = {name: "js"};
obj.age = 18;
console.log(obj.age);
输出:18
2.删除属性
var obj = {name: "js",age: 18};
delete obj.age;
console.log(obj.age);
输出:undefined
3.检测属性
hasOwnProperty检测对象自身是否包含指定的属性,不检测原型链上继承的属性。
var obj = {name:"js",age: 18};
console.log(obj.hasOwnProperty("name"));
输出: true
4.获取属性名
var obj = {name: "js",age: 18};
console.log(Object.getOwnPropertyNames(obj));
输出:['name', 'age']
对象遍历
for in 遍历
遍历的是键值
var obj = {name: "js",age: 18,val: "hello"};
for(key in obj){
console.log(key);
console.log(obj[key]);
}
输出:VM2177:3 name
VM2177:4 js
VM2177:3 age
VM2177:4 18
VM2177:3 val
VM2177:4 hello
for of 遍历
遍历的是内容
var obj = {name: "js",age: 18,val: "hello"};
for(item of Object.values(obj)){
console.log(item);
}
输出:js
18
hello
属性特征
查看特征
var obj = {name: "js",age: 30};
var desc = Object.getOwnPropertyDescriptors(obj);
console.log(desc);
输出:{name: {…}, age: {…}}age:
configurable: trueenumerable: truevalue: 30writable: true[[Prototype]]:
Objectname: configurable: trueenumerable: true value: "js"writable: true[[Prototype]]: Object[[Prototype]]: Object
特性 | 说明 | 默认值 |
---|---|---|
configurable | 能否使用delete、能否需改属性特性、或能否修改访问器属性 | true |
enumerable | 对象属性是否可通过for-in循环,或Object.keys() 读取 | true |
writable | 对象属性是否可修改 | true |
value | 对象属性的默认值 | undefined |
设置特征
var obj = {
name: "js"
};
Object.defineProperty(
obj,"name",{
value: "后盾人",
writable: false,
enumerable: false,
configurable: false
}
);
属性name将不能被遍历、删除、修改。