9.1 一周学习总结
2017-09-01 17:51 之晴 阅读(218) 评论(0) 编辑 收藏 举报一、JS中的事件分类
1、鼠标事件
click、dblclick、onmouseover、onmouseout
2、HTML事件
onload、onscoll、onsubmit、onchange、onfoucs
3、键盘事件
keydown: 键盘按下时触发
keypress:键盘按下并松开的瞬间触发
keyup: 键盘抬起时触发
【注意事项】
①执行顺序: keydown -> keypress -> keyup
②当长按时: 会循环执行 keydown -> keypress
③有 keydown 不一定有 keyup,事件触发过程中,鼠标将光标移走,将导致没有 keyup
④keypress 只能捕获键盘上的字符、数字、符号键,不能捕获各种功能键,而keydown 和 keyup 可以
⑤keypress 区分大小写,keydown 和 keyup 都不支持
二、事件模型
DOM0 事件模型
1、内联模型(又叫行内绑定): 直接将函数名作为 HTML 标签的某个事件的属性
eg: <button onclick="func()">DOM0内联模型</button>
优点: 使用方便
缺点: 违反了W3C中关于 HTML 与 JavaScript 分离的基本原则
2、脚本模型(又叫动态绑定): 在 JS 中,取到某个节点,并添加事件属性
eg: window.onload=function(){}
优点: 实现了 HTML 与 JavaScript 的分离
缺点: 同一个节点只能绑定一个同类型事件,如果绑定多个,则绑定的最后一个生效
DOM2事件模型
1、添加事件绑定方式:
①IE8之前, btn2.attachEvent("onclick",函数);
②其他浏览器: btn2.addEventListener("click",函数,true/false);
参数三: false(默认) 表示事件冒泡 true 表示事件捕获
③兼容写法: if(btn2.attachEvent){
btn2.attachEvent();
}
else{
btn2.addEventListener();
}
2、优点
①可以给同一节点,添加多个同类型事件
②提供了可以取消事件绑定的函数
③取消DOM2事件绑定:
注意: 如果要取消DOM2事件绑定,那么在绑定事件时,处理函数必须要使用有名函数,而不能使用匿名函数
三、JS 中的事件流
1、事件冒泡: 当某 DOM 元素触发一种事件时,会从当前节点开始,逐级往上触发其祖先节点的同类型事件,直至 DOM 根节点
>>>什么情况会产生是事件冒泡:
①DOM0 模型绑定事件,全部都是冒泡
②IE8之前,使用 attachEvent() 绑定的事件,全部都是冒泡
③其他浏览器,使用 addEventListener() 添加事件,当第三个参数省略或为 false 时,为事件冒泡
2、事件捕获: 当某 DOM 元素触发一种事件时,会从文档根节点开始,逐级往下触发其祖先节点的同类型事件,直至 该节点自身
>>>什么情况会产生是事件捕获:使用 addEventListener() 添加事件,当第三个参数为 true 时,为事件捕获
3、 阻止事件冒泡
function myParagraphEventHandler(e) {
e = e || window.event;
if (e.stopPropagation) {
e.stopPropagation(); //除 IE 以外的 浏览器中,使用该语句阻止冒泡
} else {
e.cancelBubble = true; //IE 浏览器中,使用该语句阻止冒泡
}
}
4、取消时间默认行为
function eventHandler(e) {
e = e || window.event;
// 防止默认行为
if (e.preventDefault) {
e.preventDefault(); //IE以外
} else {
e.returnValue = false; //IE
}
}
四、JS 中的数组
1、数组的基本概念
内存空间中连续存储的一组有序数据的集合
元素在数组中的顺序,成为下标.可以使用下标访问数组的每一个元素
2、声明一个数组
①使用字面量声明:
var arr = [];
var arr = [1,2,3,4];
var arr = [1,"jianghao",true,{},null,func];
func();
arr[5](); arr[5]:取出下标为 5 的元素, ();调用 func 函数
②使用 new 关键字声明:
var arr=new Array(参数);
var arr=new Array(1,2,3,4);
>>>参数可以是:
a.参数省略,表示创建一个空数组
b.参数为一个整数,表示声明一个 length 为指定长度的数组,但是这个 length 随时可变可追加
c.参数为逗号分隔的多个数值,表示数组的多个值 new Array(1,2,3) == [1,2,3];
JS 中,同一数组,可以存储各种数据类型
3、数组中元素的读写/增删
①读写: 通过下标访问元素,下标从 0 开始
②增删: a.使用 delete 关键字删除数组的某一个值,删除后,数组的长度不变,对应位置变为 undefined.
eg: delete arr[1];
b.arr.pop(): 删除数组中的最后一个值,数组长度减1,相当于 arr.length-=1;返回值是被删除的值
c.arr.shift(): 删除数组中的第 一个值,数组长度减1,相当于 arr.length-=1;返回值是新数组的长度
d.arr.unshift(): 在数组的第 0 个位置上新增一个值,返回值是新数组的长度
e.arr.push(): 在数组的最后 1 个位置上新增一个值,返回值是新数组的长度
f.直接访问数组没达到的下标,可以动态追加
arr[100]=1;中间如果有空余下标,将存入 undefined
b、c、d、e 方法均会改变原数组
4、数组中的其他方法:
①join():将数组用指定分隔符连接为字符串。当参数为空时,默认用逗号分隔 例: arr.join("-")
②concat():连接数组,原数组不会被改变,将两个或多个数组的值连接为新数组 var arr2=arr.concat(arr,arr1);
连接时,如果有二维数组,则至多能拆一层 []
[1,2].concat([3,4],[5,6]) -> [1,2,3,4,5,6]
[1,2].concat([3,4,[5,6]]) -> [1,2,3,4,[5,6]]
③reverse():会直接修改掉原数组,将数组反转倒序输出
④slice(begin,end):原数组不会被改变,截取数组的某一部分,返回一个新数组
>>>传入一个参数,表示开始区间,默认截到数组最后
>>>传入两个参数,表示开始和结束的下标
>>>两个参数,可以为负数,表示从右边开始数,数组最后一个值为-1
slice(3,7):左闭右开区间,下标值为3的元素去的到,为7的取不到
⑤sort():排序 ,会改变原数组,默认每个元素首字母的ASCII值升序排列
[3,1,5,12].sort() -> [1,12,3,5];
>>>可以传入一个比较函数,手动指定函数的排序算法,函数将默认接受两个值,函数默认接受两个值 a、b,如果函数返回值>0,则a>b
arr.sort(function(a,b){
return a-b;//升序排列
return b-a;//降序排列
});
⑥indexOf(value查询内容,index查询起始数组下标):接受两个参数,返回数组中第一个 value 值所在的下标,
如果没有找到返回-1;
>>>如果没有指定 index,则表示全数组查找 value;
>>>如果 指定 index,则表示从 index 开始,向后查找 value;
lastIndexOf():返回数组最后一个 value 值所在的下标
⑦forEach():专门用于循环遍历数组,接收一个回调函数,回调函数接受两个参数,第一个参数为数组每一项的值,第二个参数为下标
(IE8及之前不支持此函数)
arr.forEach(function(item,index){
console.log(item);
});
⑧map():数组映射,使用方式与 forEach() 相同,不同的是 map() 可以有 return 返回值,表示将原数组的每个值进行操作后,
返回给一个新数组
【JS 遍历数组的方式】:a.for 循环 b.forEach() c.map()
5、二维数组与稀疏数组(了解)
①二维数组: 数组中的值,依然是一个数组形式
eg: arr = [[1,2,3],[4,5,6]];//相当于二行三列
读取二维数组: arr[行号][列号];
②稀疏数组: 数组中的索引是不连续的(length 要比数组中实际元素个数大)
6、基本数据类型 & 引用数据类型
①基本数据类型(数值型、字符串、布尔型等变量): 赋值时,将原变量中的值,赋给另一个变量。赋值完成后,两个变量相互独立,修改其中一个的值,另一个不会变化
②引用数据类型(数组、对象): 赋值时,将原变量在内存中的地址,赋给另一个变量。赋值完成后,两个变量存储的是同一个内存地址,
访问的是同一份数据, 修改其中一个的值,另一个也会发生变化
五、Boolean 类
声明方式:
①使用字面量方式声明一个单纯的变量,用 typeof 检测 为 Boolean 类型
var bool=true;
console.log(bool);
②使用 new Boolean() 声明一个Boolean类型的对象 ,用 typeof 检测 为 Object 类型
var bool = new Boolean(true);
console.log(bool);
六、Number 类
1、 声明方式:
var num=10;
console.log(num); 用 typeof 检测 为 Number 类型
var num = new Number(10);
console.log(num); 用 typeof 检测 为 Object 类型
2、方法:
① Number.MAX_VALUE 返回Number类可表示的最大值
Number.MIN_VALUE 返回Number类可表示的最小值
②.toString(): 将数值类型转换为字符串类型
var str = num.toString();
console.log(typeof str);
③toLocaleString(): 将数值按照本地格式顺序转换为字符串,一般从右开始,三个一组加逗号分隔
var str = num.toLocaleString();
④toFixed(n): 将数字保留 n 位小数,并转为字符串格式
⑤toPrecision(n): 将数字格式化为指定长度,n 表示不含小数点的位数长度
若 n<原数字长度,则用科学计数法表示
若 n>原数字长度,则小数点后补 0
var str = num.toPrecision(n);
⑥.valueOf(): 返回 Number 对象的基本数字值
var str = num.valueOf();
七、String 类:
1、属性:
str.length 返回字符串长度,字符数
字符串支持类似数组的下标访问方式: str[0];
2、方法:
①.toLowerCase(): 将字符串所有字符转成小写
toUppCase() : 将字符串所有字符转成大写
var str1 = str.toLowerCase();
var str1 = str.toUppCase();
②.charAt(n): 截取数组的第 n 个字符,相当于 str[n];
var str1 = str.charAt();
③indexOf(value查询内容,index查询子串在字符串中出现的位置):接受两个参数,
返回字符串中第一个 value 值所在的下标,
如果没有找到返回-1;
>>>如果没有指定 index,则表示全字符串查找 value;
>>>如果 指定 index,则表示从 index 开始,向后查找 value;
lastIndexOf():同数组
④.subString(begin,end): 从字符串中截取子串,左闭右开,同 数组 slice();
⑤spilt("分隔符"): 将字符串以指定分隔符分隔存入数组中, 传入 "" 表示将字符串的每个字符分开放入数组
⑥.replace("old","new"):old 可以是 a.普通字符串,则只替换第一个old
b.正则表达式,则按正则表达式要求替换old
八、Date 日期类:
1、new Date(): 返回当前最新时间
new Date("2017.8.31 12:32:04"): 返回指定时间
var dates = new Date();
document.write(dates);
2、常用方法:
.getFullYear(): 获取四位年份
.getMonth(): 获取月份 0~11
.getDate(): 获取一个月中的第几天 1~31
.getDay(): 获取一周 中的第几天 0~6,0 表示周天
.getHours(): 获取小时
.getMinutes(): 获取分钟
.getSeconds(): 获取秒
九、自定义对象
1、基本概念
①对象: 拥有一系列无序属性和方法的集合.
②键值对:对象中的数据是以键值对的形式存在,对象的每个属性和方法,都对应一个键名,以键取值.
③属性: 描述对象特征的一系列变量(对象中的变量)
④方法: 描述对象行为的一系列函数(对象中的函数)
2、声明对象
①字面量声明:
var obj = {
key1 : value1,
key2 : value2,
func1: function(){}
}
>>>对象中的数据以键值对形式存储,键与值之间用 : 分隔,多个键值对之间用 , 分隔
>>>对象中的键可以除了数组、对象以外的任何数据类型,但一般只用普通变量名作为键
>>>对象中的值可以是任何数据类型,包括数组和对象
var person = {
name : "张三",
age : 14,
say : function(){
alert("我会说话!");
},
}
console.log(person);
console.log(person.name);
console.log(person.age);
console.log(person["age"]);
person.say();
②使用 new 关键字声明:
var obj = new Object();
obj.key1 : value1;
obj.key2 : value2;
obj.func1: function(){}
var person = new Object();
person.name = "张三";
person.age = 14;
person.say()= function(){
alert("我会说话!");
}
3、对象中属性和方法的读写
①.运算符: 对象名.属性 对象名.方法();
对象内部: this.属性 this.方法()
对象外部: 对象.属性 对象.方法()
②通过["key"]调用: 对象名.["属性名"] 对象名.["方法名"]();
>>>如果键中包含特殊字符,只能使用第 ② 种方式
>>>对象中直接写变量名默认调用全局变量,如果需要调用对象自身的属性或方法,需要使用 对象名.属性 或 this.属性(推荐)
person.age this.age
③删除对象的属性和方法: delete 对象名.属性名 delete 对象名.方法名
delete person.age;