js对象

初始化对象


var a = {} //es5语法
var b = new Object()  //es5语法
var c = Object.create(Object.prototype)  //es6语法

//以上3种方法是等价的

//真正的空对象{}
var c = Object.create(null)  //es6语法

获取对象属性

var a = {name:123}

a.name //123
a['name'] //123

//修改
a.name = '456'

缩写

var xxx = {
    a:a,
    b:b
}
// 等价于
var xxx = { a, b }  //ES5

动态key

var name = 'xxx'
var object = {[name]:1}

console.log(object)  // xxx:1

方法定义get set。对属性的读和写自定义操作

var b = {
    _age : 18,
   //读的时候访问get
  get age(){ return b._age},
  //写的时候访问set
  set age(value){
    if(value < 100){
      b._age = value
    }else{
      b._age = 100
    }
  }
}
console.log(b)//{_age: 18}
b.age //18
b._age // 18
b.age = 1000 //改age的值
b.age // 读 100 

ps: 以上age为动态属性

浅拷贝

var obj1 ={a:1,b:2,c:3}
var obj2 = {}
for(let key in obj1){
    obj2[key] = obj1[key]
}
obj1 === obj2 //false
obj1 //{a: 1, b: 2, c: 3} 
obj2 //{a: 1, b: 2, c: 3}

简写以上代码 Object.assign()

var obj1  = {a: 1, b : 2, c : 3}
//把obj1的所有key和value,复制到前面{}对象
var obj2 = Object.assign({},obj1)
obj2  // {a: 1, b: 2, c: 3}
obj1 // {a: 1, b: 2, c: 3}
obj2.a = 123 
obj2 // {a: 123, b: 2, c: 3}
obj1 //{a: 1, b: 2, c: 3}

再简写 ...obj1

var obj1 = {a:1,b:2,c:3}
var obj3 = {...obj1} //超简单

变更原型

var  a = {}
a.toString() //"[object Object]"
a.__proto__ === Object.prototype //true

以上代码:a的原型是Object.prototype

---------------------------------------
var b = {
    sayHi(){
        console.log('hi')
    }
}
a = Object.create(b) //修改a的原型
a //{}
a.__proto__ === b //true
a.sayHi() // hi

获取对象的原型

var a = {}
a.__proto__  // 获取对象的原型
Object.getPrototypeOf(a) // 获取对象的原型

ps:Object.create()设置原型。Object.getPrototypeOf()获取原型

js的对象与JSON的对象的区别?

1、 JSON 只允许"property": value syntax形式的属性定义。属性名必须用双引号括起来。且属性定义不允许使用简便写法。
2、SON中,属性的值仅允许字符串,数字,数组,truefalsenull或其他(JSON)对象。
3、 JSON中,不允许将值设置为函数。
4、 Date 等对象,经JSON.parse()处理后,会变成字符串。
5、 JSON.parse() 不会处理计算的属性名,会当做错误抛出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容