JavaScript第二周知识点复习

141 阅读10分钟

day1

一、数组

1、数组基础: 1.构造函数创建数组:var arr=new Array(num);->创建长度为num的空数组 2、按值传递: 如果传递的是原始类型,两者互不影响,因为只是复制了一个给对方; 如果传递的是引用类型,两者相互影响,因为是把自己的地址值传给了对方--->浅拷贝 3、释放引用类型:看清楚有多少个变量在使用,要全部释放后,才能释放干净-->尽量封装成一个函数 2、hash(关联)数组:下标可以自定义

1、创建-->1.创建空数组:var arr=[]; 2.添加自定义下标并且赋值:zrr["自定义下标"]=新值; 2、访问:arr["自定义下标"]; 3、hash数组的length失效了,永远为0.遍历不能用for循环,只能使用for in:

for(var i in arr){ i;//自动得到每一个下标 arr[i];//得到每一个元素 }

3、数组的API(这些方法只能由数组使用)

1、arr to str(数组转字符串): var str=arr.join("自定义链接符");
   1.无缝拼接:var str=arr.join(" ")
   2.拼接为页面元素:var str="<开始>"+arr.join("<结束><开始>")+"<结束>";
   

笔试题

    1.将数组里面的内容拼接为一句话(使用无缝拼接)-->如:
    var arr=["h","e","l","l","o"," ","w","o","r","l","d"];
    var str=arr.join("");
console.log(str);
    2.将数组拼接为DOM页面元素(数据渲染页面)
    如->var arr=["-请选择-","北京","南京","西京","东京"];
    //将数组拼接为页面标签字符串
var str="<开始标签>"+arr.join("</结束标签><开始标签>")+"</结束标签>";
//innerHTML能够识别标签
sel.innerHTML=str;

2、拼接数组(添加数组元素的新方式,将传入的实参全部拼接到数组的末尾):

   var newArr=arr.concat(新值1,arr2,...);
   concat->支持传入数组参数,会将传入的数组打散
   

3、截取子数组(取出数组的一部分)

   var subArr=arr.slice(start,end);
   start->开始下标;
   end->结束下标;
   能取到start,不会取到end;
   end可以省率不写(会从start截取到末尾);
   支持负数参数,-1代表倒数第一个数组元素
 

4、删除替(删除、插入、替换):

   var del=arr.splice(start,n,新值1,...)
   n代表删除的个数;
   删除会返回由被删除的元素组成的新数组;
 

5、翻转数组:

arr.reverse();

6、排序:

   arr.sort();//按字符串排序
   arr.sort(function(a,b){return a-b});//数字升序排列
   arr.sort(function(a,b){return b-a});//数字降序排列

二、二级联动

1.准备好两个select标签; 2.利用数据渲染将select标签添加上内容; 3.根据select专属事件onchange(只有在选中项发生变化后才会触发)和select专属属性selectedIndex (获取到当前选中项的下标)实现两个select的联动; 4.必须使用二位数组再次细分每个分类

Day2

一、数组的API 栈(一端封闭,另一端进出->优先使用最新的数据(先进后出))和队列(一端进,另一端出->按照先来后代的顺序(先进先出)): 1、开头进:arr.unshift(新值1,..);->在数组前面添加元素,会使数组元素下标发生变化; 开头出:var first=arr.shift();->在数组前面删除元素,一次只能删除一个,会使数组元素下标发生变化; 2、结尾进:arr.push(新值1,..);->在数组后面添加元素 结尾出: var last=arr.pop();->在数组后面删除元素 二、二维数组: 1、创建:var arr=[ [], [], ... ] 2、访问:arr[行下标][列下标] 行下标越界,得到undefined; 列下标越界,得到一个报错 3、遍历二维数组: for(var r=0;r<arr.length;r++){ for(var c=0;c<arr[r].length;c++){ arr[i][c]; } } 4、新的API: 1.判断->var bool=arr.every/some((val,i,arr)=>判断条件); every->每一个,要求所有元素都满足条件才会为true,否则为false,类似于&&; some->有一些,只要有一个满足条件,就为true,全部都不满足则为false,类似于|| 2、遍历:arr.forEach((val,i,arr)=>操作);->会修改原数组 var newArr=arr.map((val,i,arr)=>操作); 3、过滤:var subArr=arr.filter((val,i,arr)=>判断条件); 4、汇总:var sum=arr.reduce((prev,val,i,arr)=>prev+val); //var->当前的值 //i->当前的值的下标 //arr->当前数组本身 (prev,val,i,arr)=>prev+val->箭头函数,用来简化回调函数:如->sum=arr.reduce(function(val,i,arr){ return prev+val });===sum=arr.reduce((prev,val,i,arr)=>prev+val); 5、箭头函数固定公式: function去掉,()和{}之间添加=>,如果形参只有一个,那么()可以省略,如果函数体只有一句话,那么{}也可以省略,如果函数体只有一句话并且是return,那么return和{}都可以省略

三、String的概念

1、什么是字符串:多个字符组成的【只读】字符【数组】 2、和数组的相同点: 1.字符串的个数:str.length; 2.获取字符串中的某个字符:str[i]; 3.遍历字符串 4.所有数组的不修改原数组的API,字符串都可以使用(concat、slice) 3、和数组的不同点 所有数组的会修改原数组的API,字符串都不可以使用,如排序只有数组可以使用 4、引用/对象类型(11个) String、Number、Boolean -> 也叫包装类型; 包装类型:专门用于将原始类型的值封装为一个引用类型的对象; Array、Function、Date、Math、RegExp(正则表达式:用于验证)、Error(错误)、Object(面向对象开发方式)、Global(全局对象)->在浏览器中会被window替代

Day3

一、String API

1、转义字符:
作用——>1.解决和程序冲突的字符,如:""" 2.换行:\n 3.制表符:\t 4.书写Unicode编码的文字:\uXXXX 2、大小写转换: var newStr=str.toUpper/LowerCase(); 大写:str.toUpperCase() 小写:str.toLowerCase() 3、获取某个位置的字符:str.charAt(i)->还不如 str[i]; 4、获取某个位置的字符的ASCII码: var ascii=str.charCodeAt(i); 转回原文字-> var 原文=str.fromCharCode(ascii); 5、检索字符串:判断有没有,数组也可以使用 var i=str/arr.indexOf("关键字",start); 1.返回值i如果为-1,则没有该元素; 2.从start位置开始,查找右侧第一个关键字的第一个字符的位置; 3.start可以省略,默认从0开始; 4.作用:可用来进行判断

 **笔试题** --->  
 
 默认只能获取到第一个关键字的下标,如何才能获取到所有的关键字的下标?
如:var str="no zuo no die no can no bibi no";
  var index=-1;
  while((index=str.indexOf("no",index+1))!=-1 {
  console.log("找到了,下标为:"+index);
   }

6、拼接字符串:var newStr=str.concat("新字符串",...) -> 还不如+运算 7、截取字符串: 1.var subStr=str/arr.slice(start,end+1); 2.var XXX=str/arr.substring(start,end+1)
-> 不支持负数参数 3.var xxx=str/arr.substr(start,n); -> n代表要截取的个数,不必考虑含头不含尾 8、替换字符串: var newStr=str.replace("固定关键词","新内容"); 9、切割字符串:arr <=> str (可以对数组和字符串进行相互转化): var arr=str.split("自定义切割符"); 1.切割后,切割符就不存在了 2.如果写的切割符是空格,则切散每一个字符 10、去掉空白字符串: var newStr=str.trim/trimStart/trimEnd();

二、创建元素的步骤

1、先创建空标签:var x=document.createElement("标签名") 2、为其设置必要的属性和事件 x.属性名="属性值"; x.on事件名=function(){ 操作 } 3、上树:父元素.appendChild(x)

Day4

一、Math:数学对象,不需要创建,可直接使用

1、属性:Math.PI -> pie:3.1415926 2、API: 1.取整: 上取整 -> Math.ceil(num); -> 小数位数不能超过1位; 下取整 -> Math.floor(num); 四舍五入 -> Math.found(num); 更好的方法: 1.parseInt(str); 2.num.toFixed(d); -> 具有四舍五入的功能,并且小数位数自己规定,返回的是一个字符串,搭配parseFloat()使用。可以解决浏览器带来的舍入误差。 笔试题 --> 不允许使用toFixed的情况下,自己封装一个函数,由用户传入数字和保留位数,实现四舍五入操作:

function toFixed(num.d){
     num*=(10 ** d);
     num=Math.round(num);
     num/=(10 ** d);
     return num;
}
var result=toFixed(输入的数字,要保留的小数位数);
console.log(result);

2.乘方:Math.pow(底数,幂)===> 底数 ** 幂; 开平方:Math.sqrt(num); 3.最大值和最小值: Math.max/min(一堆数字); 默认不支持数组比较 --> 解决方法: Math.max/min.apply(Math,arr); 4.绝对值:Math.abs(负数);

5.随机整数:

parseInt(Math.random() * (max-min+1)+min);

二、Date(日期对象)

1、创建:

1.获得当前时间:var now=new Date(); 2.自定义时间:

 var date=new Date("yyyy/MM/dd hh:mm:ss");
 var date=new Date(yyyy,MM-1,dd,hh,mm,ss);

3.复制时间: var newDate=new Date(date);

2、操作: 1.两个日期之间可以相减,得到一个毫秒差,从而可以换算出我们想要的一部分(年/月/日/时/分/秒); 2.API:FullYear、Month、Date(日)、Day(星期)、Hours、Minutes、Seconds、MilliSeconds(毫秒)。 这些每一个分量都有一对 getXXX/setXXX(); Day(星期)没有setXXX()操作;

3、各分量取值范围:

FullYear:当前年份的数字 Month:0 ~ 11; Date:1 ~ 31; Day:0 ~ 6 0代表星期天; Hours:0 ~ 23; MInutes、Second:0~59

4、定时器:

1.周期性定时器: 开启-> time=setInterval(()=>{ 操作 },间隔毫秒数); 停止-> clearInterval(time);

2.一次性定时器: 开启-> time=setTimeout(()=>{ 操作 },间隔毫秒数); 停止-> clearTimeout(time); 3.time保存的是计时器的序号

Day5

一、BOM

1、BOM:Browser Object Model ->浏览器对象模型(专用于操作浏览器)

2、window对象:

1.全局对象->保存全局变量和全局函数 2.指代当前窗口本身

  属性:
    1.获取浏览器打完整大小:outerWidth/outerHeight;
    2.*获取浏览器的文档显示区域的大小:innerWidth/innerHeight;
    3.获取屏幕的完整大小:screen.width/height -> 用于做桌面应用
  方法:
    1.*打开链接的新方式:
       1.在当前窗口打开,可以后退:
       Html写法:<a href="url">内容</a>
       js写法:给标签搭配上点击事件,在事件里写上-> open("url","_self");
       2.在当前窗口打开,不能后退,只能在js里写:给标签搭配上点击事件,在事件里写上-> location.replace("新url");
       repalce:替换,将网址替换,不会产生历史,所以不能后退
       3.在新窗口打开,可以打开多个窗口
       HTML写法:<a href="url" target="_blank">内容</a>
       JS写法:open("url","_blank");
       4.在新窗口打开,只能打开一个窗口:
       HTML写法:<a href="url" target="自定义一个name">内容</a>
   JS写法:open("url","自定义一个name");

3、a标签的其他用途:

1.跳转
2.描点
3.充当下载按钮:
< a href="xx.exe/rar/zip/7z">下载< /a>
4.打开图片和txt文档:
<a href="xx.png/jpg/jpeg/gif/txt">打开图片和txt</a>
5.直接书写js代码,不需要点击事件:
<a href="javascript:js代码;">打开图片和txt</a>

4、打开新窗口/新链接

newWindow=open("url","target","width=?,height=?,left=?,top=?");
1.如果没有加第三个参数,那么窗口会和浏览器融为一体   
2.如果加了第三个参数,那么窗口就会脱离浏览器独立存在

5、关闭窗口:window/newWindow.close();

6、改变新窗口的大小:newWindow.resizeRo(新宽,新高);

7、改变新窗口的位置:newWindow.moveTO(新X,新Y);

8、*** * window提供了三个框

1.警告框:alert("警告文字");
2.输入框:var user=prompt("提示文字");
3.确认框:var bool=confirm("提示文字");

9、window事件:

1.window.load(加载)事件 -> 等待其他所有的资源加载完毕才会执行的代码。放在里面的代码最后才会执行 
2.*window.onresize事件 -> 窗口大小发生了变化,就会触发搭配上判断innerWidth就可以理解为js版本的css媒体查询
3.***window.onscroll事件-> 滚动事件,页面一旦滚动就会触发
   -->获取滚动条的位置:window.scrollY
   -->获取元素距离页面顶部的距离:elem.offsetTop
   -->获取元素距离页面左边的距离:elem.offsetLeft
   

10、*** 本地/客户端存储技术:

cookie:存储大小只有2kb,最多只能保存30天,已被淘汰
webStorage: 存储大小有8mb,永久保存。
 -->sessionStorage:会话级,只要浏览器一关闭,数据就会死亡
 -->localStorage:本地级,只要不清空,就会永久存在
 使用方法:
 1.添加:xxxStorage.属性名="属性值";
 2.读取: xxxStorage.属性名;
 3.删除:xxxStorage.removeItem("属性名");
 4.清空:xxxStorage.clear();