声明对象
let obj = {'name': 'dog', 'age':18}let obj = new Object({'name': 'dog'})
- 对象是无序的键值对的集合
 - 属性名是字符串,不是标识符可包含任意字符
 - 属性名的引号可以省略,省略后只能按标识符的格式写
 - 属性名的引号省略了,也还是字符串
 属性名会自动变成字符串
let obj = {1:true,1e2: true,.123: true,0xFF: true,};Object.keys(obj); // ["1", "100", "255", "0.123"]
使用变量做属性名
let n = 'name';let obj = {n: 'person'}; // 属性名为'n'let obj = {[n]: 'person'}; // 属性名为'name', []会自动对里面的变量求值
通过 Object.create() 创建对象
// 创建对象:Object.create(原型)var person = Object.create(Person.prototype);var obj = Object.create(null); //创建没有原型的对象
- 
增删改查
let person = {name: 'lovely',age: 18,weight: 45kg,sleep: function() {console.log('sleeping!');},eat: function() {console.log('eating!');}}// 增加属性:person.hobby = 'play';// 增加方法person.happy = function() {console.log('happy every day');}// 给对象的原型增加方法person.prototype.run = function() {console.log('keep running');}// 改属性:person.age = 2;// 删除属性:delete person.age;delete psrson['weight'];// 查Object.keys(person);console.dir(obj);person['name'];person.name; // 这里的age是字符串person[name]; // 这里的age是变量
 
枚举,遍历
- ‘name’ in obj 和 obj.hasOwnProperty(‘name’) 的区别
- ‘name’ in obj: 判断 obj 里是否有属性’name’
 - obj.hasOwnProperty(‘name’) :判断属性 ‘name’ 是 obj 本身的还是原型中的
 
 使用
for .. in ..遍历对象var obj = {name: 'person',age: '18',hobby: 'sleep',__proto__: {lastName: 'zao'}}// obj.name 与 obj['name']一样for (var key in obj) {if(obj.hasOwnProperty(key)) { //判断属性是否是自己的,而不是原型上的console.log(obj[key]);}}'age' in obj; // 判断obj是否能访问age属性(包括自己的和原型的)A instanceof B; // 对象A是否属于class B,即对象A的原效链上是否有B
使用
Object.keys(obj), Object.values(obj)遍历对象console.log(Object.keys(obj)); // ["name", "age", "hobby"]console.log(Object.values(obj)); // ["person", "18", "sleep"]Object.keys(obj).forEach(key => console.log(key, obj[key]));
Object.getOwnPropertyNames(obj).forEach()Object.getOwnPropertyNames(obj).forEach(key => console.log(key,obj[key]));
包装类
使得基本类型可以像对象一样操作
- undefined, null 没有安装类
var num = new Number(123);var str = new String('abcd');var bool = Boolean();
 
