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连接起来的所有元素组成的字符串;