开启掘金成长之旅!这是我参加「掘金日新计划·12月更文挑战」的第四天,点击查看活动详情
什么是对象?
在JavaScript中,对象是一种复合的数据类型,用于保存一组无序的相关属性和方法的集合。
属性:描述事物的特征,常用名词来定义
方法:描述事物的行为,常用动词来定义
JavaScript中对象分为以下几种:
- 内置对象:
在ES标准中定义的对象,在任何ES实现中都可以使用,如:Math,String,Number,Function,Array等。 - 宿主对象:
由JavaScript运行环境(浏览器)提供的对象,如:BOM,DOM。 - 自定义对象
由开发人员自己创建的对象。
为什么需要对象
例如:我们要存储人的信息
var name = ‘张三’;
var age = 18;
var gender = '女';
这种方式能够解决问题,但是会浪费很多资源。
还可以使用数组来定义:
var person = ['张三',18,'女'];
能够解决,但是不方便。
使用对象来进行存储,更加方便。
使用变量可以保存一个值,使用数组可以保存多个值。但是想保存一个人的完整信息时,使用变量和数组都不太适合,这时就需要使用对象了。
如何定义对象
在JavaScript中定义对象有三种方式:
- 使用字面量来创建
在定义对象时,可以使用字面量大括号{}来定义。在大括号中可以声明属性和方法。属性和值之间使用英文冒号来创建,属性与属性之间使用逗号来分隔。
var person = {
'name' : '张三',
age : 18,
gender : '男',
say:function(){
console.log(this.name);
}
}
console.log(person,typeof person);
说明:
(1) 对象中的属性名称是字符串,我们可以把属性名称写在引号里,也可以省略引号;
(2) 属性的值如果是数字,则可以不写引号,否则需要写引号,当属性值不是数字并且没有写在引号中时,会把它当作变量来使用。
- 使用new关键字来创建
语法格式:var对象引用名称 = new Object();
var obj = new Object();
obj.name = '张三';
obj.age = 20;
obj.speak = functon(){
console.log(this.name);
};
console.log(obj);
- 使用构造函数来创建
这种方式是需要先创建一个构造函数对象。然后再使用new关键字来创建。
语法格式:
function 对象(参数列表){设置}
var 对象名称 = new 对象();
function Student(name,age){
this.name = name;
tais.age = age;
}
var stu = new Student('王五',21);
console.log(stu,typeof stu);
说明:在定义构造函数时,函数名称的第一个字符要大写。
使用对象
当对象声明好以后,就可以使用“对象的引用名称.属性名”或“对象引用名称.方法名“的方式来使用这个对象。
var person = {
name: '张三',
age: 18,
gender: '男',
show: function() {
console.log(this.name + ', ' + this.age + ', ' + this.gender);
},
say:function(s) {
console.log('hello ' + s);
}
}
console.log(person.name);
console.log(person.age);
person.show();
person.say('world')
使用对象的属性还可以通过“对象引用名称[属性名]”的方式来访问。
var person = {
name: '张三',
age: 18,
gender: '男',
show: function() {
console.log(this.name + ', ' + this.age + ', ' + this.gender);
},
say: function(s) {
console.log('hello ' + s);
}
}
console.log(person.name);
console.log(person['gender']);
什么时候使用.的方式,什么时候使用[]的方式?
(1)如果属性名是数字,那么只能通过中括号的方式来读取。
var person = {
name: '张三',
10: 20,
};
console.log(person);
//console.log(person.10); // 不能这么读
console.log(person['10']); // 可以
(2)如果属性名称中有空格或特殊字符,那么属性名的引号就不能省略,访问这种属性时,只能通过中括号的方式来访问。
var person = {
name: '张三',
'first name': '小刘',
};
console.log(person);
//console.log(person.'first name'); // 也不行,会报错
console.log(person['first name']); // 可以
(3)当访问对象时是使用的某个变量时,则需要使用中括号的方式。不能使用 . 的方式。
var x = 'name';
var obj = {
name: '张三丰'
}
console.log(obj.name);
console.log(obj['name']);
console.log(obj[x]);