Object && Array

282 阅读5分钟

Object构造函数创建一个对象包装器

Object.length值为1

  • Object.assign() 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,并返回目标对象
Object.assign({a: 1, b: 3},{b: 7, c: 4}) // return {a: 1, b: 7, c: 4}
  • .create() 使用指定的原型对象和属性创建一个新对象
  • .defineProperty() 给对象添加一个属性并指定该属性的配置
  • .defineProperties() 给对象添加多个属性并分别指定它们的属性
  • .entries()返回给定对象自身可枚举属性的[key,value]数组
  • .freeze()冻结对象,其他代码不能删除或更改任何属性
  • .getOwnPropertyDescriptor() 返回对象指定的属性配置
  • .getOwnPropertyNames() 返回一个数组 它包含了指定对象所有的可枚举或不可枚举的属性名
  • .getOwnPropertySymbols() 返回一个数组,它包含了指定对象自身所有的符号属性
  • .getPrototypeOf() 返回指定对象的原型对象
  • .is() 比较两个值是否相同(所有NaN值都相等)
  • .isExtensible() 判断对象是否可扩展
  • .isFrozen() 判断对象是否已经冻结
  • .isSealed() 判断对象是否已经密封
  • .keys() 返回一个包含所有给定对象自身可枚举属性名称的数组
  • .seal() 防止其他代码删除对象的属性
  • .setPrototypeOf() 设置对象的原型
  • .values() 返回给定对象自身可枚举值的数组
  • .hasOwnProperty() 表示某个对象是否含有指定的属性,而且此属性非原型链继承的,返回布尔值
  • .isPrototypeOf() 表示指定的对象是否在本对象的原型链中,返回一个布尔值
  • .propertyIsEnumerable() 判断指定属性是否可枚举
  • .toString() 返回对象的字符串表示
  • .valueOf() 返回指定对象的原始值

Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象。可通过索引访问数组元素

  • .push() 添加元素到数组的末尾
  • .pop() 删除数组末尾的元素
  • .shift() 删除数组最前面的元素
  • .unshift() 添加元素到数组的头部
  • .indexOf() 返回数组中第一个与指定值相等的元素的索引,找不到返回-1
let pos = ['z','z','j'].indexOf('z')   // return 0
['z','z','j'].splice(pos,1)  // return  ['z','j']
  • .splice(pos,1) 通过索引删除某个元素
  • .splice(pos,n) 从一个索引位置删除多个元素
  • .slice() 返回一个新的数组对象,由begin和end决定的新数组
['a','b','c'].slice(0,2)  // return ['a','b']
['a','b','c'].slice()  // return ['a','b','c'] 拷贝

可以给数组的length赋一个更大的值,但是赋一个更小的值则会删掉一份部分元素

  • .from() 从类数组对象或者可迭代对象中创建一个新的数组实例
Array.from([1,2,3], x => x + 3) // return [4,5,6]
  • .isArray() 用来判断传递的值是否是数组对象
Array.isArray([2,4,3])   // true
Array.isArray('jyr')  // false
  • .of() 创建一个具有可变参数的新数组实例。区别Array.of()Array()
Array.of(3)  // [3] 
Array(3)  // [ , , ]
Array.of(2,3,4)  // [2,3,4]
Array(2,3,4)  // [2,3,4]

Array.prototype.constructor的值就是Array Array.prototype.length的值是0

  • .reverse() 颠倒数组中元素的排序,第一个变成最后一个,最后一个变为第一个
  • .sort() 对数组进行排序
[4,6,3,5,1].sort( (a,b) => a-b )  // return [1,3,4,5,6]

要注意那些方法会改变原数组,那些方法会返回新数组

  • .join() 将一个数组的所有元素连接成一个字符串并返回这个字符串
['j','y','r'].join()  // return "j,y,r"
['j','y','r'].join('')  // return "jyr"
['j','y','r'].join('#')  // return "j#y#r"

迭代方法 在下面的遍历方法中,有很多方法是需要指定一个回调函数作为参数。尽量不要在遍历过程中对数组进行添加,修改,删除操作。

  • .forEach() 为数组中的每个元素执行一次回调函数
forEach循环没办法终止或者跳出循环,可抛出异常
['j','y','r'].forEach( item => item + 'o' ) // return ['jo','yo','ro']
  • .entries() 返回一个数组迭代器对象,该迭代器会包含所有数组元素的键值对
  • .every() 判断数组中的每个元素都满足测试函数,返回布尔值
  • .some() 判断数组是否至少有一个元素满足测试函数,返回布尔值
  • .filter() 将所有在过滤函数中返回true的数组元素放进一个新数组中并返回。较常用
[3,8,9,4,1].filter( item => item >= 5) // return [8,9]
  • .find() 找到第一个满足测试函数的元素并返回那个元素的值,如果没找到,返回undefined
  • .findIndex() 找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回-1
  • .keys() 返回一个数组迭代器对象,该迭代器会包含所有数组元素的键。
  • .map() 返回一个由回调函数的返回值组成的新数组
[1,2,3].map(item => item * 2) // return [2,4,6]
  • .reduce() 从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,返回最后一次回调函数的返回值。比较难理解
[1,3,2,5].reduce( (acc,cur) => acc * cur, 2)  // return  2*1*3*2*5=60
  • .value() 返回一个数组迭代器对象,该迭代器会包含所有数组元素的值