7.1JavaScript 对象是拥有属性和方法的数据,也是重要的数据类

什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合:

let person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};

构成:

  • 大括号:定义一个对象;
  • person:定义的对象被赋值给
  • firstName:“John”, :键值对(key: value),键值之间用
  • 一个对象中可以包含多个键值对,每个键值对之间用,隔开,最后一个键值对后可以加,也可以不加
  • 此时person中保存的其实是对象的内存地址。而不是对象本身。这种赋值被称为“引用”。
方法

对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型,当它是函数的时候,我们把这个属性称为“方法”,它可以像函数那样调用:

let person = {
  name: 'henry',
  age: 18,
  run: function() {
    console.log('running');
  }
}

person.run();

7.2对象的创建

除了上面提到的“字面量”方法,我们还可以通过构造函数创建新对象。
使用构造函数创建对象,我们需要两步走:

  1. 创建一个构造函数,构造函数的名称常根据大驼峰命名法命名;
  2. 通过 new 创建对象实例;
function Person(name,age){
        this.name = name;
        this.age = age;
 
        this.showName = function () {
            console.log(this.name);
        };
        this.showAge = function () {
            console.log(this.age);
        };
    }
    var obj1 = new Person("Kitty","21");
    var obj2 = new Person("Luo","22");
 
    obj1.showName();//Kitty
    obj1.showAge();//21
 
    obj2.showName();//luo
    obj2.showAge();//22

7.3 对象的属性操作

JavaScript有两种方式读取对象的读取

:点运算符".“和方括号运算符”[ ]"

let person = {
  name: 'henry',
  age: 18
}

console.log(person.name);
console.log(person['name']);
let person = {
  name: 'henry',
  age: 18,
  parents: {
    papa: 'jack',
    mama: 'mary'
  }
}

console.log(person.parents.papa);
console.log(person['parents']['mama']);
JavaScript对象属性的赋值
let person = {
  name: 'henry',
  age: 18
}

person.name = 'tom';
person['age'] = 10

console.log(person.name);
console.log(person.age);
JavaScript对象其所有的属性

使用Object.keys(objects)可以查看其属性;

let person = {
  name: 'henry',
  age: 18
}

console.log(Object.keys(person));//返回一个数组:由对象所有的属性名构成

let person = {
  name: 'henry',
  age: 18
}

delete person.name;

console.log(person)

let person = {
  name: 'henry',
  age: 18
}

person.gender = 'male';

遍历对象的所有属性(for…in)

for…in
语句中使用方括号标记以枚举一个对象的所有属性。为了展示它如何工作,下面的函数当你将对象及其名称作为参数传入时,显示对象的属性:

let person = {
  name: 'henry',
  age: 18,
}

for (var key in person) {
  console.log('键名:' + key + ';键值:' + person[key]);
}
}

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for…in
循环遍历该对象时返回的顺序一致

// simple array
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

// array like object
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

// array like object with random key ordering
var anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']

7.5JavaScript的对象继承

Object 是 JavaScript 提供的基本对象,JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实例。keys 是 Object 对象的一个静态方法。

// 字面量
let o1 = {
  name: 'alice'
};

// 构造函数
let o2 = new Object;
let o3 = new Object();

// 继承
let o4 = new o1();

在上面的代码中,最后一种方法创建的 o4 对象继承自 o1,那么 o1 就是 o4 的原型。
那什么又是原型呢?
原型其实也是 JavaScript 中的一个对象。那为什么要提出原型的概念呢,这是为了找对象继承的上一级对

  • o1 继承自 Object,Object 就是 o1 的原型一个对象,
  • 它称呼继承的上一级对象为原型,它自己也可以称作原型链下一级对象的原型。

7.6JavaScript判断对象属性的存在(in)

let person = {
  name: 'henry',
  age: 18,
}

'name' in person;
'gender' in person;
'toString' in person;

输出:
true
false
true

toString是 Object 对象的属性。person 继承自 Object 所以也有这个属性。
所以说明属性有两种:一种是自身属性,一种是继承属性

自身属性判断是否存在:hasOwnProperty

let person = {
  name: 'henry',
  age: 18,
}

person.hasOwnProperty('name');
person.hasOwnProperty('gender');
person.hasOwnProperty('toString');

输出:
true
false
false

7.7js中JSON对象与字符串之间的相互转化

ar str = '{ "name": "programer", "age": "18" }';  //JSON字符串
1、JSON格式转换为JS对象

var obj = JSON.parse(str);// 将字符串转换为JS对象

2、将JS对象转化为JSON格式

var str = JSON.stringify(obj);