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)
插入:var dels=arr.splice(starti,0,新值1...)
替换:var dels=arr.splice(starti,新值1,...)
数组的排序:
笔试题:手写冒泡
公式:for(var j=0
for(var i=0
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){
return 判断条件;
});
some:有一些,要求只要有一个元素满足,则为true,全部不满足才为false类似于||
var bool=arr.some(function(val,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);
str.substr(starti,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();
扩展:如何使用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:
分量:时间和单位
年
月
日
星期
时
分
秒
毫秒
每个分量都有一对儿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();