week2总结

88 阅读6分钟
1.创建数组:
    直接量方式:var arr=[];
    构造函数:var arr=new Araay(num);
2.hash(关联)数组:
    使用方法:
        创建:2步
            先创建一个空数组:var arr=[];
            为数组添加自定义下标并且赋值:arr["自定义下标"]=新值;
        访问:arr["自定义下标"]
        强调:hash数组的长度会失效,永远为!
        所以:
            不再使用for循环遍历
            使用for in:
                语法:for(var i arr){
                            i
                            arr[i]
                            }
    原理:hash算法-添加元素-获取元素
    
  JS中一切东西都是对象,万物皆对象,除了undefined和null【一切对象的底层都是hash数组】
数组的API:
    自定义连接符:
        var str=arr.join --数字转字符串
    拼接数组:添加元素的新方式
        将传入的实参全部拼接到数组的末尾
            语法:var newArr=arr.concat() -- 可以放值,也可以放数组
    截取子数组:只想要取出数组的某一部分使用
        根据你传入的开始下标,一直截取到结束下标
            语法:var newArr=arr.slice(starti,endi)
以上三个不修改原数组,只会返回一个新数组
以下所有的API都会直接修改原数组
删插替:
    删除:var dels=arr.splice(starti,n);//n代表你要删几个
    插入:var dels=arr.splice(starti,0,新值1...)
    替换:var dels=arr.splice(starti,新值1,...)
数组的排序:
    笔试题:手写冒泡
     公式:for(var j=0;j<arr.length;j++){
                 for(var i=0;i<arr.leng-1;i++){
                         if(arr[i]>arr[i+1]){
                                 var m=arr[i+1];
                                     arr[i+1]=arr[i];
                                     arr[i]=m;
                                     }
                                 }
                             }   
    数组的API:arr.sort();
栈和队列:
    栈:其实就是数组,一端封闭,另一端进出
    何时使用:优先使用最新的数据
    如何使用:
        开头进:arr.unshift(新值1,...)
        开头出:var first=arr.shift()
        结尾进:arr.push(新值1,...)
        结尾出:var last=pop();
    队列:其实就是数组,只能从一端进入,另一端出去
    何时使用:按照先来后到的顺序拿取数据
    如何使用:
        开头进:arr.unshift(新值1,...)
        结尾出:var last=pop();
        
        结尾进:arr.push(新值1,...)
        开头出:var first=arr.shift()
周期性定时器:每过一段时间就会执行一次;
     开启:
         timer=setInterval(function(){
                         操作;
                         },间隔毫秒数)
     停止:
         clearInterval(timer)
     鼠标移入:elem.onmouseover
     鼠标移出:elem.onmouseout
ES5(2014年)为数组提供的3组6个API:
判断;
    every:每一个,要求所有的条件都满足,结果才为true,只要一个不满足则为falsa类似于&&
        var bool=arr.every(function(val,i,arr){
                                //var -- 当前的值
                                //i -- 当前值的下标
                                //arr -- 数组本身
                                return 判断条件;
                          });
    some:有一些,要求只要有一个元素满足,则为true,全部不满足才为false类似于||
        var bool=arr.some(function(val,i,arr){
                                //var -- 当前的值
                                //i -- 当前值的下标
                                //arr -- 数组本身
                                return 判断条件;
                          });
遍历;
    forEach -- 直接修改原数组:
        arr.forEach(function(val,i,arr){
                            操作
                      })
    map -- 不修改原数组,返回一个新数组
        var newArr=arr.map(function(val,i,arr){
                            return 操作;
                      })    
汇总和过滤:
    过滤:var subArr=arr.filter(function(val,i,arr){
                            return 判断条件;
                       });
    汇总:var sum=arr.reduse(function(prev,val,i,arr){
                            return  prev+val;
                       })
匿名回调函数:
    公式:function去掉,()和{}之间添加一个=>,如果形参只有一个,那么()可以省略,如果函数体只有一句话,那么{}省略,如果函数体只有一句话并且是return,那么return和{}一起省略.
二位数组:
    何时使用:在一个数组内,再次细分每个分组
        创建:var arr=[[],[],[],[]]
        访问:arr[[行下标][列下标]]
String的API:
    转义字符:\
    大小写转换:
        var upper(大写)=str.toUpperCase();
        var lower(小写)=str.toLowerCase();
    获取字符串中的指定位置的字符:str.charAt(i) === str[i];
    获取字符串中的指定位置的字符的ASCII码:
        var ascii=strCodeAt(i);
            通过ASCII码转回原文
        var 原文=String.fromCharCode(ascii);
