JS 对象(对象遍历,拷贝)


 定义属性

  • 直接 obj.对象 的方法
  • Object.defineProperty(obj, prop, descriptor) ,这种方法可以设置 或者修改对象属性的访问权限

    数据描述符和存取描述符均具有以下可选键值:

configurabl
  当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false
enumerable
  当且仅当该属性的enumerable为true时,该属性才能够出现在对象的枚举属性中。默认为 false
数据描述符同时具有以下可选键值:

value
  该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined
writable
  当且仅当该属性的writable为true时,value才能被赋值运算符改变。默认为 false

对象合并

  Object.assign(target,source1,source2)  

  Return  返回合并后的新对象

  注意  

    如果合并的对象中有相同的属性,那么后面的会覆盖前面的

var obj = {
    name : '小白',
    color : 'white'
}
var obj1 = {
    say : function(){
        console.log('汪汪');
    }
}
var obj2 = {
    name : '小黑'
}
var newObj = Object.assign(obj,obj1,obj2)
console.log(newObj.name);    //输出  小黑
newObj.say();    

判断属性是否存在

  Object.hasOwnProperty()

  存在 返回true    不存在  返回false

获得对象属性

  Object.keys   返回一个数组中包含所有属性名

  Object.values    返回一个数组中包含所有属性值

遍历属性

  • for...in...  最常见的一种方式,可以遍历对象当前所有可见属性,包括原型中定义的属性
  • Object.keys  获得对象所有可见属性的属性名,不包括原型中定义属性
  • Object.getOwnPropertyNames   获得对象所有属性,不包括原型中定义属性
function Dog(name,color){ this.name = name; this.color = color; } Dog.prototype = { foods : ['bones','meat'], say : function(){ console.log('汪汪'); }, eat : function(){ console.log('i am '+this.nam+' i eat '+this.foods.join(',')); } } var xiaohei = new Dog('小黑','black'); Object.defineProperty(xiaohei,'name',{enumerable:false}); console.log(Object.keys(xiaohei)); //输出 ["color"]
console.log(Object.getOwnPropertyNames(xiaohei)); //输出 (2) ["name", "color"]
    

对象拷贝 

浅拷贝 : 即拷贝当前对象地址给一个新的对象,任何对象改变会引起其他对象改变

var xiaohei = new Dog('小黑','black'); var xiaoheihei = xiaohei ;    //对象浅拷贝
xiaoheihei.name = '小黑黑' console.log(xiaohei.name); //输出 小黑黑

深拷贝 : 即将对象所有属性和方法拷贝一份给一个新的对象

var xiaohei = new Dog('小黑','black'); var xiaobai = {}; for(let key in xiaohei){ xiaobai[key] = xiaohei[key] } xiaobai.name = "小白" console.log(xiaohei.name); //输出 小黑

数组拷贝

数组与对象类似,都属于引用型变量,因此直接使用 = 只是拷贝地址,如需要拷贝数组,可以使用 slice 方法

var arr = [1,2,3,4] ; arr1 = arr ;        //浅拷贝
arr2 = arr.slice(0);    //深拷贝
arr[0] = 'hello' ; console.log(arr1); //'hello',2,3,4
console.log(arr2);    //1,2,3,4

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM