# [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
:::