《JavaScript高程第六章》

1、Object

object 是JS中最常见的类型,主要的功能是存贮和交换数据

  1. let person=new Object();
  2. person.name="Jack Ma";
  3. person.age=29;

或者创建对象

  1. let person={
  2. "name":"JackMa",
  3. "age":29,
  4. "isMan":false;
  5. }

2、Array数组

(1)创建数组

创建数组的方法1

  1. let colors=Array("white","black","blue");

创建数组的方法2

  1. let num=[1,3,5,7,9];

(2)遍历数组

遍历数组方法1 for

  1. let a=[1,3,5,7,9,11,13,15];
  2. for(let i=0;i<a.length;i++){
  3. console.log(a[i]);
  4. }

遍历数组方法2 forEach()对象方法

  1. let a=Array(1,3,5,7,9);
  2. a.forEach(function(item,index,array){
  3. console.log(item); //返回各项值
  4. console.log(index); //返回各项的索引
  5. })
  1. let a=Array(1,3,5,7);
  2. a.forEach(ele=>console.log(ele)); //输出1,3,5,7,

(3)数组的插入删除

对象方法Push()、pop()、shift()、unshift()

  1. let a=Array(1,3,5,7,9,11);
  2. a.push(15); //在数组末尾添加15
  3. a.pop(); //弹出末尾的15
  4. a.unshift(-1); //在头部添加-1
  5. a.shift(); //删除头部 -1

(4) 数组的索引对象方法 indexof()和lastIndexOf()

  1. let a=[1,3,5,7,9,1];
  2. console.log(a.indexOf(1)); //返回0
  3. console.log(a.indexof(2)); //返回 -1
  4. console.log(a.lastIndexOf(1)); //返回 5 ,找到最后一个1 的位置
  5. console.log(a.lastIndexOf(2)); //返回 -1

(5)通过索引删除某个元素,对象方法splice()

splice()方法通过删除或者替换现有元素、或者添加新的元素了来修改数组,并以数组的方式返回被修改的元素。同时此方法会改变原数组

splice(start,howMany,replace); 必需参数start开始的位置,howMany可选参数几个,replace替换的内容

  1. let a=[1,3,5,7];
  2. console.log(a.splice(1,2,"replaceString")); //返回 [3,5]
  3. console.log(a); //返回 [1,"replaceString",7]

通过splice复制一个数组 (深拷贝)

  1. let ar=Array.of("String",1,3,5,true);
  2. let a=ar.splice(''); //a深拷贝了数组ar

(6)Array类方法from()、isArray()、Array.of()

from()类函数

from(“伪数组”,mapFn[,thisArg])从一个类似数组或者可迭代对象,返回一个新的数组,mapFn如果指定了该参数,新数组中每个元素会执行该回调函数。thisArg执行回调函数mapFn的this对象

  1. let s=Array.from("13579",ret=>ret*ret);
  2. console.log(s); //返回 [1,9,25,49,81]

Sample1 从字符串中生成数组

  1. let str=Array.from("String");
  2. console.log(str); //返回["S","t","i","n","g"]

Sample2 从set生成数组

  1. let str=new set(["s","t","r","i","n","g"]);
  2. let sta=Array.from(str); //此处返回数组 ['s','t','r','i','n','g']

Sample3 from()类函数中使用箭头函数

  1. let str=new set([1,3,5,7,9]);
  2. let sta=Array.from(str,x=>x+x); //此处返回数组 [2,6,10,14,18]

类方法isArray()

判断一个变量是否为数组,返回true或者false

  1. let a1=Array(1,3,5,7,9);
  2. console.log(Array.isArray(a1)); //返回的true和false

Array.of()

Array.of()目的是添加相应的元素,不考虑类型,构造成新的数组实例

  1. let a=Array.of("String",1,3,5,true);
  2. console.log(a); //返回数组["String",1,3,5,true]

(7)对象方法concat

concat方法,用于将两个数组进行合并

  1. let a=Array(1,3,5,7);
  2. let b=[2,4,6,8];
  3. let c=a.concat(b); //返回[1,3,5,7,2,4,6,8];

(8)对象方法copyWithin

copyWithin(目标,开始位置,结束位置) 将一组数据浅拷贝到另一数组上

  1. let a=Array(1,3,5,7,9);
  2. let aa=a.copyWithin(a,1,3);
  3. console.log(aa); //返回数组 3,5,5,7,9

(9)对象方法entries()

entries返回一个iterator对象,iterator中包含键/值对,key和value

  1. let a=Array(1,3,5);
  2. let iterator=a.entries();
  3. for(let i=0;i<a.length;i++){
  4. console.log(iterator.next().value); //返回(0,1)、(1,3)、(2,5);前面是键,后面是值
  5. }

(10)对象方法every()

every方法,是监测数组中的每一个元素是否通过函数测试,返回布尔值,true或者false

  1. arr.every(callback(element[, index[, array]])[, thisArg])

Sample 1 判断一个数组中的所有元素是否为质数

