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创建Mapnew 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的所有的keymap.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 创建Setnew 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])>MathMath是一个工具类,它为我们提供了数学运算相关的一些常量和方法常量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 对象来表示创建Datelet 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 , shorttimeStyle 时间 : full , long , medium , shorthour12 时制 : ture , falseweekday 星期 : long , narrow , short year 年份 : numeric , 2-digitlet 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)) //输出 estr.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( )去除结束空格查看更多...