声明对象
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();