Object
assign(target, ...sources),复制sources的自有可枚举属性到target,并返回target,复制过程用的是sources的[[Get]]与target的[[Set]];create(proto, propertiesObject),使用指定的原型对象和自有可枚举属性创建一个新对象;defineProperty(target, propName, descriptor),给target添加或修改名为propName的属性,并指定属性描述符;entries(target)返回target的自有可枚举属性的键值对数组,形如[ ['propA', '1'], ['propB', 2] ];keys(target)返回target的自有可枚举属性的名称数组,形如['propA', 'propB'];values(target)返回target的自有可枚举属性的值数组,形如['1', '2'];preventExtensions(target)将target变为不可扩展;freeze(target)冻结target;seal(target)密封target;is(a, b)比较a和b是否相等;isExtensible(target),对象是否可扩展,frozen或sealed对象都不可扩展;isFrozen(target),对象是否已冻结;isSealed(target),对象是否已密封;getOwnPropertyDescriptor(target, propName)返回指定属性名的descriptor;getOwnPropertyNames(target)返回string类型的自有属性名数组,无关属性是否可枚举;getOwnPropertySymbols(target)返回symbol类型的自有属性名数组,无关属性是否可枚举;getPrototypeOf(target)返回target的原型对象;setPrototypeOf(target, prototype)将target的原型对象设为prototype;- fromEntries
prototype.hasOwnProperty(propName),实例是否具有指定属性;prototype.isPrototypeOf(target),实例是否在target的原型链上;prototype.propertyIsEnumerable(propName),实例的propName属性是否是可枚举的;
注1:可借助new Map(Object.entries())快速便捷地构造一个Map;
注2:带有OwnProperty的方法,操作的都是自有属性;
注3:
- 不可扩展(non-extensible):不能再添加新属性;
- 密封(sealed):不能再添加新属性,已有属性标记为不可配置;
- 冻结(frozen):不能再添加新属性,已有属性标记为不可配置,属性值不可写;
注4:is()不同于==:is不做强制转换;is()不同于===:is认为NaN等于NaN,+0不等于-0;
注5:Object.prototype, window, location的原型都是不可变的,无法通过setPrototypeOf修改;
Function
arguments,函数实参组成的类数组对象;length,函数形参数量,不包括剩余参数和有默认值的参数;prototype.bind(thisArg,arg1, arg2, ...),返回一个新函数,调用新函数时将this指向thisArg,并将arg1,arg2等作为参数传入新函数;prototype.call(thisArg, arg1, arg2, ...),调用函数,将this指向thisArg,将arg1,arg2等作为参数传入;prototype.apply(thisArg,argsArray),调用函数,将this指向thisArg,以数组或类数组形式传入参数argsArray;- Symbol
for(key)找到并返回全局symbol表中键为key的symbol,若不存在则新建一个再返回;keyFor(sym)找到并返回全局symbol表中sym的key;- 其他还包含各种内置对象的方法名的Symbol版本,它们各自标识的方法或属性,将被内置对象的方法调用时(此处断句)调用,例如
obj的自定义方法obj[Symbol.split] = function () {...}会被String.prototype.split(obj)调用,简单来说,某些Symbol版本的方法将覆盖同名方法;
注:new Function("...")只能创建全局作用域下的函数,函数内只能访问全局作用域或自身作用域,即使被封装进某个function funcA,也无法访问到funcA的作用域,例如:
1 | var x = 10; |
Array
prototype.at(index),返回index索引处的元素;prototype.indexOf(item),按索引的低到高顺序,查找并返回指定数组元素的索引;prototype.lastIndexOf(item),按索引的高到低顺序,查找并返回指定数组元素的索引;prototype.find((element, index) => {}),按索引的低到高顺序,返回第一个使给定函数返回true的元素;prototype.findIndex((element, index) => {}),按索引的低到高顺序,返回第一个使给定函数返回true的元素索引;prototype.findLast((element, index) => {}),按索引的高到低顺序,返回第一个使给定函数返回true的元素;prototype.findLastIndex((element, index) => {}),按索引的高到低顺序,返回第一个使给定函数返回true的元素索引;prototype.fill(item, start, end),修改原数组,从start(包含start)到end的元素被填充为item;prototype.concat(arr1,arr2,...),返回实例与参数合并后的新数组,无参数则返回一个实例的浅拷贝;prototype.every((element, index) => {}),每个数组元素都会调用给定函数,返回值都为true,则该方法返回true;prototype.some((element, index) => {}),每个数组元素都会调用给定函数,返回值有一个为true,则该方法返回true;prototype.includes(searchElement, fromIndex),从fromIndex开始查找,如果数组中存在searchElement,则返回true;prototype.sort((a,b)=>{}),原地操作,调用给定函数,按返回值排序(大于0则b在前,小于0则a在前),没有给定函数,则该方法将元素按Unicode字符序排序;prototype.splice(start, deleteCount, item1, ...),修改原数组,从start开始(不包含start),删除deleteCount个元素,填入item1等参数;prototype.slice(start, end),不修改原数组,返回从start到end(不包含end)的子数组;prototype.filter((element, index) => {}),每个数组元素都会调用给定函数,返回使给定函数为true的元素组成的子数组;prototype.map((element, index) => {}),每个数组元素都会调用给定函数,返回以给定函数返回值为元素的新数组;prototype.push(item1, ...),将参数添加到数组尾;prototype.pop(),删除并返回尾元素;prototype.unshift(item1, ...),将参数添加到数组头;prototype.shift(),删除并返回首元素;prototype.reverse(),颠倒数组元素;prototype.flat(depth),将嵌套深度为depth的数组元素提取到一维数组中并返回这个新数组;prototype.reduce((pre, cur, curInx), initialValue),调用给定函数将元素减少到一个,initialValue有值,则初始时,pre取initialValue,cur取第一个,否则初始时pre取第一个,cur取第二个,初始执行后,给定函数返回值作pre,下一个元素做cur;prototype.join(separator),返回以separator连接起来的所有元素组成的字符串;