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对象的创建
除了上面提到的“字面量”方法,我们还可以通过构造函数创建新对象。
使用构造函数创建对象,我们需要两步走:
- 创建一个构造函数,构造函数的名称常根据大驼峰命名法命名;
- 通过 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);