JavaScript (八) 内置对象
内置对象( native object )是 ECMAScript 标准中定义的对象(标准内置对象)。内置对象独立与浏览器在任何 ECMAScript实现 中都可以使用
继承链
| 内置构造函数( 类 ) | 描述 | __proto__(原型) |
|---|---|---|
| Object 类型 | Js中所有的对象都是Object类型的实例,它们都会从Object.prototype继承属性和方法(如:toString()) | Function.prototype |
| Function 类型 | Js中所有的函数都是Function类型的实例,它们都会从Function.prototype继承属性和方法(如:apply()、call()等) | Function.prototype |
| Array 类型 | Js中所有的数组都是Array类型的实例,它们都会从Array.prototype继承属性和方法(如:length、push()、concat()等) | Function.prototype |
对象的创建
创建一个Array类型的对象(即创建一个数组)
1 | /* 语法 */ |
创建一个Function类型的对象(即创建一个函数)
1 | /* 语法 */ |
创建一个Object类型的对象(即创建一个对象)
1 | /* 语法 */ |
在 JavaScript 中字面量的创建方式只是实例化的一种简化语法
- 如:
var obj = {}等同于var obj = new Object()
如果不赋值只实例化则会创建一个匿名的( 临时的 )实例对象
- 如:
({name: 'Timeic'}).nameor[1, 2, 3].length
包装类型
在 Js 中有三种包装类型对象,分别是Number、String、Boolean
| 类 | __proto__(原型) |
|---|---|
| Number 类型 | Function.prototype |
| String 类型 | Function.prototype |
| Boolean 类型 | Function.prototype |
例:
1 | var num = new Number(666); //创建一个Number类型的对象 |
Number、String、Boolean分别对应三种基本数据类型,即数值型、字符串、布尔型。这三种基本数据类型可以像对象一样访问属性或调用方法,当访问某个属性时 js 引擎会自动创建一个对应的匿名的( 临时的 )包装类型对象,从该对象中获取属性和方法
如:'abc'.length or true.toString()
Date 对象
Date 对象用于处理日期与时间,通过new Date()来创建一个Date类型的实例对象,创建的Date实例对象会显示实例化时的日期和时间
例:
1 | //创建Date类型的实例对象 |
方法:
| 方法 | 描述 |
|---|---|
| getFullYear() | 返回一个指定的Date对象的完整年份(四位数年份) |
| getMonth() | 返回一个指定的Date对象为第几月 |
| getDate() | 返回一个指定的Date对象为一个月中的哪一日(1-31) |
| getDay() | 返回一个指定的Date对象为一周中的第几天,(0-6),0 表示星期天 |
| getHours() | 返回一个指定的Date对象的小时(0–23) |
| getMinutes() | 返回一个指定的Date对象的分钟(0–59) |
| getSeconds() | 返回一个指定的Date对象的秒(0–59) |
| getMilliseconds() | 返回一个指定的Date对象的秒(0–999) |
Math 对象
Math 对象用于执行数学任务,Math对象不需要创建实例,直接使用即可
静态属性(常量):
| 属性 | 描述 |
|---|---|
| E | 返回算术常量 e,即自然对数的底数(约等于2.718) |
| LN2 | 返回 2 的自然对数(约等于0.693) |
| LN10 | 返回 10 的自然对数(约等于2.302) |
| LOG2E | 返回以 2 为底的 e 的对数(约等于 1.414) |
| LOG10E | 返回以 10 为底的 e 的对数(约等于0.434) |
| PI | 返回圆周率(约等于3.14159) |
静态方法:
| 方法 | 描述 |
|---|---|
| abs(x) | 返回数的绝对值 |
| ceil(x) | 对数进行上舍入 |
| floor(x) | 对数进行下舍入 |
| max(x, y) | 返回 x 和 y 中的最高值 |
| min(x, y) | 返回 x 和 y 中的最低值 |
| pow(x, y) | 返回 x 的 y 次幂 |
| random() | 返回 0 ~ 1 之间的随机数 |
| round(x) | 把数四舍五入为最接近的整数 |
| sqrt(x) | 返回数的平方根 |
String 对象
String 类型对象是一个包含一组字符序列的对象
语法:
1 | var str = new String(字符串); //创建一个String类型对象 |
例:
1 | var str = new String('hello'); |
属性:
[下标]根据索引返回指定位置的一个字符length获取字符串长度
方法:
| 方法 | 描述 |
|---|---|
| charAt() | 根据索引,返回在指定位置的字符 |
| charCodeAt() | 根据索引返回指定位置字符的 Unicode 编码(十进制) |
| String.formCharCode() | 根据Unicode编码创建一个字符串 |
| concat() | 连接多个字符串 |
| indexOf() | 检索一个字符串中是否含有指定内容,如果有则返回其首次出现的位置(索引),没有则返回 -1 |
| lastIndexOf() | 检索一个字符串中是否含有指定内容,如果有则返回其最后出现的位置(索引),没有则返回 -1 |
| slice() | 截取字符串中指定的内容并返回 |
| substring() | 返回一个字符串在开始索引到结束索引之间的内容 |
| split() | 将字符串拆分成数组并返回 |
| toUpperCase() | 将字符串转换为大写形式并返回 |
| toLowerCase() | 将字符串转换为小写形式并返回 |
| search() | 搜索与正则表达式相匹配的值,并返回该值所在位置(索引) |
| match() | 查找一个或多个正则表达式的匹配,并返回一个结果数组 |
| replace() | 将字符串中指定内容替换为新的内容,并返回替换后内容 |
| replaceAll() | 将字符串中指定内容替换为新的内容,并返回替换后内容( 会替换所有匹配到的子字符串 ) |
| trim() | 去除字符串两端的空格,并返回去除后内容 |
| includes() | 检查一个字符串是否包指定的内容,如果包含返回 true,反之 false |
Array 对象
方法:
| 方法 | 描述 |
|---|---|
| Array.from() | 可以从 可迭代 或 类数组对象 创建一个新的浅拷贝的数组 |
| Array.of() | 通过可变数量的参数创建一个新的 Array 实例( 替代 new Array ),而不考虑参数的数量或类型 |
| array.copyWithin() | 浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度 |
| array.find() | 查找第一个符合条件的数组成员 |
| array.findIndex() | 查找第一个符合条件的数组成员的位置( index ) |
| array.findLast() | 逆向查找第一个符合条件的数组成员 |
| array.findLastIndex() | 逆向查找第一个符合条件的数组成员的位置( index ) |
| array.includes() | 检查一个数组是否包含一个指定的值,如果包含返回 true,反之 false |
| array.flat() | 将多维数组转为一维数组并返回 |
| array.at() | 返回指定位置上的数组成员,允许负数( 如:-1 倒数第一个成员 ) |
| array.toReversed() | 颠倒数组中元素的顺序,并返回颠倒后的数组( 不改变原数组 ) |
| array.toSorted() | 对数组的元素进行排序,并返回排列后的数组( 不改变原数组 ) |
| array.toSpliced() | 删除或替换数组中指定的元素,并将删除或替换后的数组返回( 不改变原数组 ) |
高阶函数:
array.forEach()
描述:按顺序为数组中的每个元素调用一次指定的函数
语法:
1 | 数组.forEach(回调函数, 回调函数中this的值) |
例:
1 | /* 例2 */ |
PS:forEach() 方法用于循环遍历数组,该方法不返回任何值,同时该方法不能中断执行,它总是将数组元素遍历完才结束,如果想在循环时根据条件中断执行建议使用 for 循环
array.map()
描述:按顺序为数组中的每个元素调用一次指定的函数,并将每一次调用的函数返回值组合成一个数组作为 map() 方法的返回值
语法:同 array.forEach() 方法
例:
1 | /* 例1 */ |
PS:map() 方法用于对数组中每个元素进行处理并返回一个新数组
array.filter()
描述:将满足条件的元素组合成一个新数组返回
语法:同 array.forEach() 方法
例:
1 | /* 例1: 将大于3的元素,作为一个新数组返回 */ |
PS:filter() 方法用于过滤数组中的元素
array.some() 与 array.every()
描述:这两个方法用于判断数组元素是否符合某种条件。返回一个布尔值
语法:同 array.forEach() 方法
例:
1 | /* 例1 */ |
some()方法是只要有一个元素的返回值是true,则some()方法的返回值就是true,否则返回falseevery()方法是所有元素的返回值都是true,every()方法才返回true,否则返回false
array.reduce() 与 array.reduceRight()
描述:按顺序为数组中的每个元素调用一次指定的函数,每一次执行 reduce方法都会将上一次计算结果( 函数返回值 )作为参数传入,最后将其结果汇总为单个返回值
语法:
1 | 数组.reduce(回调函数, 回调函数中上一次返回值的初始值) // 从数组第一个元素到数组最后一个元素 |
例:
1 | /* 例1 */ |
Object 对象
Object.create()
描述:以指定对象为原型创建新的对象,同时可以为新的对象指定新的属性,并对属性进行描述
语法:
1 | Object.create(对象, { 属性名: 属性描述符对象... }) //返回创建的新对象 |
例:
1 | /* 创建一个干净的对象 */ |
属性描述符
属性描述符是 JavaScript 提供的一种内部数据结构,用于描述对象的属性值,及控制其行为( 例如该属性是否可写、是否可配置、是否可修改以及是否可枚举等 )
分类:
- 数据描述符
- 存取描述符
数据描述符(数据属性)
| 键 | 值 |
|---|---|
value | 该属性对应的值,默认值 undefined |
writable | 值为 true 时,该属性的值( value )才能够被改变,默认值为 false |
configurable | 值为 true 时,该属性描述符的 configurable、enumerable 的值才能修改,同时该属性也能够从所属对象中删除,默认值为 false |
enumerable | 值为 true 时,该属性才会出现在对象的枚举(for in)属性中,默认值为 false |
存取描述符(访问器属性)
| 键 | 值 |
|---|---|
get | 值为一个函数。没有该函数,则默认值为undefined。当获取或访问当前属性时,会调用此方法 |
set | 值为一个函数。没有该函数,则默认值为undefined。当设置当前属性值时,会调用此方法 |
configurable | 值为 true 时,该属性描述符的 configurable、enumerable 的值才能修改,同时该属性也能够从所属对象中删除,默认值为 false |
enumerable | 值为 true 时,该属性才会出现在对象的枚举(for in)属性中,默认值为 false |
Object.getOwnPropertyDescriptor()
描述:获取属性描述符
语法:
1 | Object.getOwnPropertyDescriptor(对象, 属性) |
例:
1 | var obj = {} |
Object.defineProperty()
描述:定义指定对象的属性描述符
语法:
1 | Object.defineProperty(对象, 属性, 属性描述符对象) |
例:
1 | /* 修改一个值 */ |
Tips:使用对象字面量({ 属性名: 属性值 })或 对象.属性名 = 值 的方式添加的属性 可修改,可删除,可枚举(即属性描述符的enumerable、configurable、writable 的值为 true)
Object.defineProperties()
描述:定义指定对象的多个属性描述符
语法:
1 | Object.defineProperties(对象, { 属性名: 属性描述符对象... }) |
getter & setter方法
getter 将对象属性绑定到获取该属性时将被调用的函数
语法:
1 | { |
setter 将对象属性绑定到设置该属性值时将被调用的函数
语法:
1 | { |
例:
1 | var obj = { |
Object.getOwnPropertyNames()
描述:获取指定对象所有的属性名( 包括不可枚举属性 )集合( 数组 )
语法:
1 | Object.keys(对象) |
Object.keys()
描述:获取指定对象所有可枚举的属性名集合( 数组 )
语法:
1 | Object.keys(对象) |
Object.values()
描述:获取指定对象所有可枚举的属性值集合( 数组 )
语法:
1 | Object.values(对象) |
Object.entries()
描述:获取指定对象所有可枚举属性的名值对集合( 数组 )
语法:
1 | Object.entries(对象) |
Object.assign()
描述:将一个或多个源对象中所有可枚举的自有属性复制到目标对象(Shallow Copy 拷贝)
语法:
1 | Object.assign(目标对象, ...源对象) |
Object.preventExtensions()
描述:不可扩展对象(不能再添加新的属性或方法)
例:
1 | var obj = {}; |
Object.seal()
描述:密封的对象。一旦将对象进行了密封,则不能为该对象新增属性或方法、同时该对象已有属性的描述符的 configurable 的值将变为 false
例:
1 | var person = {name: 'Tom'}; |
Object.freeze()
描述:冻结的对象。一旦将对象进行了冻结,那么该对象不能做任何修改(不可新增属性或方法,已有属性的描述符的 configurable、writable 的值将变为 false)
例:
1 | var obj = { |




