一、什么是对象
现实生活中:万物皆对象,对象是一个具体的事物,看得见摸得着的实物。
- 例如,一本书、一辆汽车、一个人可以是“对象”,一个数据库、一张网页、一个与远程服务器的连接也可以是“对象”。
在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
对象是由属性和方法组成的
- 属性:事物的特征,在对象中用属性来表示(常用名词)
- 方法:事务的行为,在对象中用方法来表示(常用动词)
比如
- 大小、颜色、重量、屏幕尺寸、厚度等 ----> 属性
- 打电话、发短信、玩游戏、砸核桃等 ----> 方法
二、为什么需要对象
保存一个值时,可以使用变量,保存多个值(一组值)时,可以使用数组。如果要保存一个人的完整信息呢?
例如,将"quan"的个人信息保存在数组中的方式为:
var arr = ['quan', '男', '56', '100'];
js中的对象表达结构更加清晰,更强大。quan的个人信息在对象中的表达结构如下:
quan.姓名 = 'quan'; ----> person.name = 'quan';
quan.性别 = '男'; ----> person.sex = '男';
quan.年龄 = 56; ----> person.age = 56;
quan.身高 = 100; ----> person.height = 100;
三、自定义对象的三种方式
在JavaScript中,现阶段我们可以采用是三种方式创建对象(object):
- 利用字面量创建对象
- 利用new Object创建对象
- 利用构造函数创建对象
(1)利用字面量创建对象
对象字面量:就是花括号{}里面包含了表达这个具体事物(对象)的属性和方法。
{}里面采用键值对的形式表示
- 键:相当于属性名
- 值:相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型、函数类型等)
类似于python里面的字典 {}
var d = {
'name':'xiao',
'age':18
}
对象的调用
- 对象里面的属性调用 : 对象 . 属性名 ,这个小点 . 就理解为“ 的 ”
- 对象里面属性的另一种调用方式 : 对象 [‘ 属性名’ ] ,注意方括号里面的属性必须加引号,我们后面会用
- 对象里面的方法调用:对象 . 方法名 () ,注意这个方法名字后面一定加括号
// 比python从字典获取值更加的方便
typeof d
// 'object'
d['name']
// 'xiao'
d.name
// 'xiao'
d.age
// 18
for(let i in d){
console.log(i,d[i])
} # 支持for循环,暴露给外界可以直接获取的也是键
VM281:2 name xiao
VM281:2 age 18
变量、属性、函数、方法总结
-
变量:单独声明赋值,单独存在
-
属性:对象里面的变量称为属性,不需要声明,用来描述该对象的特征
-
函数:单独存在的,通过“函数名 ()” 的方式就可以调用
-
方法:对象里面的函数称为方法,方法不需要声明,使用“对象 . 方法名 ()” 的方式就可以调用,方法用来描述该对象的行为和功能。
(2)利用 new Object 创建对象
var d2 = new Object()
d2
{}
typeof d2
'object'
d2.name = 'xiao' # 直接填入就可以
'xiao'
d2.age = 18
18
d2
{name: 'xiao', age: 18}
- Object() :第一个字母大写
- new Object() :需要 new 关键字
- 使用的格式:对象 . 属性 = 值 ;
(3)利用构造函数创建对象
① 概述
构造函数:是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
在js中,使用构造函数时要注意一下两点:
- 构造函数用于创建某一类对象,其首字母要大写
- 构造函数要和new一起使用才有意义
② 示例
-
构造函数,如 Stars() ,抽象了对象的公共部分,封装到了函数里面,它泛指某一大类( class )
-
创建对象,如 new Stars() ,特指某一个,通过 new 关键字创建对象的过程我们也称为对象实例化
-
在构造函数内部,
this
指针指向即将创建的新对象。
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
const john = new Person("John", "Doe");
- 也可以简化为利用ES6的类语法
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
const john = new Person("John", "Doe");
③ new 关键字
new 在执行时会做四件事情:
- 在内存中创建一个新的空对象。
- 让 this 指向这个新的对象。
- 执行构造函数里面的代码,给这个新对象添加属性和方法
- 返回这个新对象(所以构造函数里面不需要 return )
④ 注意
- 构造函数约定首字母大写。
- 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
- 构造函数中不需要 return 返回结果。
- 当我们创建对象的时候,必须用 new 来调用构造函数。
补充 遍历对象属性(for)
可以通过 for...in
循环遍历对象的所有可枚举属性,但不包括原型链上的属性。
语法
for (变量 in 对象名字){
// 在此执行代码
}
示例
语法中的变量是自定义的,它需要符合命名规范,通常我们会将这个变量写为k或者key
for (var k in obj) {
console.log(k); // 这里的 k 是属性名
console.log(obj[k]) // 这里的 obj[k] 是属性值
}
四、Date对象
(1)概述
- Date对象在JavaScript中是用于处理日期和时间的重要对象,可以方便地进行日期和时间的操作、比较和格式化。
- Date 对象是一个构造函数,所以我们需要实例化后才能使用。
(2)如何使用
① 创建Date对象:
- 可以使用
new Date()
构造函数来创建一个表示当前日期和时间的Date对象。 - 可以传递不同的参数来创建特定日期和时间的Date对象,如
new Date('2024-03-21')
或new Date(2024, 2, 21)
。
② 示例
- 创建当前日期和时间的对象实例
var currentDate = new Date();
- 创建指定日期和时间的对象实例
var specificDate = new Date(2023, 6, 5, 10, 30, 20); // 参数依次为年、月(从开始计数)、日、时、分、秒
③ 注意
- 如果Date()不写参数,就返回当前时间
- 如果Date()写参数,就返回括号里面输入的时间
(3)自定义时间
- 可以使用Date对象的对应方法来设置日期和时间的不同部分,如
setDate()
、setMonth()
、setFullYear()
、setHours()
、setMinutes()
、setSeconds()
等。
var date = new Date();
date.setFullYear(2024); // 设置年份
date.setMonth(8); // 设置月份(0表示一月,11表示十二月)
date.setDate(15); // 设置日期(月中的某一天)
date.setHours(18); // 设置小时
date.setMinutes(45); // 设置分钟
date.setSeconds(30); // 设置秒数
(4)日期格式化
如果我们想要 2024-03-21 11:11:11 格式的日期,要怎么办?
需要获取日期指定的部分,所以我们要手动的得到这种格式
方法名 | 说明 | 代码 |
---|---|---|
getFullYear() | 获取当前年份 | dateObj.getFullYear() |
getMonth() | 获取当前月份(0-11月) | dateObj.getMonth() |
getDate() | 获取当天日 | dateObj.getDate() |
getDay() | 获取星期几(周日为0-周六6) | dateObj.getDay() |
getDay() | 获取当前小时 | dateObj.getDay() |
getMinutes() | 获取当前分钟 | dateObj.getMinutes() |
getSeconds() | 获取当前秒 | dateObj.getSeconds() |
getMilliseconds() | 获取毫秒 | dateObj.getMilliseconds() |
(5)获取时间戳
- Date对象可以通过
getTime()
方法获取自 1970 年 1 月 1 日 00:00:00 UTC 起的毫秒数时间戳。
let date = new Date();
date.getTime(); // 获取时间戳
// 或者这么写
let now =+ new Date();
(6)其他方法
- Date对象还提供了其他一些方法,如
toDateString()
、toLocaleString()
、toUTCString()
等,用于返回不同格式的日期字符串。
toDateString()
:toDateString()
方法返回一个表示日期部分的字符串,不包括时间部分。- 返回的日期字符串格式因浏览器而异,可能是类似于"Wed Mar 21 2024"这样的格式。
const today = new Date();
const dateString = today.toDateString();
console.log(dateString); // 输出类似于 "Wed Mar 21 2024"
toLocaleString()
:toLocaleString()
方法返回一个表示日期和时间的本地化字符串,根据浏览器的语言环境返回不同格式。- 可能包括日期和时间,如"3/21/2024, 3:30:00 PM"。
const today = new Date();
const localString = today.toLocaleString();
console.log(localString); // 输出类似于 "3/21/2024, 3:30:00 PM"
toUTCString()
:toUTCString()
方法返回一个表示日期和时间的字符串,使用UTC时间。- 返回的字符串格式类似于"Wed, 21 Mar 2024 15:30:00 GMT"。
const today = new Date();
const utcString = today.toUTCString();
console.log(utcString); // 输出类似于 "Wed, 21 Mar 2024 15:30:00 GMT"
这些方法可以根据需要选择合适的日期和时间格式,并根据本地化需求或UTC时间显示日期。
五、JSON对象(重点掌握)
1、概述
JSON对象在JavaScript中是一个内置对象,用于处理JSON数据,实现了数据的序列化和反序列化。通过JSON对象,可以方便地在JavaScript中操作JSON数据。
在JavaScript中,JSON对象提供了两个核心方法来处理JSON数据:JSON.parse()
和 JSON.stringify()
。这两个方法允许你在JavaScript中解析和序列化JSON数据。
JSON.stringify(value)
: 将一个JavaScript值(通常是一个对象或数组)转换为一个JSON字符串。JSON.parse(text)
: 将一个JSON字符串转换回一个JavaScript对象。
JSON.stringify() ----> dumps (序列化)
JSON.parse() ----> loads (反序列化)
2、 JSON.parse()
-
从JSON字符串解析到对象
-
JSON.parse()
方法用于将 JSON 字符串解析为 JavaScript 对象。
语法如下:
JSON.parse(text[, reviver])
text
:要解析的 JSON 字符串。reviver
(可选):一个转换结果的函数,可以按需转换解析出的结果。
示例:
var jsonStr = '{
"name": "Alice", "age": 30
}';
var obj = JSON.parse(jsonStr);
console.log(obj.name); // 输出 "Alice"
console.log(obj.age); // 输出 30
3、 JSON.stringify()
-
序列化对象到JSON字符串
-
JSON.stringify()
方法用于将 JavaScript 值转换为 JSON 字符串。
语法如下:
JSON.stringify(value[, replacer[, space]])
value
:要转换为 JSON 字符串的值。replacer
(可选):一个转换结果的函数或数组,用于选择性地过滤和转换结果。space
(可选):用于控制缩进和间距的空格字符串。
示例:
var obj = {
name: "Alice", age: 30
};
var jsonStr = JSON.stringify(obj);
console.log(jsonStr); // 输出 '{"name":"Alice","age":30}'
4、注意事项:
- JSON 中的字符串必须使用双引号。
- JSON 不支持注释。
- JSON 键名必须是字符串。
- JSON 值可以是字符串、数字、布尔值、数组、对象、null。
在Web开发中,JSON经常用于前后端的数据交换,例如通过AJAX请求从服务器获取数据,或者将数据发送到服务器。由于JSON是文本格式,因此可以轻松地通过HTTP协议进行传输。
六、RegExp对象
JavaScript中的RegExp对象是用于匹配正则表达式的字符串。正则表达式是一个强大的工具,用于在文本中搜索特定的模式。
1、创建RegExp对象
创建RegExp对象有两种主要方法:
(1)字面量语法(比较麻烦)
let regex = /pattern/flags;
这里pattern是要匹配的模式,而Flags是可选的,表示正则表达式的行为(例如是否区分大小写、是否全局匹配等)。
// 字面量语法
let regex1 = /hello/i; // 不区分大小写的匹配 "hello"
(2)构造函数语法(推荐使用)
let regex = new RegExp('pattern', 'Flags');
在这里,pattern是一个字符串,表示要匹配的模式,而Flags是一个字符串,包含标志(flags),这些标志指定了正则表达式的行为。
// 构造函数语法
let regex2 = new RegExp('world', 'g'); // 全局匹配 "world"
2、RegExp对象的属性和方法
(1)属性
global
: 布尔值,表示是否设置了g标志(全局搜索)。ignoreCase
: 布尔值,表示是否设置了i标志(不区分大小写)。multiline
: 布尔值,表示是否设置了m标志(多行模式)。source
: 正则表达式的源文本(即模式字符串)。lastIndex
: 整数,表示下一次匹配的开始位置。flags
: 字符串,表示正则表达式的标志(如gi)。dotAll
: 布尔值,表示是否设置了s标志(点号匹配任何字符)。sticky
: 布尔值,表示是否设置了y标志(粘性搜索)。unicode
: 布尔值,表示是否设置了u标志(Unicode模式)。
(2)方法
-
test(string)
: 返回一个布尔值,表示正则表达式是否在指定的字符串中找到了匹配项。 -
exec(string)
: 在指定的字符串中执行搜索匹配,返回一个数组,包含了匹配项的结果。如果没有匹配项,则返回null。 -
match(str)
:返回字符串str
中与正则表达式匹配的结果数组。 -
search(str)
:返回字符串str
中第一个匹配的索引,如果没有找到则返回-1。 -
replace(str, replacement)
:在字符串str
中使用replacement
替换与正则表达式匹配的部分。
(3)示例
var regex = /hello/;
var str = "hello world";
// 使用 test 方法
console.log(regex.test(str)); // 输出true
// 使用 exec 方法
console.log(regex.exec(str)); // 输出["hello", index: 0, input: "hello world", groups: undefined]
// 使用 match 方法
console.log(str.match(regex)); // 输出["hello", index: 0, input: "hello world", groups: undefined]
// 使用 search 方法
console.log(str.search(regex)); // 输出0
// 使用 replace 方法
console.log(str.replace(regex, "hi")); // 输出"hi world"
3、正则表达式标志
(1)概述
-
g: 全局搜索,不仅返回第一个匹配项,还继续查找字符串中的所有匹配项。
-
i: 不区分大小写搜索。
-
m: 多行模式,^和$分别匹配字符串的开始和结束,以及任何行的开始和结束。
-
y: 粘性搜索,要求匹配必须从目标字符串的当前位置开始。
-
u: Unicode模式,正确处理四个字节的UTF-16编码。
-
s: 点号(.)匹配任何字符(包括\n和\r)。
(2)使用示例
// 正则表达式标志
let regexFlags = /apple/gi; // 不区分大小写且全局搜索 "apple"
console.log(regexFlags.test('Apple pie')); // true
console.log(regexFlags.test('apple pie')); // true
请注意,RegExp对象是不可变的,一旦创建了一个RegExp对象,就不能改变它的源模式或标志。如果需要不同的搜索行为,必须创建一个新的RegExp对象。
'''
在python中如果需要使用正则,需要借助于re模块
在js中需要你创建正则对象
'''
# 第一种 有点麻烦
let reg1 = new RegExp('^[a-zA-Z][a-zA-Z0-9]{5,11}')
# 第二种 个人推荐
let reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,11}/
# 匹配内容
reg1.test('quanhaodsb')
true
reg2.test('quanhaodsb')
true
# 题目 获取字符串里面所有的字母s
let abc = 'quandsb dsb dsb'
abc.match(/s/) # 拿到一个就停止了
['s', index: 5, input: 'quandsb dsb dsb', groups: undefined]
abc.match(/s/g) # 全局匹配,g就表示全局模式
(3) ['s', 's', 's']
# 全局匹配模式吐槽点
let reg3 = /^[a-zA-Z][a-zA-Z0-9]{5,11}/g
reg3.test('quandsb') # 全局模式有一个lastIndex属性
true
reg3.test('quandsb')
false
reg3.test('quandsb')
true
reg3.test('quandsb')
false
reg3.lastIndex
0
reg3.test('quandsb')
true
reg3.lastIndex
7
# 吐槽点2
let reg4 = /^[a-zA-Z][a-zA-Z0-9]{5,11}/
reg4.test()
true
reg4.test(undefined)
true
let reg5 = /undefined/
reg5.test('xiao')
false
reg5.test()
true
总结:在用js书写正则的时候一定要注意上述问题
七、Math对象
JavaScript中的Math
对象是一个内置的全局对象,用于执行数学计算。以下是Math
对象的一些常用属性和方法:
(1)常用属性
Math.PI
:表示圆周率π的近似值,约为3.14159。Math.E
:表示自然对数的底e的近似值,约为2.71828。
(2)常用方法
Math.abs(x)
:返回x的绝对值。Math.round(x)
:将x四舍五入为最接近的整数。Math.floor(x)
:返回小于或等于x的最大整数。Math.ceil(x)
:返回大于或等于x的最小整数。Math.min(x1, x2, ...)
:返回参数中的最小值。Math.max(x1, x2, ...)
:返回参数中的最大值。Math.sqrt(x)
:返回x的平方根。Math.pow(x, y)
:返回x的y次幂。Math.random()
:返回一个0到1之间的随机数。Math.sin(x)
、Math.cos(x)
、Math.tan(x)
:分别返回x的正弦、余弦和正切值(x为弧度)。Math.log(x)
:返回x的自然对数。Math.exp(x)
:返回e的x次幂。
(3)示例
console.log(Math.PI); // 输出圆周率π的值
console.log(Math.abs(-5)); // 输出5
console.log(Math.round(3.7)); // 输出4
console.log(Math.floor(3.7)); // 输出3
console.log(Math.ceil(3.2)); // 输出4
console.log(Math.min(2, 5, 1)); // 输出1
console.log(Math.max(2, 5, 1)); // 输出5
console.log(Math.sqrt(16)); // 输出4
console.log(Math.pow(2, 3)); // 输出8
console.log(Math.random()); // 输出0到1之间的随机数
Math
对象提供了许多常用的数学函数和常量,可以帮助进行各种数学计算。