JS对象--Object

对象

对象是一个包含相关数据和方法的集合

1.对象的创建

1.字面量模式

var obj = {
  name:"terry",
  age:12,
  sayName:function(){
    console.log("my name is ",this.name);
  }
}

2.构造函数模式

var obj = new Object();
obj.name = "terry";
obj.age = 12;
obj.sayName = function(){
  console.log("my name is",this.name);
}
2.对象的访问

1.属性的访问

点访问、中括号访问

obj.name      //'terry'
obj['name']     //'terry'
name = "age"
obj['name']      //12

2.方法的访问

obj.sayName();//方法的使用

3.遍历对象中的属性

for…in 用于遍历数组或对象的属性

for(var key in obj){
	var value=obj[key];
}
3.增删改对象属性

只能删除对象的自有属性

delete obj.pro
delete obj["proname"]
delete obj.sayName     //从obj对象中删除sayName属性

新增属性

obj.newpropname="value"

改变属性值

obj.pro="newValue"
4.检测属性

in 检测是否是对象的自有属性或继承属性

var obj = {
  name: 'zhangsan',
  age: 18,
  school: 'xx大学'
}
//in运算符的左侧为属性名称,右侧为对象
console.log('name' in obj); //true
console.log('gender' in obj); //false
console.log('toString' in obj); //true

Object.prototype.hasOwnProperty()

检测是否是对象的自有属性

console.log(obj.hasOwnProperty('name')); //true
console.log(obj.hasOwnProperty('toString')); //false,toString为继承属性

Object.prototype.propertyIsEnumerable()

检测是否是对象的自有属性和枚举属性(Enumerable:true)

console.log(obj.propertyIsEnumerable('name')); //true
5.对象原型属性和方法

Object 原型常用的方法

​ 保存用户创建当前对象的函数,与原型对象对应的构造函数

hasOwnProperty(propertyName)

​ 检查给定的属性名是否是对象的自有属性

propertyIsEnumerable(propertyName)

​ 检查给定的属性在当前对象实例中是否存在

valueOf()

​ 返回对象的字符串,数值,布尔值的表示

toLocaleString()

​ 返回对象的字符串表示,该字符串与执行环境的地区对应

toString()

​ 返回对象的字符串表示

isPrototypeOf(object)

​ 检查传入的对象的原型

6.定义属性
数据属性

​ [[Configurable]]

​ 表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性

​ [[Enumerable]]

​ 表示能否通过for-in循环返回属性,即是否可枚举

​ [[Writable]]

​ 表示能否修改属性的值。(属性直接定义在对象中,默认为true)

​ [[Value]]

​ 包含这个属性的数据值

Object.defineProperty(属性所在的对象,属性的名字,一个描述符对象)

var obj = new Object();
obj.name = 'zhangsan';
Object.defineProperty(obj,'name',{
   configurable:true,//默认值
   enumerable:true,//默认值
   writable:true, //默认值
   value:'terry'
})

Object.defineProperties(obj, props)

var obj = new Object();
Object.defineProperties(obj, {
    name: {
        value: 'zhangsan',
        configurable: false
    },
    age: {
        value: 18,
        enumerable: true
    }
})
读取属性

Object.getOwnPropertyDescriptor(obj,prop)

返回指定对象自有属性对应的属性描述符

var desc = Object.getOwnPropertyDescriptor(person, 'name'); 
console.log(desc)  结果如下
// {
//     configurable: true,
//     enumerable: true,
//     writable: true,
//     value: "zhangsan"
// }

Object. getOwnPropertyDescriptors(obj)

返回指定对象所有自有属性的描述符,若没有任何自身属性,则返回空对象。

访问器属性

不包含数据值,包含的是一对get和set方法,可模拟数据双向绑定

访问器属性包含的四个特性

[[Configurable]]

​ 表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为false

[[Enumerable]]

​ 表示能否通过for-in循环返回属性,默认为false

[[Get]]

​ 在读取属性时调用的函数,默认值为undefined

[[Set]]

​ 在写入属性时调用的函数,默认值为undefined

Object.defineProperty(obj,prop,otherobj)

var book = {
  _year: 2020, //下划线表示是内部属性,只能通过对象的方法来读写
  editor: 1
};
Object.defineProperty(book, 'year', {
  get: function () {
    return this._year;
  },
  // 若只指定get方法,不指定set方法,那就默认该属性是只读的
  set: function (newYear) {
    if (newYear !== this._year) {
      this._year = newYear
      this.editor ++
    }
  }
});
// 测试访问属性中的get,set方法
console.log('未修改的year:' + book.year);//2020
book.year = 2021;
console.log('修改后的year:' + book.year);//2021
7.对象序列化

对象序列化是指将对象的状态转换为字符串,也可以反序列化,将字符串还原为对象函数

RegExp,Error对象,undefined值不能序列化和反序列化

JSON.stringify(obj) 将对象序列化为JSON字符串,只能序列化对象可枚举的自有属性

JSON.parse(jsonStr) 反序列化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值