第二周day003

77 阅读4分钟

day003

一、数组的基础
  1. 创建数组
1、*直接量方式:var arr=[];//空数组
var arr=[数据1,...];

2、构造函数方式:var arr=new Array();//空数组
var arr=new Array(数据1,...);

第二个方法有一个坑:new Array(num);//创建了一个长度为num的空数组,里面没有任何东西,只有无数的undefined

  1. 面试题:按值传递:可能会这么出题:var a=x; var b=a;修改a,b变不变,或者,修改b,a变不变?
    如果传递的是原始类型:
    其实是复制了一个副本给对方,两者互不影响
    如果传递的是引用类型:
    js中不是原始类型,就是引用类型(数组、函数...都是引用类型) - 【浅拷贝】

因为引用类型很大,比原始类型大得多,不可能保存在变量本地,只是保存了一个地址值而已,其实是把自己的地址值赋值给了对方,而两者使用的是同一个地址值,一个人修改,另一个也会跟着变化
引用类型,在比较时,其实不是看的值,而是看的地址值作比较

3.***面试题:如何释放一个引用类型呢?
一定要看清楚有几个变量引用着这个引用类型,每个变量都要释放后才能释放干净

二、hash(关联)数组

下标是可以自定义的

  1. 创建:2步
1、创建空数组:var arr=[];
2、为数组添加自定义下标并且赋值:arr["自定义下标"]=新值
  1. 访问:
arr["自定义下标"]
  1. 强调:hash数组的length会失效,永远为0!
    遍历hash,不能再使用for循环,必须使用for in循环
语法:
for(var i in 数组名){
//i -> 下标
//数组名[i] -> 当前次元素
}
  1. hash数组的原理:
    hash算法:将字符串,计算出一个尽量不重复的数字(地址值)
添加元素:js解释器会将自定义下标交给hash算法,
得到一个数字(地址值),直接将你要保存的数据放到此地址之中保存起来

获取元素:js解释器会将指定的下标再次交给hash算法,得到一个和当初保存时
完全一样的数字(地址值),通过此地址值就可以找到你当初保存的数据,取出来使用

js里面一切的东西都是对象,万物皆对象,除了undefined和null,【一切对象的底层都是hash数组】

三、数组的API
  1. arr 转 str:
    不会修改原数组
var str=arr.join("自定义连接符");
1、鄙视题:将数组里面得内容拼接为一句话/单词 - 无缝拼接,其实就是拼接了一个空字符串
var arr=["h","e","l","l","o"," ","w","o","r","l","d"];
	console.log(arr.join(""))
2、***将数组拼接为DOM页面元素 - 第一次遇到数据渲染页面,这仅仅只是数据渲染的基础
var arr=["-请选择-","北京","南京","西京","东京","重庆"];
var str="<开始>"+arr.join("</结束><开始>")+"</结束>";
sel.innerHTML=str;
  1. 拼接数组:添加元素的新方式
    不修改原数组
将你传入的实参全部拼接为arr的末尾
var newArr=arr.concat(新值1,arr1,...);

1、不修改原数组,只会返回一个新数组
2、concat支持传入数组参数,悄悄的将你传入的数组打散为单个元素再拼接
3. 截取子数组:只想取出数组中的某一个部分
不修改原数组

根据你传入的开始下标一直截取到结束下标
var subArr=arr.slice(starti,endi+1);
特殊:
1、不修改原数组,只会返回一个新数组
2、含头不含尾
3、endi可以省略不写,如果省略不写,则从starti位置一直截取到末尾
4、starti和endi都可以省略不写,那么从头到尾完整的复制一份,此操作也叫做深拷贝!复制了一个副本给对方,两者互不影响。
5、支持负数参数,-1代表倒数第1个
  1. 删插替
删除:var dels=arr.splice(starti,n);//n代表删除的个数

虽然他直接修改原数组,但是也有返回值,返回的是被删除的数据组成的一个新数组

插入:var dels=arr.splice(starti,0,新值1,...);

1、原starti位置的元素以及后续元素都会向后移动
2、尽量的不要插入一个数组,会导致我们的数组一些是一维,一些是二维,遍历的时候极不方便

替换:var dels=arr.splice(starti,n,新值1,...);
特殊:删除的个数和插入的个数不必相同
  1. 翻转数组
arr.reverse();