String
当全局对象是一个字符串或者一个序列的构造函数
用途:字符串对于保存可以以文本形式表示的数据
需要注意的是Javascript 的字符串对象和基本字符串值(Boolean 和 Number 同理)
字符串字面量和直接调用字符串Sting方法,不是通过new String()生成字符串对象实例基本上都是基本字符串,javascript会自动将基本字符串转换为字符串对象,只有将基本字符串转化为字符串对象之后才可以使用字符串对象方法。
创建方式 const str = new String(‘str’);
typeOf str === Object
String.prototype 常用的有以下的方法
• charAt(index) 在字符串中返回指定类型
• slice(startIndex,endIndex) 提取某个字符串中一部分,并返回一个新的字符串
• split() 方法用来指定的分割字符串讲一个String对象分割成数组,以一个指定的分割个字符串来决定每个拆分的位置
• str.split(separator,limit)
• 可以逆转字符串,str.split(‘’).reverse().join(‘’);
• trim()
• endWith(searchString) 判断当前字符是否是以给定的一个字符串结尾的,返回值为true 或者是false
• startWith(searchString) 判断当前字符是否是以给定的一个字符串开始的,返回值为true 或者是false
• includes(searchString,index) 判断一个字符串是否包含在另一个字符串中,返回值为true 或者是false
• indexOf() 方法返回调用它的String 对象中第一次出现的指定值,找不到则返回-1 或者是
• lastIndexOf() 方法返回调用它的String 对象第一次出现的🈯️值,在一个字符中的指定位置fromIndex 处向后搜索
• localCompare() 使用方式 a.localCompare(‘b’)
返回一个数字表示是否引用字符串在排序中位于比较字符串的前面,后面或者是二者相同
当引用字符串在比较字符串前面时返回 -1
当引用字符串在比较字符串后面时返回1
相同位置返回0
• math() 用于正则匹配
• mathAll() 用于正则匹配
• padEnd() ECMAScript 2017首次被定义
• str.padEnd(targetLength,padString)
• 返回的是在原字符末尾填充指定的字符串直到目标长度形成新的字符串
• padStart() ECMAScript 2017首次被定义
• str.padStart(targetLength,padString)
• 返回的是在原字符开头填充字符串直到目标长度所形成新的字符串
• repeat()
• str.repeat(count)
• 返回的是新的字符串是重复了count遍原字符串
• toString 返回指定对象的字符串形式
Number/BigInt
Number 是数字对象 new Number()
如果参数无法被转换成数字,返回NaN
方法:
• Number.isNaN() 确定传递的值是否是 NaN。
• Number.isFinite() 确定传递的值类型及本身是否是有限数。
• Number.isInteger() 确定传递的值类型是“number”,且是整数。
• Number.isSafeInteger() 确定传递的值是否为安全整数 ( -(253 - 1) 至 253 - 1之间)。
• Number.parseFloat() 给定值的解析成浮点数
• Number.parseInt(string,radix) string代表被解析的值,radix 从2-36 进位系统的数字
将第一个参数转换为一个字符串,对该字符串进行解析,然后返回一个整数,或者是NaN
• toFixed(digits), 返回的是指定的digits位的小数,介于0-20 之间
• toString numObj.toString(radix) 指定要用于数字到字符串的转换的基数(从2到36)。如果未指定 radix 参数,则默认值为 10。
由于Number 有大小的限制,所以出现了一个BigInt() ,b表示大于 253 - 1 的整数,BigInt()可以表示任意大的整数,由于Number 与 BigInt 之间进行转换会损失精度,因而建议仅在值可能大于253 时使用 BigInt 类型,并且不在两种类型之间进行相互转换。
Boolean
布尔值的对象包装器
0 -0 null undefined NaN false 返回的是false
[],{} 1 返回的值是true
Function
• Function.prototype.call()
• 方法使用一个指定的this的值和单独给出一个或多个参数来调用一个函数,修改this的指向,call() 提供新的this 值给当前调用的函数/方法,可以使用call来实现继承,写一个方法,然后让另一个新的对象来继承它
• function.call(thisArg, arg1, arg2, …)
• Function.prototype.bind()
• bind() 方法创建一个新的函数,在bind() 被调用时,这个新函数的this被指定为bind()的第一个参数,而其余的参数将作为新函数的参数,供调用时使用,也可以改变当前this的指向
• Function.prototype.apply()
• 和call() 方法类似,区别就是call() 方法接受的是参数列表,而apply()接受的是一个参数数组
Array
构造数组的全局对象,在原型中提供了遍历和修改元素的相关操作
创建方式 const arr1=[1,2,3]
const arr2 = new Array(3)
const arr3 = new Array(‘element0’,’element1’,’element2’)
方法
Array.from() 从类数组对象或者可迭代对象中创建一个新的数组实例
Array.isArray() 用来判断某个变量是否是一个数组对象
Array.of() 根据一组参数来创建新的数组实例,支持任意类型的参数数量和类型
Array.prototype.constructor === Array
const arr=new Array();
修改的方法
• arr.copyWith(target,start,end)
• 方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度
• arr.fill(value,start,end)
• 将数组中的指定区间的所有元素,替换成某一个固定的值
• arr.pop()
• 删除数组中的最后一个元素,并且返回这个元素
• arr.push()
• 在数组的末尾添加一个或者多个元素,并且返回数组的长度
• arr.shift()
• 删除数组中的第一个元素,并且返回这个元素
• arr.unshift(element1,element2,..)
• 在数组的开头添加一个或者是多个元素,并返回该数组长度的方法
• Array.splice()
• 在任意的位置给数组添加或删除任意个元素
• arr.reverse()
• 颠倒数组中元素的排列顺序,及原先的第一个变成最后一个,原先的最后一个变成第一个
• arr.sort()
• 对数组元素进行排序,并返回当前的数组
访问的方法
• arr.concat()
• 返回一个由当前数组或者其他若干个数组或者若干个非数组值组成的新元素
• arr.includes()
• 判断当前数组中是否包含某一个值,如果是返回true,不是返回false
• arr.indexOf()
• 返回数组中第一个值与指定值相等的索引,如果找不到这样的元素,则返回-1
• arr.lastIndexOf()
• 返回数组中最后一个与指定元素先等元素的索引,如果找不到这样的元素,则返回-1
• arr.toString()
• 返回一个由数组元素组合而成的字符串
• arr.join()
• 所有的数组元素组成一个字符串
迭代的方法
forEach、map、includes、 filter、 find、 findIndex、 keys、 values、 entries、 reduce 、 reduceRight
Symbol
基本数据类型。Symbol()函数会返回symbol类型的值,比较特殊的是 这个对象不支持 new Symbol()
每个从Symbol() 返回的值都是唯一的,一个Symbol 值能作为对象属性的标识符,所以Symbol设计出来的目的就是,作为对象属性的唯一标识符,防止对象属性发生冲突
const sym1= Symbol()
可以显示转换成字符串,也可以转换成布尔值,就是不能转换成数值,+sym1 会报错
Symbols 在for…in 迭代中不可以枚举
当使用JSON。stringify()时以symbol 值作为键的属性会被完全忽略
Math
有一些常用的数学属性和方法,它的所有属性和方法都是静态的。
常用的方法有 Math.PI、Math.sin(x)、Math.abs(x)、Math.floor(x)、Math.round(x) 等等
需要注意的是Math.sin(x) 等等,三角函数值返回时弧度,如果需要计算角度的时候进行换算
弧度/(Math.PI/180)
Date
创建一个Date实例,呈现时间中的某个时刻,它返回的是基于1970年1月1日 UTC起经过的毫秒数
const today =new Date()
没有输入任何参数,返回当前的时间来创建一个date对象
可以获取时间,设置时间等等方法都有,简单的介绍一下经常使用的方法
1 today.getDate()/getDay()/getMonth() 获取具体想要的数据
2 today.setDate()/setFullYear() 设置其中的某个时间的参数
3 today.DateString()
4 today.toLocaleString()
5 today.vlueOf() 可以获取到一个秒级的数字
Map/WeakMap
Set 对象允许你存储的任何类型的唯一值,无论是原始中或者是对象引用,按照的是插入的顺序进行迭代,这个字典的作用很类似。for…of 循环在每次迭代后会返回一个形式为[key.value]
操作方法有:
• set(key, value):向字典中添加新元素
• get(key):通过键查找特定的数值并返回
• has(key):判断字典中是否存在键key
• delete(key):通过键 key 从字典中移除对应的数据
• clear():将这个字典中的所有元素删除
遍历方法有
• Keys():将字典中包含的所有键名以迭代器形式返回
• values():将字典中包含的所有数值以迭代器形式返回
• entries():返回所有成员的迭代器
• forEach():遍历字典的所有成员
WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的
两者的区别
1 WeakMap 只能存储对象,不能存储值,而Map可以
2 WeakMap 对象储存的对象都是被引用的,即垃圾回收机制不考虑其对该对象的引用,如果没有其它的变量或者是属性引用这个对象,则这个对象将被垃圾回收掉,所以WeakMap 对象里有多少成员元素,取决于垃圾回收机制有没有运行,运行前后的成员个数有可能不一致,WeakMap 对象无法被遍历
Set、WeakSet
Set 对象允许你存储的任何类型的唯一值,无论是原始中或者是对象引用,按照的是插入的顺序进行迭代,这个和数学的中的集合的作用的是很类似的,强调的是唯一性,这个特性可以实现数组的去重
方法有
size()
add(value)
clear()
delete(value)
has(value)
keys()
values()
entries()
WeakSet 对象允许将弱引用对象存储在一个集合中
方法有 add(value) 、has(value)、delete(value)
两者的区别
1 WeakSet 只能存储对象,不能存储值,而Set可以
2 WeakSet 对象储存的对象都是被引用的,即垃圾回收机制不考虑其对该对象的引用,如果没有其它的变量或者是属性引用这个对象,则这个对象将被垃圾回收掉,所以WeakSet对象里有多少成员元素,取决于垃圾回收机制有没有运行,运行前后的成员个数有可能不一致,WeakSet对象无法被遍历
Promise
Promise 是一个对象,它代表了一个异步操作的最终完成或者失败
有以下几种的状态
pending 初始状态,即不是成功,也不是失败
fulfilled: 表示操作成功
reject: 表示操作失败
方法 返回的都是一个promise的实例,所以Promise,可以进行链式调用
then(resolve=>{},reject=>{}) 完成之后,失败或者是成功的回调函数
all(iterable) 返回一个promise 实例,在iterable参数内所有的promise参数成功之后或者不包含promise 回调resolve,只要其中一个reject ,此实例回调reject的函数
allSettled(iterable) 和Promise.all() 不同的是这个函数方法将会返回的所有的iterable参数的完成状态,以一个数组的方式展现出来
race(iterable) 一旦iterable中某个promise 解决或者是拒绝,返回的promise就会resolved或者是reject
reject() 返回带有一个失败的原因
resolve() 返回带有一个成功的原因
finally() 无论是失败或者是成功都会调用的一个方法,如设置loading
catch() 处理拒绝的情况,或者是抛出异常的情况
Generator
Generator 函数是生成器函数,ES6 提供的一种异步编程解决方案,形式上也是一个普通函数
生成器函数在执行的时候可以暂停,又能在暂停处继续执行,所以函数名之前需要加*
通过next() 方法 返回一个yield 的值
return() 方法返回指定值并结束生成器
Object
构造函数创建一个对象的包装器,可以用来存储数据
每一个对象都会有一个属性描述符(也可以称之为数据描述符)
configurable:可配置 可以调用Object.defineProperty() 来修改属性描述符
enumerable:可枚举的属性 true/false
value
writable:可写,是否可以修改属性的值,如果是可以修改的,可以调用Object.defineProperty(),对属性进行修改
方法:
Object.assign()
通过复制一个或者多个对象来创建一个新的对象,返回的是一个新的对象
Object.create()
使用指定的原型对象和属性创建一个对象
Object.defineProperties()
给对象添加多个属性,并指定它们的属性
Object.entries()
返回自身可以枚举的属性,返回给定对象自身可枚举属性的 [key, value] 数组。例如 不可以查找 Symbol
Object.keys()
返回一个包含所有给定对象自身可枚举属性名称的数组。
Object.values()
返回给定对象自身可枚举值的数组。
Object.freeze()
可以冻结一个对象,冻结对象之后不能被修改,冻结一个对象之后对象的原型也不可以修改
Object.is()
比较两个值是否相同。所有 NaN 值都相等(这与和=不同)。
// 以下的方法主要在封装中用到的比较多,在业务场景中使用的不是很多
Object.getOwnPropertyDescriptor()
Object.getOwnPropertyNames()
Object.getOwnPropertySymbols()
Object.getPrototypeOf() 返回指定对象的原型对象
Object.isExtensible()
判断对象是否可扩展。
Object.isFrozen()
判断对象是否已经冻结。
Object.isSealed()
判断对象是否已经密封。
Object.preventExtensions()
防止对象的任何扩展,保留现有的属性
Object.seal()
防止其他代码删除对象的属性。
Object.setPrototypeOf()
设置对象的原型(即内部 [[Prototype]] 属性)。