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