一、数组
1、数组是一个可以存储一组或一系列相关数据的容器
2、数组元素:是指存储在数组中并赋予唯一索引(下标)的数据段数组元素的数据类型可以不同
3、作用:解决大量相关数据的存储和使用问题
4、定义数组
(1)字面量的方式(JSON)
[数据,数据...]或{"key":"value","key":"value",...}
(2)创建对象的方式(构造函数)
var arr = new Array();
var arr1 = new Array(5); 数组长度为5
var arr2 = [5]; 数组元素5,长度1
var arr3 = new Array("-5"); 长度为1,去掉引号会出错
有且只有一个正整数作为参数时,表示数组长度,如果是负数,则会出错
5、数组的方法(增删改截拼复排转)
(1)增
i.前增
方法:unshift(增加的内容)
作用:在数组首部增加元素
返回值:增加后数组的长度
影响原数组
如果增加的是另外一个数组,会将增加的数组当做一个元素添加到指定数组中
ii.后增
方法:push(增加的内容)
作用:在数组尾部增加元素
返回值:增加后数组的长度
影响原数组
(2)删
i.前删
方法:shift()
作用:删除数组首部的元素(一次只能删除一个)
返回值:被删除的元素
影响原数组
ii.后删
方法:pop()
作用:删除数组尾部的元素(一次只能删除一个)
返回值:被删除的元素
影响原数组
(3)改
方法:splice(开始下标,删除的长度,新增元素...)
作用:在数组任意位置进行增、删、改元素
返回值:被删除的元素
影响原数组
(4)截
方法:slice(开始下标,结束下标)
作用:截取指定范围的元素(包含开始位置的元素,不包括结束位置的元素)
返回值:被截取到的元素
不影响原数组
参数支持负数,但不支持第一个参数>第二个参数
(5)拼
方法:concat(拼接的内容)
作用:将参数拼接到指定数组后面,并产生一个新数组
将一个数组拼接到指定数组后,会将该数组中的每一个元素单独拼接到指定数组后
返回值:拼接后的新数组
不影响原数组
(6)复
复制数组:
i.slice(0);
ii.concat(0);
iii.遍历数组
(7)排
i. 方法:reverse();
作用:将数组元素逆序
返回值:逆序后的数组
影响原数组
ii. 方法:sort();
作用:按编码排序(默认数组中所有的元素按照字符串的形式排序)
返回值:排序后的数组
影响原数组
sort(function(a,b){return a-b;})(从小到大按Number类型排序)
sort(function(a,b){return b-a;})(从大到小按Number类型排序)
(8)转
i. 方法:toString();
作用:将数组转换为字符串,转换后字符以逗号隔开
返回值:转换后的字符串
不影响原数组
如果是一个变量,调用toString()方法,参数是几,则将变量转换成几进制的字符串
ii. 方法:join(指定分隔符)
作用:将数组转为带有指定分隔符的字符串
返回值:转换后的字符串
不影响原数组
6、数组遍历
for in循环(作用:遍历数组和对象)
for(变量 in 集合){
语句组;
}
7、冒泡排序
从小到大(从上往下:相邻元素比较)
4 2 3 5 1
2 3 4 1 5
2 3 1 4
2 1 3
1 2
var arr = [4,2,3,5,1];
for(var i = 0;i for(var j = 0;j if(arr[j]>arr[j+1]){ var t = arr[j]; arr[j] = arr[j+1] arr[j+1] = t; } } } 8、选择排序(拿一个元素与它后面的元素比较) 从小到大 4 2 3 5 1 2 3 4 1 5 2 3 1 4 2 1 3 1 2 for(var i =0;i for(var j = i+1;j if(arr[i]>arr[j]){ var t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } } 10、栈:存放简单数据和指向堆地址,每一个栈只能存放一个数据 堆:堆的地址是存入栈中的,堆中可以存放复杂数据类型,多个数据 一、ES5 1、严格模式 "use strict" 严格模式下,函数作用域中局部变量不会变量提升 建议在函数作用于内部使用,且放在函数开头部分 2、ES5新增的数组方法 (1)indexOf:查找指定元素在数组中首次出现的下标位置,如果没有找到,返回-1 indexOf(查找的元素,start) (2)forEach(function(value,index,array){}) 作用:遍历数组 value:表示数组中的每一个元素 index:表示数组的下标 array:表示数组本身 (3)map:遍历数组,并返回结果 (4)reduce:归并 reduce(function(pre,next,index,array){}) pre:表示前一个元素 next:表示下一个元素 index:表示下标 array:表示数组本身 将pre与next运算的结果再次赋值给pre (5)fiter过滤 作用:通过遍历数组,设置过滤事件,返回过滤后的结果 二、字符串 1、声明字符串 (1)字面量方式:var str = "hello" (2)构造函数的方式:var str = new String("hello") 2、字符串的属性:length:表示字符串的长度 3、字符串的方法(查、替、截、转) (1)查 i. charAt(下标):返回指定下标位置的元素 ii. indexOf(查找的字符,start) iii. lastIndexOf(查找的字符,start):返回一个元素最后出现的位置 iV. charCodeAt(下标):返回指定下标位置字符的编码值 (2)替 replace(被替换的内容,替换的内容)一次只能替换一个 (3)截 i. substring(start,end) 参数位置大小随意,但不支持负数 ii. substr(start,length)从指定位置开始截取固定长度的字符串 iii. slice(start,end)参数大小不允许互换,参数支持负数 (4)转 i. split(切割符,切割长度):将字符串转为数组 ii. toUpperCase():将小写字母转为大写字母 iii. toLowerCase():将大写字母转为小写 4、ASCII码 (1)汉字范围 4E00(19968) 9FA5(40869) 共20902个 (2)charCodeAt():根据下表获取指定元素的编码值 String.fromCharCode():根据编码值返回字符 大写字母65~90 小写字母97~122 一、Math 属性:Math.PI 方法: 1、Math.abs():求绝对值 2、求近似值 (1)Math.round():四舍五入(如果是负数,>.5进1,<=.5舍去) (2)Math.floor():向上取整 (3)Math.ceil():向下取整 3、求最值 (1)Math.max():求最大值(不支持传递一个数组作为参数) (2)Math.min():求最小值 4、随机数 Math.random():表示0~1之间的随机数[0,1) Math.floor(Math.random() * (n+1)); 0~n的整数 Math.floor(Math.random() * (max-min+1)+min) 取从min到max之间的随机整数 5、Math.pow(m,n) m的n次方 6、Math.sqrt(n):求平方根 7、日期对象Date 创建日期对象 var date = new Date(); 方法: (1)getFullYear():获取年份 getYear():获取年份,两千年之前,只显示年份的后两位 (2)getMonth():获取月份(月份从0~11表示1月至12月) (3)getDate():获取日期 (4)getDay():获取星期 (5)getHour():获取小时 (6)getMinutes():获取分钟 (7)getSeconds():获取秒 (8)getMillseconds():获取毫秒 (9)getTime();获取时间戳 时间戳:从1970年1月1日0时整到现在的毫秒数 扩展: (1)setFullYear():设置年份 (2)setMonth():设置月份 (3)setDate():设置日 (4)setHours():设置小时 (5)setMinutes():设置分钟 (6)setSeconds():设置秒 (7)setMillseconds():设置毫秒 toLocaleString():显示本地日期格式的字符串 2017/9/8 下午9:02:56 toLocaleDateString():显示本地日期 2017/9/8 toLocaleTimeString():显示本地时间 下午9:02:56 一、BOM 1、BOM(Browser object model) 浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 BOM主要用于管理窗口与窗口之间的通讯,核心对象是window 2、window子对象 document/frames/history/loction/navigator/screen 3、window的内置对象(location/history/navigator) (1)location对象 i. window.location = "http://www.baidu.com"; location对象包含有关当前URL(统一资源定位符)的信息,是window对象的一部分,可通过window.location属性来访问 href属性:是一个可读可写的字符串,可设置或返回当前显示的文档的完整URL location.href = "http://www.baidu.com" ii. 方法: reload():用于重新加载当前文档(刷新) 语法:location.reload(); location.reload(true);:刷新页面,不使用缓存 (2)history对象 i. history.back():载入历史列表中的前一个网址,相当于按下“后退” ii. history.forward():载入后一个网址,相当于“前进” iii. history.go():打开历史列表中的一个网址,括号里有正数负数 history.go(0):刷新页面 (3)navigator对象 navigator.userAgent:用户代理信息。通过该属性可以获取浏览器及操作系统信息 4、定时器 (1)setInterval(函数或表达式,毫秒数) 间歇性计时器 clearInterval():清除间歇性计时器 (2)setTimeout(函数或表达式,毫秒数) 一次性定时器 作用:在指定毫秒数后调用函数或执行表达式 clearTimeout():清除一次性计时器 5、window.onscroll事件 兼容:var scrollTop = document.documentElement.scrollTop || document.body.scrollTop 二、DOM 1、DOM(Document Object Mode)文档对象模型 作用:通过JavaScript操作DOM,可以重构整个HTML文档,改变页面上的项目 2、DOM的基本操作(查询,修改,创建,删除) (1)查询 getElementById("id名"):获取指定ID元素的节点,找不到返回null getElementsByTagName("标签名"):伪数组 getElementsByName("name名"):获取相同名称的节点列表:伪数组 getElementsByClassName("class名"):获取相同class属性的节点列表(IE9以下不兼容) document.documentElement:获取html的方法 document.body:获取body querySelector("选择器"):(IE8以下不兼容) querySelectorAll(“选择器”):通过选择器获取一组元素,返回一个集合 (2)创建 creatElement("标签名"):创建一个元素节点 createTextNode("文本内容"):创建一个文本节点 (3)追加/插入节点 父对象.appendChild("节点"):向指定父元素的子节点列表末尾追加新的节点 父对象.insertBefore("插入的节点","指定的子节点"):将节点添加到父对象中的指定子节点前面 (4)修改 父节点.replace(newNode,oldNode):用新节点替换某个子节点 (5)删除 父节点.removeChild("子节点") (6)克隆 节点.cloneNode():克隆节点,复制节点(只克隆节点,不克隆内容) 3、DOM元素类型 节点属性 元素 属性 文本 nodeName 元素名称 属性名称 #text nodeType 1 2 3 nodeValue null 属性值 文本内容(纯文本) 事件捕获和事件冒泡的区别? (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。 就是由子节点向父节点依次传递事件的过程。 (2)捕获型事件(event capturing):事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。 和冒泡相反的过程,由父元素向子元素依次传递事件的过程。 什么叫会话跟踪技术,并说明cookie的特点? 在一次会话从开始到结束的整个过程,全程跟踪记录客户端的状态叫做会话跟踪。就是跟踪一个会话,并保留会话。正常情况下,当客户端向服务器端发送请求并得到服务器端响应后,这次会话关闭,客户端不会把请求得到的信息存储,那么下次再需要相同信息时,还要向服务器端再次请求,这样很浪费时间,所以需要会话跟踪技术,将请求到的信息保存到客户端本地,以便下次使用。这就是会话跟踪技术。 会话跟踪技术就是cookie 特点:: (一) 只能使用文本文件 (二) 文件有大小限制(4KB) (三) 数量限制。一般浏览器,限制大概在50条左右 (四) 读取有域名限制。不可跨域读取,只能由来自写入cookie的同一域名的网页可进行读取。 (五) 时效限制:每个cookie都有时效,最短的有效期是,会话级别:就是当浏览器关闭,那么cookie立即销毁 1、设置或修改标签中的属性 对象.属性 访问标签中支持的所有属性 class属性:对象.className class是保留字 2、自定义属性 (1)getAttribute("属性名")获取属性值 (2)getAttribute("属性名","属性值")设置或修改属性值 (3)class兼容 对象.getAttribute("class") == null ? 对象.getAttribute("className") : 对象.getAttribute("class") (4)removeAttribute("属性名"):删除属性 3、 outHTML:获取指定标签及标签的左右内容 innerText:获取或修改指定标签中的文本内容(纯文本) innerHTML:获取或修改制定标签中的文本内容(超文本)(解析标签) 4、childNodes属性:获取到指定节点中的所有子节点(伪数组)返回元素节点和文本节点, 6、children:获取制定对象中的所有元素节点(伪数组)忽略空白节点 attributes:获取属性节点 7、高级选取 层次节点结构:父节点与子节点、兄弟节点 (1)firstChild:获取当前元素节点下的第一个子节点,相当于childNodes[0] 不会忽略空白文本节点 (2)lastChild:获取当前元素节点的最后一个子节点 (3)parentNode:返回该节点的父节点 (4)previousSibling:返回该节点的前一个同级节点(兄弟节点),如果没有,返回 null (5)nextSibling:返回该节点的后一个同级元素 9、obj.offsetWidth:自身的宽度,单位像素 10、obj.offsetLeft:距离左方或上层对象的位置,单位像素 1、事件对象:当一个对象触发了所绑定的事件,所发生的一切详细信息都将保存在一个临时 的地方,这个地方叫做事件对象 2、获取时间对象 兼容: (1)IE及谷歌早期版本:利用内置的全局对象获取 window.event (2)标准:通过给时间触发函数传递的第一个参数 var e = e || window.event 3、event.button属性 (1)标准:鼠标左键 0 鼠标中键(滚轮) 1 鼠标右键 2 (2)IE早期版本 左键 1 右键 2 滚轮 4 4、事件对象的属性 (1)clientX/clientY 鼠标在页面上相对于浏览器可视区的位置; (2)offsetX/oddsetY 鼠标点击位置相对于点击(鼠标所在对象区域)的坐标位置 (3)pageX/pageY 鼠标在页面上的位置 (4)document.documentElement.clientWidth:可视宽度 (5)screenX/screenY 鼠标点击位置到windows屏幕窗口的位置 5、键盘事件 (1)keyup/keydown :获取到整个键盘的编码值(字母返回大写的编码值) (2)keypress:只能获取到键盘中字符的编码值,且火狐只能获取编码0,其他浏览器可以获取到字母的大小写编码 属性: 兼容:var k = evt.keyCode || evt.charCode || evt.which 6、快捷键,组合键 ctrlKey/shiftKey/altKey 7、事件捕获:(IE和Opera浏览器中,不支持捕获) 由祖先节点向子节点层层传递,传递到最底层的子节点,这个过程,称为事件捕获 事件冒泡:由子节点向父节点,一直到祖先节点传递事件,这个过程称为事件冒泡 8、阻止事件冒泡 (1)标准:Event.stopPropagatior(); (2)IE:Event.cancelBubble = true; 兼容:Event.stopPropagatior() ? Event.stopPropagatior() : Event.cancelBubble=true; day12 一、浏览器默认行为 1、右键菜单 oncontextmenu 2、超链接 3、拖拽 ondragstart 二、阻止浏览器默认行为 1、超链接 兼容: evt.preventDefault ? evt.preventDefault() : evt.returnValue = false; 2、右键菜单:return false; 3、拖拽:return false; 三、事件监听 添加事件监听: (1)标准 对象.addEventListener("事件名click",执行函数,布尔值) true:表示捕获 false:表示冒泡(默认值) (2)IE 对象.attachEvent("事件驱动onclick",执行函数) 兼容: function listener(obj.evt,evtname,fn,boo){ obj.addEventLister ? obj.addEventListener(evt,fn,boo):obj.attachEvent(eventname,fn); } 移除事件监听: (1)标准 对象.removeEventListener("事件名",移除函数,false); (2)IE detachEvent("事件驱动",移除事件函数) 兼容: function removelistener(obj.evt,evtname,fn,boo){ obj.removeEventListener ? obj.removeEventListener(evt,fn,boo):obj.detachEvent(eventname,fn); } 四、事件源 (1)标准:event.target (2)IE:event.srcElement 兼容: var target = event.target || event.srcElement 五、JSON 1、JSON是一种基于文本的数据交换方式,或者叫做数据描述格式 2、JSON的优点 (1)基于纯文本,跨平台传递极其简单 (2)JS原生支持,后台语言几乎全部支持 (3)轻量级数据格式,占用字符数量极少,特别适合互联网传递 (4)可读性较强 (5)容易编写和解读 六、构造函数 1、使用JS语法 function person(name,sex){ this.name=name; this.sex = sex; } var p = new person("张三","男") alert(p.name); 2、使用JSON语法创建对象 var obj = {"name:":"张三","sex:":"男"}; alert(obj.name); 兼容总结 一、 className兼容 function byClassName (className){ if(document.getElementsByClassName){ return document.getElementsByClassName(className); }else{ var arr = []; var ele = document.getElementsByTanName("*"); for(var i = 0; i < ele.length; i++){ if(ele[i].className == className){ arr.push(ele[i]); } } return arr; } } 二、 滚动高度兼容 document.documentElement.scrollTop ? document.documentElement.scrollTop :document.body.scrollTop; 三、 滚动宽度兼容 document.documentElement.scrollLeft ? document.documentElement.scrollLeft :document.body.scrollLeft; 四、 class的兼容 function getAttr (obj){ return obj.getAttribute("class") == null ? obj.getAttribute("className") : obj.getAttribute("class"); } 六、获取事件Event兼容 var oBtn = document.getElemenetById("btn"); oBtn.onclick = function(event){ event = event || window.event; } 八、onkeypress的兼容 document.onkeypress = function (e){ var e = e || window.event; var code = e.keyCode || e.which || e.charCode; alert(code); } 九、阻止事件冒泡 function stop (e){ var e = e || window.event; return e.stopPropagtion ? e.stopPropagtion() : e.cancelBubble = true; } 十、阻止超链接的默认行为 oA.onclick = function (e){ var e = e || window.event; e.preventDefault ? e.preventDefault() : e.returnValue = false; } 十三、右键默认行为 document.oncontextmenu = function (e){ e = e || window.event; return false; } 十四、事件源委托兼容 var oUl = document.getElementById("ul"); oUl.onclick = function (evt){ evt = evt || window.event; var target = evt.target || evt.srcElement; alert(target.innerText); } 十五、拖拽图片的默认行为 document.ondragstart = function(){ return false; }