【JavaScript基础】浅析对象Object

101 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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
});