犀牛书随手记-06

来源:互联网 发布:大连理工大学网络教育 编辑:程序博客网 时间:2024/05/01 21:11

在JS中一个对象的数据属性一般有4个特性,分别为

  • 值(value)
  • 可写性(writable)
  • 可枚举性(enumerable)
  • 可配置性(configurable)
    后三者的值都是布尔型
    Object.getOwnPropertyDescriptor() 可以获得某个对象特定属性的属性描述符
    想要批量修改或者创建这四个特性需调用
    Object.defineProperties()第一个参数是要修改的对象,第二个参数是一个映射表,它包含需要新建或者修改的属性的名称,以及他们的属性符描述
    单个调用Object。defineProperty()
    (只能修改自身的不能修改继承的)

数组

  • 数组中的索引可以是不连续的(对于不连续的数组,其length属性大于元素个数)
  • 数组有两种创建方式(直接量,跟构造函数)
//直接量var ary = [1,3,2];//构造函数var ary = new Array();/*    如果实例化一个数组对象时传递了一个参数    ary = new Array(10);    表示的是 ary这个数组的长度是10;    如果传递了两个或者以上则跟直接量创建的‘一样’*/
  • 所有的数组都是对象,可以为其创建任意名字的属性。

  • ECMAScript 5 中新增的数组方法,基本都是遍历数组,原数组本身不变。
    这些方法接受两个参数,一个function,一个context
    第一个参数function中一般传递三个参数,分别为:当前遍历到的数组元素,当前遍历到的数组元素的索引,数组本身。
    第二个参数 context 是可选参数,传递了,那么第一个参数function中的this,即为context。默认为window
    1.forEach,从头自尾的遍历数组的每一项
    举个栗子
var ary =[1,2,3,4];ary.forEach(function(){    console.log(arguments);})/*运行结果VM146:3 [1, 0, Array[4]]VM146:3 [2, 1, Array[4]]VM146:3 [3, 2, Array[4]]VM146:3 [4, 3, Array[4]]*/

2.map:将数组的每一项传给指定的函数,并返回一个数组
举个栗子

var b = ary.map(function(item){item *= item;})/*运行结果b[undefined, undefined, undefined, undefined]*/var b = ary.map(function(item){    return item *= item;})/*运行结果b[1, 4, 9, 16]*/

3.filter()返回的数组元素是调用的数组的一个子集,通过传递的逻辑来判断。
举个例子

var b = ary.filter(function(item){    return item >2;})/*b[3, 4]*/

4.every()和some()
它们对数组元素应用指定函数进行判断,返回true跟false
every是针对所有的,只有当遍历完所有且均满足条件时才会返回true,在遍历的过程中,一旦有不符合条件的,则返回false,并停止遍历。
举个例子

var num = 0;ary.every(function(item){    num++;    return item<2;})/*falsenum2*/

some是针对,数组其中某个元素,一旦有一个元素满足条件,则返回true,且终止遍历,否则,直到遍历玩所有的,均不符合条件,则返回false。

5.reduce 跟 reduceRight
reduce()和reduceRight是使用指定的函数将数组元素进行组合,生成单个值。
举个例子

ary.reduce(function(x,y){return x+y;})//10

reduce 需要两个参数。第一个是执行简单会操作的函数。第二个参数是给函数传递一个初始值。
举个例子

ary.reduce(function(x,y){return x+y;},10)//20

第一个参数function的参数
第一个为,当前计算的累积值(默认为0,如果reduce传递了第二个参数,则为第二个参数的值)
第2-4个参数,数组元素,数组元素索引,数组本身

注意在空数组上,不带第二个参数(初始值)会报类型错误

reduceRight的工作原理与reduce的原理类似,不同的是,reduce是从索引低到高处理数组,reduceRight刚好相反,从高到低处理。

6.indexOf()跟lastIndexOf()
搜索整个数组中具有给定值的元素。
indexof 其第一次出现的索引值
lastIndexOf 最后一次出现的索引值
找不到则返回-1
举个栗子

var ary = [1,3,1,3,1];var b = ary.indexOf(1);//0var b = ary.lastIndexOf(3);//3var b = ary.indexOf(10);//-1

值得注意的是,这个方法不接受 函数作为参数,第二个参数也是可选的:它指定数组中的一个索引,即从哪里开始搜索。如果省略,则从头开始搜索。它也可以为负数,它代表对数组末尾的偏移量。

2 0
原创粉丝点击