this指针
this指针指向函数运行时的环境
如果new出了一个实例,this就指向该实例
this指针的优先级:foo() < obj.foo() < foo.call(obj) < new foo()
箭头函数没有自己的this、arguments、super、new.target,没有原型对象prototype不能用作构造函数

数组
join() //把数组中所有元素放入一个字符串,元素按指定分隔符号进行分隔
slice(起始索引,终止索引)返回指定索引的后续数组,包括起始索引,不含终止索引,不会修改原数组
e.g a = [1,2,3]
a.slice(1) //[2,3]
splice(索引位置,删除的元素个数,添加的元素)从指定索引位置开始删除元素,第三个参数可选,添加的元素在指定索引位置
迭代方法:五个方法都有三个参数
every(当前数据项,数据项索引,数组本身):对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
some():只要有一项运行函数为true,则返回true
filter()
map()
foeEach()
map和forEach的区别:map有返回值,而forEach没有
indexOf(指定的元素,开始查找该元素的索引(可选)):返回要查找的指定元素,在指定查找位置开始后第一次出现的索引
lastIndexOf():查找指定元素最后一次出现位置的索引

对象
Object.getOwnPropertyDescriptor(对象,'对象属性名') //获取该属性的描述对象
会忽视enumerable为false的属性的四个操作:
for in
Object.keys()
JSON.stringify()
Object.assign()
遍历对象属性的方法:
for in :遍历对象自身和继承的可枚举属性(不含Symbol属性)
Object.keys(obj):遍历自身(不含继承)的可枚举属性(不含Symbol)的键名
Object.getOwnPropertyNames(obj):自身所有属性(包括不可枚举属性,但不含Symbol属性)的键名
Object.getOwnPropertySymbols(obj):返回自身所有有Symbol属性的键名
Reflect.ownKeys(obj):对象自身(不含继承的)所有键名,不管键名是否是Symbol或是否可枚举

字符串
String.fromCharCode() //将unicode码转为字符串
split() //将字符串分割为字符串数组
substr(指定索引号,抽取的字符串长度)//获取子字符串
substring() //获取两个指定索引号之间的字符串

正则表达式
语法:/正则表达式主体/修饰符
修饰符:i //不区分大小写; g //全局匹配; m //多行匹配
test()方法 //检测字符串是否匹配某个模式 返回true/false
exec() 方法 //用于检索字符串的正则表达式的匹配,返回一个数组,其中是匹配的结果,未找到则返回null
判断是否全为数字:/^\d+$/
字母:/[1]+$/
由字母数字下划线组成:/^\w+$/

Set
向Set加入值(add函数)的时候,不会发生类型转换

Map
set(键名,键值) //用于设置设置键值对
get(键名) //用于获取键值
相同的值在Map中做键名,会被视为两个不同的键

async
async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数
await 操作符用于等待一个 Promise 对象, 它只能在异步函数 async function 内部使用,其返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
遍历器中的next()方法必须是同步的,只要调用就必须马上有返回值
如果next()方法是异步操作就会报错,解决办法是将异步操作用Promise封装起来,用一个属性来接收Promise执行后的返回值
value: new Promose(reslove => setTimeout(() => reslove(index++), 1000))

模块
ES6模块使用import和expert,是异步加载
CommonJS(node.js)使用require加载和module.exports输出,是同步加载

ArrayBuffer(类型化数组):只能读不能写,是一段长度固定且连续的存储区域
ArrayBuffer里面只能存放0和1组成的二进制数据
数组放在堆中,而类型化数组放在栈中,取数据时后者快
ArrayBuffer初始化后固定大小,数组可以自由增减
静态方法:ArrayBuffer.isView() //判断参数是否是ArrayBuffer的视图实例
实例方法:slice() //将内存区域的一部分拷贝生成一个新的ArrayBuffer数组
ArrayBuffer有两种视图:1、TypedArray视图,其数组成员都是同一种数据类型;2、DataView视图,其数组成员可以是不同数据类型
不能直接对ArrayBuffer进行操作,只能对其视图进行操作

Blob:前端的一个专门用于支持文件操作的二进制对象
通过window.URL.createObjectURL方法可以把一个blob转化为一个Blob URL,并且用做文件下载或者图片显示的链接

Proxy
get(target,propKey,receiver) //拦截对象属性的提取
set(target,propKry,value,receiver) //拦截对象属性的设置,返回一个布尔值
has(target,propKey) //拦截propKey in proxy的操作,返回一个布尔值
deleteProperty(target,propKey) //拦截delete proxy[propKey]操作,返回一个布尔值,如果这个方法抛出错误或者返回 false ,propKey 属性就无法被 delete 命令删除
ownKeys(target) //拦截对象自身属性的读取操作,包括:
- Object.getOwnPropertyNames()
- Object.getOwnPropertySymbols()
- Object.keys()
- or...in
Object.keys()返回的结果仅包括目标对象的可遍历属性
getOwnPropertyDescriptor(target, propKey) //拦截 Object.getOwnPropertyD() 返回值为属性描述对象或者 undefined
defineProperty(target, propKey, propDesc) //拦截defineProperty(target, propKey, propDesc),若目标对象不可扩展,增加目标对象上不存在的属性会报错;若属性不可写或不可配置,则不能改变这些属性。
Object.preventExtensions()//让一个对象变得不可扩展,也就是不可再新添属性
Object.isExtensible() //方法判断一个对象是否是可扩展的
preventExtensions(target) //拦截 Object.preventExtensions(proxy) 操作,该方法必须返回一个布尔值,否则会自动转为布尔值
isExtensible(target) //用于拦截 Object.isExtensible(proxy) 操作
getPrototypeOf(target) //主要用于拦截获取对象原型的操作。包括:

  • Object.prototype.proto
  • Object.prototype.isPrototypeOf()
  • Object.getPrototypeOf()
  • Reflect.getPrototypeOf()
  • instanceof
    Object.setPrototypeOf(现有对象,原型对象) //为现有对象设置原型,返回一个新对象
    setPrototypeOf(target,proto) //拦截 Object.setPrototypeOf 方法,返回值必须为布尔值,否则会被自动转为布尔值。
    若目标对象不可扩展,setPrototypeOf 方法不得改变目标对象的原型
    construct(target, args) //拦截 new 命令。返回值必须为对象

  1. a-zA-Z ↩︎