编程语言
429
1. 什么是对象
在JavaScript中, 对象是一种复合的数据类型, 用于保存一组无序的相关属性和方法的集合 属性:描述事物的特征,常用名词来定义 方法:描述事物的行为,常用动词来定义
JavaScript中对象分为以下几种:
- 内置对象:
在ES标准中定义的对象,在任何ES实现中都可以使用
如:
Math
,String
,Number
,Function
,Array
等。 - 宿主对象:
由JavaScript运行环境(浏览器)提供的对象
如:
BOM
,DOM
。 - 自定义对象 由开发人员自己创建的对象。
2. 为什么要用对象
假设我们需要展现一个人的属性, 以我们目前掌握的能力可以使用
//变量逐一定义 var name = "xiaobai"; var age = 20; var man = true; //数组定义 var person = ['xiaobai', 20, true];
我们发现使用变量可以保存一个值,使用数组可以保存多个值。但是想保存一个人的完整信息时,使用变量和数组都不太适合(浪费资源),这时就需要使用对象了。
3. 对象的基本使用
3.1 如何定义对象
JavaScript中定义对象的有三种主要方法
-
使用字面量来创建
在定义对象时,可以使用字面量大括号
{}
来定义。 在大括号中可以声明属性和方法。属性和值之间使用英文冒号来创建,属性与属性之间使用逗号来分隔。
var person = { 'name' : '张三', age : 18, gender : '男', say:function(){ console.log(this.name); } } console.log(person,typeof person); //{ name: '张三', age: 18, gender: '男', say: [Function: say] } object
(1) 对象中的属性名称是字符串, 我们可以把属性名称写在引号里, 也可以省略引号; (2) 属性的值如果是数字,则可以不写引号,否则需要写引号,当属性值不是数字并且没有写在引号中时,会把它当作变量来使用。
- 使用new关键字创建
var obj = new Object(); //语法格式 obj.name = '张三'; obj.age = 20; obj.speak = function() { console.log(this.name); } console.log(obj); //{ name: '张三', age: 20, speak: [Function (anonymous)] }
- 使用构造函数来创造 此方式是需要先创建一个构造函数对象。然后再使用new关键字来创建。
/*语法格式: function 对象(参数列表){设置} var 对象名称 = new 对象();*/ function Student(name,age){ this.name = name; this.age = age; } var stu = new Student('王五',21); console.log(stu, typeof stu); //Student { name: '王五', age: 21 } object
ps:
在定义构造函数时,函数名称的第一个字符要大写。
3.2 使用对象
- 当对象声明好以后,就可以使用
对象的引用名称.属性名
或对象引用名称.方法名
的 方式来使用这个对象。
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') //输出 张三 18 张三, 18, 男 hello 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']); //输出 张三 男
对于这两种访问对象的方法需要说明
如果属性名是数字,那么只能通过中括号的方式来读取, 如下
var person = { name: '张三', 10: 20, }; console.log(person); //console.log(person.10); // 不能这么读 console.log(person['10']); // 可以 //输出 { '10': 20, name: '张三' } 20
如果属性名称中有空格或特殊字符,那么属性名的引号就不能省略,访问这种属性时,只能通过中括号的方式来访问。 如下
var person = { name: '张三', 'first name': '小刘', }; console.log(person); //console.log(person.'first name'); // 也不行,会报错 console.log(person['first name']); // 可以 //输出 { name: '张三', 'first name': '小刘' } 小刘
当访问对象时是使用的某个变量时,则需要使用中括号的方式。不能使用 . 的方式。 如下
var x = 'name'; var obj = { name: 'xiaobai' } console.log(obj.name); console.log(obj['name']); console.log(obj[x]); //输出 xiaobai xiaobai xiaobai