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();