索引字符串:检查索引-检查下标,获取关键字的下标
    var i=str/arr.indexOf("关键字",starti);
    找到了:返回第一个关键字的第一个字符下标
    没找到:返回-1
拼接字符串:var newStr=str.concat(新字符串,....) === 还不如+运算
截取字符串:3个
        var newstr=str/arr.slice(straei,endi+1);//和数组的用法一模一样
        str.subString(starti,endi+1);//几乎和slice一样,但是不支持负数参数
        str.substr(starti,n);//n代表截取的个数,不必考虑吧含头不含尾
替换字符串:
    var newstr=str.replace("固定关键字"/RegExp,"新内容")
去掉开头结尾的空白字符:
        str.trim();
        str.trimStart();
        str.trimEnd();
切割字符串:
    作用:将字符串切割为数组:str<=>arr
    var arr=str.split("自定义切割符")

Math对象:专门提供了数学计算的API

API:
       取整:3种
           上取整:Math.ceil(num);
           下取整:Math.floor(num);
           四舍五入取整:Math.round(num);
       乘方和开方:
           乘方:Math.pow(底数,幂)  === 底数**幂
           开方:Math.sqrt(num);
       最大值和最小值:
           var max/min=Math.max/min(a,b,c,d,s,l,....);//自动在你传入的数字中找到最大值或者最小值
      绝对值:Math.abs(num);
      随机数:Math.random(); -- 在0~1之前取一个随机小数
扩展:如何使用JS创建页面元素:3步-深入数据渲染
        创建空标签:
            var elem=document.createElement("标签名")
        为其设置必要的属性和事件:
            elem.属性名="属性值"
            elem.on事件名=function(){}
        渲染到DOM树-上树
            父元素.appendChild(elem);

Date对象:日期对象,提供了可以操作日期和时间的API

    创建:
        创建当前时间:var now=new Date()
        创建一个自定义时间:var birth=new Date("yyy/mm/dd hh:mm:ss")
        创建一个自定义时间:var brith=new Date(yyy,MM-1,dd,hh,mm,ss);//修正月份,从0~11月,0代表12月
        复制一个日期:var end=new Date(start);
   操作:2类
       两个日期对象之间可以相减,得到一个毫秒差(大-小),换算出自己想要的任何一部分--日期的本质就是保存了一个毫秒数
       API:
           分量:时间和单位
               年 -- FullYear-- Month-- Date
               星期 -- Day-- Hours-- Minutes-- Second
               毫秒 -- Miiliseconds
           每个分量都有一对儿getXXX/setXXX
           其中getXXX负责获取一个分量的值
           其中setXXX负责设置一个分量的值
BOM:Browser Object Model
window对象
    代替全局对象global,保存着全局变量和全局函数
    指代当前窗口本身
        属性:专门用于获取大小
            获取浏览器的完整小大:
                outerWidth/outerHeight
            获取浏览器大文档显示区域:
                innerWidth/innerHeight
            获取屏幕的完整大小:
                screen.width/screen.height
        方法:
            当前窗口打开,可以后退:
                HTML:<a herf="">内容</a>
                  JS:open("url","_self")
            当前窗口打开,禁止后退:
                HTML做不到
                JS:location.replace("新url");
            新窗口打开,可以打开多个:
                HTML:<a herf="" target="_blank">内容</a>
                  JS:open("url","_blank")
            新窗口打开,只能打开一个:
                HTML:<a herf="" target="自定义name">内容</a>
                  JS:open("url","自定义name")
定时器其实也是window的
window的专属事件:
    window.onload-load:加载
    window.onresize:创建
    window.onscroll:滚动事件
本地/客户端存储技术:
    cookie:淘汰了,存储大小:2kb,操作复杂,需要到处切割,只能最多保存30天
    webstorage:H5(概念统称)带来的一个新特性:存储大小:8mb,永久保存,操作简单
            分两类:
                sessionStorage -- 会话级,只要浏览器一旦关闭,数据就会死亡
                localStorage -- 本地级,只要不清空,永久存在
            操作:
                添加:XXXStorage.属性名="属性值";
                读取:XXXStorage.属性名;
                删除:XXXStroage.removeltem("属性名");
                清空:XXXStroage.clear();
扩展:
        提交事件:from.onsubmit=function(){
                                    return false;//阻止提交
                                }
        获取时间的毫秒数:date.getTime();