# [JavaScript] Object ###### tags: `JavaScript` ## 判斷屬性是否存在 * `hasOwnProperty()` * `obj.hasOwnProperty('hasOwnProperty');` * 只檢查物件本身的屬性 * `in` * `'hasOwnProperty' in obj;` * 會往上檢查物件的原型鏈 ## 取值、新增、刪除 ```javascript= var book = { name: '書名', author: '作者', price: '350', isbn: '9789861234567', eeee: 'eeee', details: { publisher: '出版社', publicationDate: '2020/12/09', binding: '紙本平裝' }, promotions: function() { return '參與全站滿千折百活動' }, '$-name': '特殊屬性名稱', } // 取值 console.log(book.name); // 書名 console.log(book['$-name']); // 特殊屬性名稱 console.log(book.promotions()); // 參與全站滿千折百活動 console.log(book['promotions']()); // 參與全站滿千折百活動 // 新增 book.pages = '450'; book['details']['language'] = '中文'; // 刪除 delete book.eeee; delete book['$-name']; console.log(book); ``` ## Shallow Copy(淺層複製)與 Deep Copy(深層複製) ```javascript= var book = { name: '書名', author: '作者', details: { publisher: '出版社', publicationDate: '2020/12/09', } } // Shallow Copy 淺層複製 - for in var book2 = {}; for (var key in book) { book2[key] = book[key]; } console.log(book === book2); // false console.log(book.details === book2.details); // true // Shallow Copy 淺層複製 - jQuery var book3 = jQuery.extend({}, book); console.log(book === book3); // false console.log(book.details === book3.details); // true // Shallow Copy 淺層複製 - ES6 var book4 = Object.assign({}, book); console.log(book === book4); // false console.log(book.details === book4.details); // true // Deep Copy 深層複製 - JSON.parse & JSON.stringify var book5 = JSON.parse(JSON.stringify(book)); console.log(book === book5); // false console.log(book.details === book5.details); // false ``` --- :::info 建立日期:2020-12-23 更新日期:2020-12-23 :::