JavaScript - 内建对象
编辑JavaScript 中的内建对象是由语言本身提供的一系列对象,无需实例化即可使用。这些对象覆盖了从数学计算、日期处理到数据结构操作等多种功能。常见的内建对象包括
Object
,Array
,Math
,Date
,JSON
,RegExp
等。
内建对象
>解构赋值
ES6中引入的一种新的赋值方式,它允许我们从数组或对象中提取数据并赋值给新的变量。这种语法形式非常简洁,使得变量的赋值和声明更加直观和方便。
const arr = ["孙悟空", "猪八戒", "沙和尚"]
let a,
b,
c
// a = arr[0]
// b = arr[1]
// c = arr[2]
;[a, b, c] = arr // 解构赋值
let [d, e, f, g] = ["唐僧", "白骨精", "蜘蛛精", "玉兔精"] // 声明同时解构
console.log(d, e, f, g)
// ;[d, e, f, g] = [1, 2, 3]
// ;[d, e, f = 77, g = 10] = [1, 2, 3]
;[d, e, f = 77, g = g] = [1, 2, 3]
let [n1, n2, ...n3] = [4, 5, 6, 7] // 解构数组时,可以使用...来设置获取多余的元素
// console.log(n1, n2, n3)
function fn(){
return ["二郎神", "猪八戒"]
}
let [name1, name2] = fn()
// 可以通过解构赋值来快速交换两个变量的值
let a1 = 10
let a2 = 20
// let temp = a1
// a1 = a2
// a2 = temp
;[a1, a2] = [a2, a1] // [20, 10]
const arr2 = ["孙悟空", "猪八戒"]
// console.log(arr2)
;[arr2[0], arr2[1]] = [arr2[1], arr2[0]]
// console.log(arr2)
// console.log("a1 =", a1)
// console.log("a2 =", a2)
/*
数组中可以存储任意类型的数据,也可以存数组,
如果一个数组中的元素还是数组,则这个数组我们就称为是二维数组
*/
const arr3 = [["孙悟空", 18, "男"], ["猪八戒" ,28, "男"]]
// for(let stu of arr3){
// for(let v of stu){
// console.log(v)
// }
// }
let [[name, age, gender], obj] = arr3
console.log(name, age, gender)
console.log(obj)
>对象的解构
const obj = { name: "孙悟空", age: 18, gender: "男" }
// let { name, age, gender } = obj // 声明变量同时解构对象
let name, age, gender
;({ name, age, gender } = obj)
let { address } = obj // 没有的属性返回undefined
// console.log(name, age, gender)
let {name:a, age:b, gender:c, address:d="花果山"} = obj
console.log(a, b, c, d)
>对象的序列化
JSON.stringify() —— 可以将一个对象转换为 JSON 字符串
JSON.parse() —— 可以将一个 JSON 格式的字符串转换成 JS 对象
编写 JSON 的注意事项:
JSON 字符串有两种类型
JSON 对象{}
JSON 数组[]
JSON 字符串的属性名必须用双引号引起来
JSON 中可以使用的属性值(元素)
数字(Number)
字符串(String) 必须使用双引号
布尔值(Boolean)
空值(Null)
对象(Object {})
数组(Array [])
JSON的格式和JS对象的格式基本上一致的。
注意:JSON字符串如果属性是最后一个,则不要再加,
/*
对象的序列化
- JS中的对象使用时都是存在于计算机的内存中的
- 序列化指将对象转换为一个可以存储的格式
在JS中对象的序列化通常是将一个对象转换为字符串(JSON字符串)
- 序列化的用途(对象转换为字符串有什么用):
- 对象转换为字符串后,可以将字符串在不同的语言之间进行传递
甚至人可以直接对字符串进行读写操作,使得JS对象可以不同的语言之间传递
- 用途:
1. 作为数据交换的格式
2. 用来编写配置文字
- 如何进行序列化:
- 在JS中有一个工具类 JSON (JavaScript Object Notation) JS对象表示法
- JS对象序列化后会转换为一个字符串,这个字符串我们称其为JSON字符串
- 也可以手动的编写JSON字符串,在很多程序的配置文件就是使用JSON编写的
*/
const obj = {
name: "孙悟空",
age: 18,
}
// 将obj转换为JSON字符串
const str = JSON.stringify(obj) //JSON.stringify() 可以将一个对象转换为JSON字符串
const obj2 = JSON.parse(str) // JSON.parse() 可以将一个JSON格式的字符串转换为JS对象
// console.log(obj)
// console.log(str) // {"name":"孙悟空","age":18}
// console.log(obj2)
const str2 = `{"name":"猪八戒","age":28}`
const str3 = "{}"
const str4 = '["hello", true, []]'
console.log(str2)
>使用 JSON 进行深复制
const obj = {
name: "孙悟空",
friend: {
name: "猪八戒",
},
}
// 对obj进行浅复制
const obj2 = Object.assign({}, obj)
// 对obj进行深复制
const obj3 = structuredClone(obj)
// 利用JSON来完成深复制
const str = JSON.stringify(obj)
const obj4 = JSON.parse(str)
// const obj5 = JSON.parse(JSON.stringify(obj))
>Map
创建Map
new Map()
属性和方法
map.size() 获取map中键值对的数
map.set(key, value) 向map中添加键值对
map.get(key) 根据key获取值
map.delete(key) 删除指定数据
map.has(key) 检查map中是否包含指定键
map.clear() 删除全部的键值对
map.keys() - 获取map的所有的key
map.values() - 获取map的所有的value
/*
- Map用来存储键值对结构的数据(key-value)
- Object中存储的数据就可以认为是一种键值对结构
- Map和Object的主要区别:
- Object中的属性名只能是字符串或符号,如果传递了一个其他类型的属性名,JS解释器会自动将其转换为字符串
- Map中任何类型的值都可以称为数据的key
*/
const obj2 = {}
const obj = {
"name":"孙悟空",
'age':18,
[Symbol()]:"哈哈",
[obj2]:"嘻嘻"
}
// console.log(obj)
// 创建一个Map
const map = new Map()
map.set("name", "孙悟空")
map.set(obj2, "呵呵")
map.set(NaN, "哈哈哈")
map.delete(NaN)
// map.clear()
console.log(map)
console.log(map.get("name"))
console.log(map.has("name"))
const map = new Map()
map.set("name", "孙悟空")
map.set("age", 18)
map.set({}, "呵呵")
// 将map转换为数组
const arr = Array.from(map) // [["name","孙悟空"],["age",18]]
const arr = [...map]
const map2 = new Map([
["name", "猪八戒"],
["age", 18],
[{}, () => {}],
])
// 遍历map
// for (const [key, value] of map) {
// // const [key, value] = entry
// console.log(key, value)
// }
// map.forEach((key, value)=>{
// console.log(key, value)
// })
for(const key of map.keys()){
console.log(key)
}
>Set
创建Set
new Set()
new Set([...]
方法
size 获取数量
add() 添加元素
has() 检查元素
delete() 删除元素
/*
Set
- Set用来创建一个集合
- 它的功能和数组类似,不同点在于Set中不能存储重复的数据
*/
// 创建一个Set
const set = new Set()
// 向set中添加数据
set.add(10)
set.add("孙悟空")
set.add(10)
// console.log(set)
// for(const item of set){
// console.log(item)
// }
const arr = [...set]
// console.log(arr)
const arr2 = [1,2,3,2,1,3,4,5,4,6,7,7,8,9,10]
const set2 = new Set(arr2)
console.log([...set2])
>Math
Math是一个工具类,它为我们提供了数学运算相关的一些常量和方法
常量
Math.PI 圆周率
方法
Math.abs( ) 求一个数的绝对值
Math.min( ) 求多个值中的最小值
Math.max( ) 求多个值中的最大值
Math.pow( ) 求x的y次幂
Math.sqrt( ) 求一个数的平方根
Math.floor( ) 向下取整
Math.ceil( ) 向上取整
Math.round( ) 四舍五入取整
Math.trunc( ) 直接去除小数位
Math.random( ) 生成一个0-1之间的随机数
// console.log(Math.PI)
let result = Math.abs(10)
result = Math.abs(-10)
result = Math.min(10, 20, 30, 44, 55, -1)
result = Math.max(10, 20, 30, 44, 55, -1)
result = Math.pow(4, 2) // 4 ** 2
result = Math.sqrt(4) // 4 ** .5
result = Math.floor(1.2)
result = Math.ceil(1.2)
result = Math.round(1.4)
result = Math.trunc(1.5)
for (let i = 0; i < 50; i++) {
/*
生成0-5之间的随机数
Math.random() --> 0 - 1
生成 0-x之间的随机数:
Math.round(Math.random() * x)
Math.floor(Math.random() * (x + 1))
生成 x-y 之间的随机数
Math.round(Math.random() * (y-x) + x)
*/
// result = Math.round(Math.random() * 5)
// result = Math.floor(Math.random() * 6)
// 1-6
// result = Math.round(Math.random() * 5 + 1)
// 11 - 20
result = Math.round(Math.random() * 9 + 11)
console.log(result)
}
>Date
在 JS 中所有的和时间有关的数据都由 Date 对象来表示
创建Date
let d = new Date() //直接通过new Date()创建时间对象时,它创建的是当前时间的对象
// 可以在 Data()的构造函数中,传递一个表示时间的字符串
// 字符串的格式:月/日/年 时:分:秒
d = new Date("12/31/2024 00:00:00")
// 字符串的格式:年-月-日T时:分:秒
d = new Date("2024年12月31日T00:00:00")
// new Date(年份, 月, 日, 时, 分, 秒, 毫秒)
d = new Date("2024,11,31,00,00,00")
方法
getFullyear( )获取4 位年份
getMonth( ) 返回当前日期的月份( 0 - 11 )
getDate( ) 返回当前几日
getDay( ) 返回当前日期是周几(0 - 6) 0 表示周日
getHours( ) 返回当前时间的小时(0-23)
getMinutes( ) 返回当前时间的分钟(0-59)
getSeconds( ) 返回当前时间的秒数(0-59)
getMilliseconds( ) 返回当前时间的毫秒数(0-999)
getTime( ) 返回当前日期对象的时间戳
时间戳:自 1970年1月1日0时0分0秒到当前时间所经历的毫秒数
Date.now( ) 获取当前的时间戳
>日期格式化
toLocaleDateString( ) —— 将日期转换为本地的字符串
toLocaleTimeString( ) —— 将时间转换为本地的字符串
toLocaleString( ) —— 可以将一个日期转换为本地时间格式的字符串
参数
描述语言和国家信息的字符串
zh-CN 中文中国
zh-HK 中文香港
en-US 美国
以对象作为参数,通过对象的属性对日期配置
dateStyle 日期 : full , long , medium , short
timeStyle 时间 : full , long , medium , short
hour12 时制 : ture , false
weekday 星期 : long , narrow , short
year 年份 : numeric , 2-digit
let d = new Date()
let result = d.toLocaleString("zh-CN", {
year: "numeric",
month: "long",
day: "2-digit",
weekday: "short",
})
console.log(result)
>包装类
在 JS 中,除了直接创建原始值外,也可以创建原始值的对象。
不推介的做法:
new String( ) 创建 String 类型的对象
new Number( ) 创建 Number 类型的对象
new Boolean( ) 创建 Boolean 类型的对象
let str = new String("hello")
let num = new Number(11)
let bool = new Boolean(true)
let bool2 = new Boolean(true)
alert(bool == bool2) // 比较的是内存地址,所以会判断 false
在 JS 中一共有 5 个包装类:
String --> 字符串包装为 String 对象
Number --> 数值包装为 Number 对象
Boolean --> 布尔值包装为 Boolean 对象
BigInt --> 大整数包装为 BigInt 对象
Symbol --> 符号包装为 Symbol 对象
通过包装类可以将一个原始值包装为一个对象,当我们对一个原始值调用方法或属性时,JS解释器会临时将原始值包装为对应的对象,然后调用这个对象的属性或方法。
由于原始值会被临时转换为对应的对象,这就意味着对象中的方法都可以直接通过原始值来调用。
>字符串的方法
字符串其本质就是一个字符数组,例如:"hello" --> ["h","e","l","l","o"]
字符串的很多方法都和数组是非常类似的。
ength 获取字符串的长度
字符串[索引] 获取指定位置的字符
let str = "hello"
console.log(str.length)
console.log(str[0])
属性和方法
请注意!字符串是不可变属性!
str.at( ) 根据索引获取字符,可以接受负索引
let str = "hello" console.log(str.at(0)) //输出 H console.log(str.at(3)) //输出 l console.log(str.at(-4)) //输出 e
str.charAt( ) 根据索引获取字符,不接受负索引
str.concat( ) 用来连接两个或多个字符串
str.includes( ) 用来检查字符串中是否包含某个内容
let str = "hello hello how are you" console.log(str.includes("hello")) //输出 true console.log(str.includes("hello",13)) //第二个参数为字符串的起始位置
str.indexof( )
str.lstIndexOf( )
str.startsWith( ) 检查一个字符串是否以指定内容开头
str.endsWith( ) 检查一个字符串是否以指定内容结尾
str.padStart( ) 通过添加指定的内容,使字符串保持某个长度
str.padEnd( ) 通过添加指定的内容,使字符串保持某个长度
str.replace( ) 使用一个新字符串替换一个指定内容
str.replaceAll( ) 使用一个新字符串替换所有指定内容
str.slice( ) 对字符串进行切片
str.substring( ) 截取字符串
str.split( ) 用来将一个字符串拆分为一个数组
str.toLowerCase( ) 将字符串转换为小写
str.toUpperCase( ) 将字符串转换为大写
str.trim( ) 去除前后空格
str.trimStart( ) 去除开始空格
str.trimEnd( )去除结束空格
查看更多...
- 1
- 0
-
分享