持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
1.什么是对象Object?
Object 是 JavaScript 中的引用数据类型,由一组无序的键值对(key:value)组成的
2. 创建对象
2.1 使用对象字面量创建(推荐用法)
var person = {
name: "赵盼儿",
age: 39
}
// 对象的所有键名(name、age)都会转为字符串
//通过点语法访问对象属性:这里的name其实是字符串
person.name // '赵盼儿'
// 通过方括号访问对象属性: 键名需用引号包裹(数字键除外,会自动转成字符串),不用引号键名会被当作变量
person['age'] // 39
2.2 使用构造函数创建
Object 构造函数将给定的值包装为一个新对象。
注:给定的值是 null 、 undefined或者为空, 它会创建并返回一个空对象。
var obj = new Object();
obj.name = '无名';
obj.age = 20;
console.log(obj) // {name: '无名', age: 20}
//自定义构造函数
function Person(name, age) {
this.name = name;
this.age = age;
this.things = function() {
console.log('东京创业')
}
}
var person = new Person("赵盼儿", 39); // Person {name: '赵盼儿', age: 39, things: ƒ}
2.3 使用对象内置方法创建
Object.create方法根据指定的原型对象创建一个新对象(新对象带着指定的原型对象和属性)
var obj = new Object();
obj.name = '无名';
obj.age = 20;
// 创建一个拥有属性age的对象,该对象的__proto__指向obj对象
var newObj = Object.create(obj , {age: { value: 7 }})
console.log(newObj) //{age: 7}
3. 常用方法
3.1 Object.keys()
返回一个数组,由给定对象的自身可枚举属性名组成。简单来说就是获取对象的属性名
var person = {
name: "赵盼儿",
age: 39
}
Object.keys(person) //['name', 'age'] 属性名为字符串
3.2 Object.values()
返回一个数组,由给定对象的自身可枚举属性值组成。简单来说就是获取对象的属性值
var person = {
name: "赵盼儿",
age: 39
}
Object.values(person) //['赵盼儿', 39]
3.3 Object.entries()
返回一个数组,由给定对象的自身可枚举属性的键值对组成。简单来说就是获取对象的属性名、属性值
var obj = { a: 1 };
Object.entries(obj); //[['a', 1]]
3.4 Object.is()
判断两个值是否为同一个值,返回一个布尔值
Object.is(value1, value2);
//两个值都是null或者都是undefined 为true
Object.is(null, null); // true
Object.is(undefined, undefined); // true
//都是相同对象为true(意味着都是同一个对象的值引用)
var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo); // true
Object.is(foo, bar); // false
3.5 Object.assign()
Object.assign(target, ...sources)
返回一个新对象,将一个或多个源对象可枚举属性复制到目标对象
target目标对象sources源对象
var obj = { a: 1 };
var obj2 = { b: 2 }
// 复制对象
var copy = Object.assign({}, obj); //{a: 1}
// 合并对象 目标对象(obj)自身也会改变
var merge = Object.assign(obj, obj2); //{a: 1, b: 2}
3.6 对象的遍历方法
用来获取对象的属性(键名、键值)。
a. for...in循环
注: for...in循环只遍历对象所有可枚举(enumerable为true)的属性(如:通过直接赋值和属性初始化的属性,enumerable即为 true)。js的内置属性(如:toString)就无法使用for...in遍历出来
var obj = {a: 1, b: 'two'};
for (var i in obj) {
console.log(i); //键名:'a' 'b'
console.log(obj[i]); //键值:1 'two'
}
b. forEach循环
先通过Object.keys()返回一个由对象的属性名组成的数组,再循环该数组,得到每个属性名和根据属性名获得的键值
var obj = {a: 1, b: 'two'};
Object.keys(obj).forEach((key)=>{
console.log(key, obj[key]); // a 1 b two
});