数组&对象方法---笔记

146 阅读4分钟

数组中常用的方法 Array

Array对象的静态私有属性方法---->Array.xxx()
+ from ES6 把类数组转为数组
+ isArray 检测一个值是否为数组
+ of ES6 创建一个新数组  并且把of中传递的值为数组中的内容
Array构造函数原型上的公共属性方法 --->实例
  + push(从数组末尾添加数据)/pop(从数组末尾删除数据)/sort(排序)/shift(从数组头部添加数据)/unshift(从数组头部删除数据)/splice(增删改一体)
  + slice(截取数组内容)
  + concat(拼接数组)
  + join(将数组转换为字符串)/tostring(将数组转换为字符串)
  + includes(查询数组执行元素)  ES6
  ----------迭代数组
  + foreach 没有返回值,不改变原数组
  + map 支持返回值(回调函数中的返回值会替换当前迭代这一项  原始数组不变 以新数组形式返回)
  + filter  数组筛选  按条件筛选数组  返回新数组   原数组不变
  + find 查找  依次迭代数组中的每一项    找到符合条件的 "这一项" 即使有多项符合条件 找到一项就不找了  一项也没有匹配的
  返回undefined
  + findindex ES6  找到符合条件这一项的索引
  + some 迭代数组每一项 只要有一项符合条件就返回true  所有项都不符合  才会返回false
  + every 所有项都符合条件则返回true   只要有一项不符合就返回false
  + reduce   迭代数组每一项  而且可以实现结果的累计   数组求和
  +  reduceRight   是从数组最后一项向第一项迭代  和reduce的迭代方向相反
  + fill ES6 将数组所有内容以固定值填充
  + flat ES6 数组扁平化 数组降维 infinity无限

对象中常用的方法 Object

  对象类原型上提供的 供其实例调用的方法
  可枚举 :能够被for/in循环迭代到(其他循环不算)  或者被Object.keys访问到的属性
     + hasOwnProperty  检测一个值是否为私有属性
     + isPrototypeOf   检测某一个对象是否出现在其原型链上
     + propertyIsEnumerable 检测某个属性是否是"可枚举"的属性
     + toString   检测数据类型的
     + valueOf    获取原始值
   Object对象上提供的静态私有属性方法 -> Object.xxx()
     + assion ES6 合并多个对象   浅拷贝
     + create 创建一个空对象,并且把obj作为其原型 
     + getPrototypeOf 获取对象的原型链或原型对象
     + setPrototypeOf 设置对象的原型指向  兼容IE11以上
     + is(value1,value2) 比较两个值的大小  基于'==='比较的   特殊:Object.is(NaN,NaN)相等
     ------------------------------ 获取键值对的
     + keys 获取对象可枚举、非symbol类型的私有属性 返回包含属性名的数组
     + values 返回包含属性值的数组
     + entries 返回包含属性名和属性值的数组
     + getOwnPropertyNames(obj)获取对象"非Symbol类型的私有属性" 无关它的枚举性
     + getOwnPropertySymbols(obj) ES6 获取对象"Symbol类型的私有属性" 无关它的枚举性
    ====================================  设置属性规则
     + defineProperty/defineProperties 给当前对象的某个属性或多个属性 设置规则和进行数据劫持
        默认情况下:
          + 内置的属性方法(私有的/原型上的)一般都是不可枚举的,自己设定的属性方法一般都是可枚举的
          + 但是我们可以基于Object.defineProperty设置属性的规则
     + getOwnPropertyDescriptor/getOwnPropertyDescriptors  查看对象的某个属性 (或全部属性)的规则

对象的特殊处理

     + freeze  冻结一个对象   把对象中的每个属性的规则设置成 不可删除、不可删除、枚举性不变
     + isfreeze 检测当前对象是否被冻结
     + preventExtensions  让对象变为不可扩展的
     + isExtensible   检测是否为可扩展的
     
     + seal  密封一个对象  [不可删除、不可新增、不可劫持]
       + 把现有属性设置为不可删除 但是修改/枚举性和之前保持一致
       + 不能扩展新的属性
       + 无法对属性进行劫持
     + isSealed 检测对象是否被冻结


    ==============

ES6中新增了一个Reflect对象,聚合了关于“操作对象”的相关方法

    + deleteProperty(target, propertyKey) 等同于delete,删除对象的某个属性
    + get(target, propertyKey) 获取对象某个成员的值,等同于target[propertyKey]
    + has(target, propertyKey) 等同于in操作符,校验当前对象中是否存在这个属性
    + set(target, propertyKey, value) 设置当前对象的某个成员的属性值,等同于target[propertyKey]=value
    + ownKeys(target) 获取当前对象所有的私有属性「包含:可枚举和不可枚举的、Symbol和非Symbol类型的」
    + ...
    
    
    

关于JS的兼容处理

 + ES6+(ES2015+) 不兼容IE浏览器  支持EDGE 谷歌  火狐等浏览器
 + ES5 不兼容IE6~8
我们所谓的兼容处理  其实就是把ES6+转化为ES5 https://babeljs.io
 + ES6语法的转换 babel-loader  babel-preset-env  对于一些特殊的ES6语法