1、什么是对象
在
JavaScript
中,对象是一种复合的数据类型,用于保存一组无序的相关属性和方法的集合。
属性:
描述事物的特征,常用名词来定义
方法:
描述事物的行为,常用动词来定义
JavaScript
中对象分为以下几种:
(1)
内置对象
在
ES
标准中定义的对象,在任何
ES
实现中都可以使用,如:
Math
、
String
、
Number
、
Function
、
Array
等。
(2)
宿主对象
由
JavaScript
运行环境(浏览器)提供的对象,如:
BOM
、
DOM
。
(3)自定义对象
由开发人员自己创建的对象。
2、为什么需要对象
例如:我们要存储人的信息
var name = '张三';
var age = 18;
var gender = '女';
这种方式能够解决问题,但是会浪费很多资源。
还可以使用数组来定义:
var person = ['张三', 18, '女'];
能够解决,但是不方便。
使用对象来进行存储,更加方便。
使用变量可以保存一个值,使用数组可以保存多个值。但是想保存一个人的完整信息时,使用变量和数组都不太适合,这时就需要使用对象了。
3、如何定义对象
在
JS
中定义对象有以下三种方式:
(1)使用字面量来创建;
(2)
使用
new
关键字来创建;
(3)使用构造函数来创建
3.1、字面量创建
在定义对象时,可以使用字面量大括号
{}
来定义。在大括号中可以声明属性和方法。属性和
值之间使用英文冒号来创建,属性与属性之间使用逗号来分隔。
var person = {
'name': '张三',
age: 18,
gender: '男',
say: function() {
console.log(this.name);
}
}
console.log(person, typeof person);
说明:
(1)对象中的属性名称是字符串,我们可以把属性名称写在引号,也可以省略引号;
(2)属性的值如果是数字,则可以不写引号,否则需要写引号,当属性值不是数字并且没有写在引号中时,会把它当作变量来使用。
3.2、使用new object
语法格式:var 对象引用名称 = new Object();
var obj = new Object();
obj.name = '李四';
obj.age = 20;
obj.speak = function() {
console.log(this.name);
};
console.log(obj);
3.3、使用构造函数
这种方式是需要先创建一个构造函数对象。然后再使用
new
关键字来创建。
语法格式:
function
对象
(
参数列表
){
设置
}
var
对象名称
=
new
对象
();
function Student(name, age) {
this.name = name;
this.age = age;
}
var stu = new Student('王五', 21);
console.log(stu, typeof stu);
说明:在定义构造函数时,函数名称的第一个字符要大写。
4、使用对象
当对象声明好后,就可以使用
对象的引用名称
.
属性名
或
对象引用名称
.
方法名
的方式来使用这
个对象。
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]);
5、内置对象
JavaScript
提供了多个内置对象:
Math
、
Date
、
String
、
Function
、
Array
等。
5.1、Math()
Math
对象不是构造函数,它具有数学常数和函数的属性和方法。跟数学相关的运算(求绝对
值,取整、最大值等)可以使用
Math
中的成员。
示例:
console.log(Math.max(90, -10, 45, 93, 87));
console.log(Math.min(90, -10, 45, 93, 87));
// floor 返回比它小的最大的整数
console.log(Math.floor(2.9)); // 2
console.log(Math.floor(-2.9)); // -3
// ceil 返回比它大的最小的整数
console.log(Math.ceil(2.1)); // 3
console.log(Math.ceil(-2.1)); // -2
// round 四舍五入
console.log(Math.round(4.6)); // 5
console.log(Math.round(4.5)); // 5
console.log(Math.round(4.4)); // 4
// random 随机数
console.log(Math.random());
5.2、Date()
Date
对象和
Math
对象不一样,
Date
是一个构造函数,所以使用时需要实例化后才能使用其中
具体方法和属性。
示例:
// Date 是一个构造函数,要使用它之前需要实例化这个对象,通过 new 关键字来实现
var d = new Date();
console.log(d); //Mon Feb 14 2022 16:24:11 GMT+0800 (中国标准时间)
console.log(d.getFullYear()); //年
console.log(d.getMonth() + 1); //月
console.log(d.getDate()); //获取月中的天
console.log(d.getHours()); // 小时
console.log(d.getMinutes()); // 分钟
console.log(d.getSeconds()); // 秒钟
console.log(d.getMilliseconds()); // 毫秒
console.log(d.getDay()); //获取在周中的天
console.log(d.getUTCDate());
console.log(d.toLocaleString()); //2022/2/14 16:32:58
console.log(d.toTimeString()); //16:32:58 GMT+0800 (中国标准时间)
console.log(d.toDateString()); //Mon Feb 14 2022
console.log(d.toLocaleDateString()); //2022/2/14
console.log(d.toLocaleTimeString()); //16:32:58
注意:
(1)使用getMonth()方法获取到的是当前月份减一的值;
(2)获取月中的天数的方法是getData(),获取周中天的方法是getDay()。
5.3、String()
在
JS
中为我们提供了三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象。
(1)
String()
:可以将基本数据类型字符串转换为
String
对象;
(2)Number()
:可以将基本数据类型的数字转换为
Number
对象;
(3)
Boolean()
:可以将基本数据类型的布尔值转换为
Boolean
对象
包装类就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。
var n = 10;
console.log(n, typeof n);
n = Number(n);
console.log(n, typeof n);
var f = true;
console.log(typeof f);
console.log(typeof Boolean(f));
字符串不可变是指当字符串的值是不可变的。当重新给字符串变量赋值时,变量之前的值不会被
修改,而是在内在中重新开辟了一个空间,然后把地址指向了新的内在空间地址而已。
因为字符串的不可变性,因此不建议在循环中使用字符串拼接操作。(占内存)