Javasctipt 犀牛书 第七章 数组总结

An array is an ordered collection of data (either primitive or object depending upon the language).--MDN 上的定义

数组的两种创建方法

一:数组直接量(也称为数组字面量),注意点如下:

  • 直接量中的值可以是任意表达式[/empty/]
  • 省略某个值或者是元素,省略的元素被赋予undefined
  • 数组直接量允许有可选的逗号作为结尾

二:调用构造函数Array(),调用的方式分为三种

  • new Array();不传参数,等同于[];
  • 传入一个参数,此值就表示数组长度length,(数组中没有存储值,甚至数组的索引属性都未定义,in运算符false);
  • 直接对参数传入多个元素,这就构成了新数组的元素,不如字面量简单,同时有其它风险

数组的操作:读写、length属性、delete、遍历、方法

数组的元素的读和写

  • 使用[/empty/]操作符访问数组中的一个元素,数组的引用位于括号的左边,括号中的表达式分为两种情况
    • 表达式使用负数和非整数来索引数组,此时数组转换为字符串,字符串来作为属性名,此时属性名当做常规的对象属性名,不会更新length属性
    • 表达式返回非负整数值(有一个范围)时,此时当做数组索引,可以更新length属性
  • 数组是对象的特殊形式,js会将制定的数字索引值转换成字符串--索引值1变成'1'--然后将其作为属性名来使用

数组的length属性

  • Object.defineProperty(a,"length",{writable:false});可以把数组a的length值设置为只读
  • 数组中length属性的规则:最大索引必须小于length属性值,维持此规则数组有两个特殊行为
    • 如果为元素赋值,其索引i大于等于现有长度时,length值被设置为i+1
    • 设置length属性为一个小于当前长度的非负整数n时,当前数组中索引i>=n的元素将被删除
  • 使用delete之后不会修改数组的length属性
  • 不会将元素从高索引处填充,删除的值为undefined
  • 数组变成稀疏数组

数组的遍历

  • 和对象的枚举差不多,仍然是for/if和in,ES5中的forEach()可以按照索引的顺序按个传递元素

数组的方法

  • ES3中的数组方法:
    • join,split,reverse,sort,concat,slice,splice,
    • push,pop,unshift,shift,toString,toLacalString
  • ES5中的方法:
    • forEach,map,filter,every,some,reduce,reduceRight,indexOf,LastIndexOf

其他:仿造多维数组和类型检查

多维数组

  • js并不支持多维数组,可以使用数组的数组进行近似,访问数组的数组中的元素只需要两次[]操作符就可以

数组类型

  • 数组类型判定通常非常有用,而instanceof、typeof都不太好用,在ES5中使用Array.isArray()来实现检测,而在ES3中则用了一个自定义的函数
   let isArray = Function.isArray || function (o){
    return typeof o === "object" && 
    Object.prototype.toString.call(o)=== "[object Array]";
}
    console.log(isArray([]));

类数组对象和字符串

类数组对象

  • 一个数值length属性和对应非负整数属性的对象可以看做类数组对象
  • Function.call()的间接调用有一个很经典的描述:任何函数可以作为任何对象的方法来调用,哪怕这个函数不是那个对象的方法,参数是任何对象
  • 检测类数组对象的方法主要是检测对象不是null和undefined,同时length的值满足数组值的要求
  • 类数组的检测方法针对字符串通常返回false

作为数组的字符串 的特点总结

  • 字符串的行为类似只读数组
  • 访问单个字符串的方法:charAt()和[]
  • Array.isArray()传入字符串返回false
  • 字符串也可以通过Function.call()来调用数组方法
  • 字符串是不可变值,如果使用数组方法修改字符串会出错,并且么有提示(好坑爹的感觉)

你可能感兴趣的:(Javasctipt 犀牛书 第七章 数组总结)