every(method); every里面放变量,变量可以是函数,表达式

  1. const isPrime=(curVal)=>{
  2. if(curVal==2||curVal==3){
  3. retrun true;
  4. }else if(curVal<2){
  5. return false;
  6. }
  7. for(let i=2;i<Math.floor(curVal/2);i++){
  8. if(curVal%i==0){
  9. return false;
  10. }
  11. }
  12. return true;
  13. }
  14. let a=[2,3,5,7,11];
  15. console.log(a.every(isPrime));

Sample2 判断数组中的所有元素是否大于0

  1. const isZero=(curVal)=>curVal>0?true:false;
  2. let a=[-1,3,5,7,9];
  3. console.log(a.every(isZero)); //返回false

(11)对象方法some(),判断是否存在

  1. const lessThanZero=(curVal)=>curVal<0?true:false;
  2. let a=[1,3,5,7,9,-1];
  3. console.log(a.some(lessThanZero)); //返回true

(12)对象方法filter,过滤

Sample1 过滤字符串长度大于5的,以数组的方式返回

  1. let a=Array("String","JackMa","Spring","jhon","tim","ojbk");
  2. let s=a.filter(curStr=>curStr.length>5);
  3. console.log(s); //返回"String","JackMa","Spring"

(13) 对象方法find()和findIndex()

find(条件) 方法里面存放判断条件,返回符合条件的第一个参数,findIndex是返回索引

  1. let a=[1,3,5,7,9,11,13];
  2. let ret=a.find(curVal=>curVal>10); //返回11
  3. let rst=a.findIndex(curVal=>curVal>10) //返回5

(14)对象方法keys,返回一个数组

  1. let a=[1,3,5,7,9];
  2. let s=a.keys();
  3. console.log(s); //0 1 2 3 4

(15)对象方法map,返回一个由回调函数的返回值组成的新数组

map()方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。

  1. let a=[1,3,5,7,9];
  2. let s=a.map(curVal=>curVal*2);
  3. console.log(s); //返回数组[2,6,10,14,18]

(16) reduce对象方法,reduceRight对象方法

reduce方法里面是一个回调函数,callback(AcVal,CurVal,Index,Array);

callBack里面四个参数,分别是累计值,当前值,索引,原数组

Sample1 利用reduce计算累加

  1. let a=[1,3,5,7,9];
  2. const calSum=(acVal,CurVal)=>return acVal+CurVal;
  3. let sum=a.reduce(calsum);

Sample2 利用reduceRight计算累减

  1. let a=[1,1,1,1,1];
  2. const func=function(acVal,curVal){
  3. console.log(acVal+"-"+curVal); //返回 1-1=0-1=-1-1=-2-1=-3
  4. return acVal-curVal;
  5. }
  6. console.log(a.reduceRight(func));// 最后返回-3

(17)对象方法,value,包含数组中对象的所有的值

ie浏览器不支持,HbuilderX 内置浏览器也不支持

  1. let a=[1,3,5,7];
  2. let ret=a.values();
  3. for(let item in ret){
  4. console.log(item); //返回1 3 5 7
  5. }

(18)对象方法sort

按照ASCII码来进行排序

  1. let a=[1,3,5,"str","jack","a"];
  2. console.log(a.sort()); //返回数组[1,3,5,"a","jack","str"];

(19)ArrayBuffer

ArrayBuffer相当于C语言中的malloc,申请一块内存,按照官方的话就是ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。

(20)DataView

视图是一个可以从 二进制ArrayBuffer 对象中读写多种数值类型的底层接口,使用它时,不用考虑不同平台的字节序问题。

3、Map类

Map对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或者一个值

(1)、描述

一个Map对象在迭代时会根据对象中元素的插入顺序来进行遍历,一个for…of循环在每次迭代后返回一个[key,value]的数组

  1. let myMap=new Map();
  2. let keyString="a String";
  3. let keyFunc=(CurVal)=>{
  4. return CurVal*2;
  5. }
  6. myMap.set(keyString,"这是一个String");
  7. myMap.set(keyFunc,"这是一个function");
  8. console.log(myMap.get(keyString)); //返回:这是一个String
  9. console.log(myMap.get(keyFunc)); //返回:这是一个function

Map和Object的区别

Map Object
意外的键 Map默认不包含任何键,只包含显示的键 一个object又一个原型,原型链上的键名有可能和你在对象上的设置的键名产生冲突
键的类型 一个Map键可以是任意值,包括函数,对象或任意基本类型 一个Object的键必须是一个String或者是一个Symbol
键的顺序 Map中的键是有序的。因此,当迭代的时候,一个Map对象以插入的顺序返回键值 一个Object键是无序的
Size Map中的key是有序的。因此,当迭代的时候,一个Map对象插入的顺序返回值键值 Object的键只能通过手动计算
迭代 Map是iterable的,所以可以直接被迭代 迭代一个Object需要以某种方式获取他的键才能迭代
性能 在频繁的增删改查中表现得更好 在频繁的增删改查中需要优化

(1)、对象方法clear()

clear方法是用于清除所有的键值对

  1. let m=new Map();
  2. m.set(1,110);
  3. m.set(2,120);
  4. console.log(m.size);// 返回2
  5. m.clear(); //
  6. console.log(m.size);// 返回0

(2)、对象方法delete(key)

delete方法,如果存在就删除,返回true,否则返回false