js个人笔记
1. arr.indexOf(arr[a]) 返回 arr[a]在数组中的序号
2. 阻止默认事件(W3C )e.preventDefault(); (IE)window.event.returnValue = false;
3. 阻止事件冒泡 (W3C)e.stopPropagation(); (IE)window.event.cancelBubble = true;
4. 基本数据类型按值传递数据,而对象类型按引用类型传递数据(高程3-69)
var name = 1;
var name2 = name;
alert(name2);//1
var name = "n1";
var name.age= "22";
alert(name.age);//undefined
var o = new Object();
var o1 = o;
o.name = "a";
alert(o1.name);//a
5. 基本类型检测 typeof n n//"11",true,22,null,new object,未定义(高程3-71 )
输出(string boolean number object object undefined).
引用类型检测 a instanceof Object 返回(true或false) 即变量是否是给定的类型
6.访问局部变量比访问全局变量快,(原型链)从内往外搜索变量
7.创建对象实例方法。1.new后面跟构造函数 var a = new object(); 2.使用对象字面量 var a={};
8.访问对象的属性可以用点表示法,也可以用方括号。方括号的主要优点就是可以通过变量来访问属性,保留字和关键字都可以用方括号的方法来引用.
除非必须使用变量来访问数据,建议使用点表示法。
9.创建数组,var a = new Array(3);//创建长度为3的数组,var b = new Array("a");创建内容为a的数组,即如果参数为数字则创建该长度的数组.
10.定义数组方法 1.var a = new Array(); 2. var a = [],数字的length是不只读的,如果设置的长度少于数组的长度则截取数组的长度,
如果定义一个超过数组长度下标的元素,将增加数组的长度为下标长度加1,为数组添加元素等于数组的length长度项a[length]="a",
即在数组的最后添加一项;
11.数组join方法连接数组,分割字符串参数,默认逗号
12.数组(尾)栈方法push向数组中添加项,在最顶部,返回数组的长度,pop方法弹出数组最后添加的项,返回弹出的项
13.数组(头)队列方法shift,弹出最新进入的项,返回弹出的项,unshift方法,在数组最前添加项,返回数组的长度
14.数组排序方法reverse和sort,reverse方法反转数组顺序,sort默认升序排序数组,sort接受一个比较函数作为参数,比较函数接受2个参数,
第一个参数位于第二个参数之后则返回负数,相等则返回0,第一个参数位于第二个参数前面则返回正数,如需反转顺序执行返回相反的数即可
15.数组concat方法,复制数组,可传递参数,即添加到复制的数组后面,可以是字符串或数组,原数组保持不变,slice方法,基于当前数组创建新的数组
传递一个参数表示返回从参数位置开始到结尾的心数组,传递2个参数表示从第一个参数开始到第二个参数结束,但是不包括第二个参数结束位置,如果参数为夫
则加数组长度即可
16.数组splice方法,删除项(2个参数),第一个表示开始位置,第二个表示删除的项数,插入(3个参数,第二个为0),第一个表示开始位置,第二个后面的表示
要插入的项,可插入多个,替换(3个参数),第一个表示开始位置,第二个表示要替换的项数,第三个表示要插入的项,方法返回删除的项,没有删除返回
空数组
17.数组indexOf和lastIndexOf,接受2个参数,第一个表示要查找的项,第二个可选表示从某个位置开始,lastIndexOf从后向前查,没有查到返回-1
18.数组迭代方法every,filter,forEach,map,some
19.数组缩小方法reduce,reduceRight
20,函数声明与函数表达式的区别,函数声明是在其执行任何代码钱可用,而函数表达式必须等到执行到它所在代码行才真正的解释执行
21.基本包装类型(字符串string,布尔boolean,数字number),调用基本的方法执行的流程是,1,先创建一个实例对象,2,在实例对象上调用方法。
3.销毁实例对象
22.字符串操作方法,charAt与charCodeAt,参数数字,返回字符串中改位置的字符,charCodeAt 返回字符的编码,concat字符串连接方法,把多个字符串连接起来,返回新的字符串,可以接受多个参数
23.字符串截取方法,slice,substr,substring,第一个参数表示开始位置,slice与substring第二个参数表示字符串结束位置,substr第二个参数表上字符串长度
24.字符串的查找函数,indexOf与lastIndexOf, indexOf从前向后找,lastIndexOf从后向前找,没有找到返回-1,第二个参数表示开始的位置,位置也是相反的
25.字符串大小写转换方法toLowerCase与toUpperCase,
26.JSON转换函数,JSON.parse把JSON字符串转成JSON对象,JSON.stringify把JSON对象转成JSON字符串
27.字符串转JSON方法,类似JSON.parse
$.parseJSON = function(data){
if(window.JSON && window.JSON.parse){
return window.JSON.parse(data);
}
// JSON RegExp
var rvalidchars = /^[\],:{}\s]*$/,
rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g;
if ( rvalidchars.test( data.replace( rvalidescape, "@" ).replace( rvalidtokens, "]" ).replace( rvalidbraces, "")) ) {
return ( new Function( "return " + data ) )();
}
}
if(window.JSON && window.JSON.parse){
return window.JSON.parse(data);
}
// JSON RegExp
var rvalidchars = /^[\],:{}\s]*$/,
rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g;
if ( rvalidchars.test( data.replace( rvalidescape, "@" ).replace( rvalidtokens, "]" ).replace( rvalidbraces, "")) ) {
return ( new Function( "return " + data ) )();
}
}
JSON转换字符串方法类似JSON.stringify
$.JSONtostring = function(O){
var S = [];
var J = "";
if (Object.prototype.toString.apply(O) === '[object Array]') {
for (var i = 0; i < O.length; i++)
S.push($.JSONtostring(O[i]));
J = '[' + S.join(',') + ']';
}
else if (Object.prototype.toString.apply(O) === '[object Date]') {
J = "new Date(" + O.getTime() + ")";
}
else if (Object.prototype.toString.apply(O) === '[object RegExp]' || Object.prototype.toString.apply(O) === '[object Function]') {
J = O.toString();
}
else if (Object.prototype.toString.apply(O) === '[object Object]') {
for (var i in O) {
O[i] = typeof (O[i]) == 'string' ? '"' + O[i] + '"' : (typeof (O[i]) === 'object' ? $.JSONtostring(O[i]) : O[i]);
S.push(i + ':' + O[i]);
}
J = '{' + S.join(',') + '}';
}
return J;
}
var S = [];
var J = "";
if (Object.prototype.toString.apply(O) === '[object Array]') {
for (var i = 0; i < O.length; i++)
S.push($.JSONtostring(O[i]));
J = '[' + S.join(',') + ']';
}
else if (Object.prototype.toString.apply(O) === '[object Date]') {
J = "new Date(" + O.getTime() + ")";
}
else if (Object.prototype.toString.apply(O) === '[object RegExp]' || Object.prototype.toString.apply(O) === '[object Function]') {
J = O.toString();
}
else if (Object.prototype.toString.apply(O) === '[object Object]') {
for (var i in O) {
O[i] = typeof (O[i]) == 'string' ? '"' + O[i] + '"' : (typeof (O[i]) === 'object' ? $.JSONtostring(O[i]) : O[i]);
S.push(i + ':' + O[i]);
}
J = '{' + S.join(',') + '}';
}
return J;
}
28.MATH函数,max最大,min最小,ceil向上舍入,floor向下舍入,round四舍五入,random随机数,返回某个区间的随机数= Math.floor(Math.random*可能数的总数+最小值)
29.创建一个函数默认为该函数创建一个prototype属性,这个属性指向函数的原先对象,原型对象默认获得constructor属性,这个属性包含一个指向prototype属性所在函数的指针(Person.prototype.constructor = Person),当调用构造函数创建对象实例后,该实例内部包含一个指针[[prototype指针]]或[__proto__]指向构造函数的原型对象(原型对象Person.prototype),这个连接存在于实例与构造函数的原型对象之间,而不是实例与构造函数 , 当Person.prototype = {},指向一个对象字面量时,Person.prototype.constructor不再指向Person,constructor指向新对象的constructor(Object),可以设置指向原来的Person.prototype.constructor = Person
30.实例可以访问原型中的值,但不能通过对象重写原型中的值,添加一个与原型中同名的方法,只是屏蔽原来的方法,delete可以重新获得原来的方法
31.in操作符会通过对象能够访问给定的属性时返回true,无论该属性是在实例还是原型中
32.在原型中查找值的过程是一次搜索,对原型的修改都会立即体现在实例上,
33.可以为原型添加属性和方法,但如果重写整个原型对象,对象实例就必须放到重写原型对象后面,因为重写原型对象切断了构造函数与原型的联系,,构造函数调用时会为实例添加一个指向原型对象的指针[prototype],即实例对象的指针指向原型而不是构造函数
34.(原型对象的不好)通过实例修改原型属性,其他实例的属性也同时修改,所以一般通过构造函数定义实例属性,原型定义方法和共享的属性(构造函数与原型创建自定义类型方法的最佳模式)
35.子类型重写超类型的方法或添加不存在的方法,代码放在替换原型后面,在实现原型连继承的时候,不能用对象字面量的方式创建原型方法,因为这会重写原型链
36.(166第三版)通过原型来实现继承时,原型也会变成另一类型的实例,这样,原型的所有属性对这类似是共享的,所有只有在要实例的构造函数中定义属性才不会被所有共享
37.借用构造函数,就是在构造函数的内部通过call或apply的方法调用超类型方法,不会发生属性共享的情况,这种方式可以传递参数,为了不覆盖构造函数的方法,借用构造函数先执行,但是超类型原型的属性和方法不会被继承过来
38.继承基本数据类型方法,如indexOf,通过赋值或赋值原型方法
var arrnew = [];arrnew是类数组的数组,jquery对象
var emptyArray = [];
arrnew.indexOf = emptyArray.indexOf;
或者
arrnew.indexOf = Array.prototype.indexOf
38.组合继承,就是通过借用构造函数来实现属性,通过原型来实现方法继承,(168第三版)
39.闭包值方法,通过返回执行匿名函数,闭包内this需保存下来传递到闭包内
40.BOM 操作window.frames[]数字或name最顶层top,里面还包含,top.parent.frames[],窗口位于屏幕位置:screenLeft和screenTop(兼容screenX和screenY)
41.DOM父元素parentNode,子元素childNodes,上一个元素previousSibling,下一个元素nextSibling,当previousSibling和nextSibling是最后一个时,值为null,只有一个节点是都为null,第一个节点firstChild,最后一个节点lastChild,只有一个节点的时候指向同一个节点,没有子节点都为null\
42.操作节点appendChild向文档尾部插入节点,如果插入的节点已存在则移动到最后,移动到特定的位置insertBefore,第一个参数是要插入的节点,第二个是参照插入的位置,如第二个参数为null,则与appendChild一样,replaceChild,第一个参数是要插入的节点,第二个参数要替换的节点.
43.cloneNode创建节点的副本,接受一个布尔参数,表示是否深复制,true复制子节点,false只复制节点本身,
44.获取元素的属性getAttribute设置setAttrubute移除removeAttribute
45.文档片段 createDocumentFragment
46.NodeList对象在访问DOM文档时都是实时查询的,所有需先保存再使用
47.DOM扩展方法querySelector和querySelectorAll ,matchesSelector,getElementsByClassName,classList属性及其方法add、remove、toggle、contains
48.访问样式属性float时,用cssFloat,ie用styleFloat,cssText会重写style属性,删除以前的style属性
49.获取元素全部后的计算样式DOM使用window.getComputedStyle(dom,null).width(jquery使用document.defaultView)获取,IE使用dom.currentStyle.width获取,计算后的样式是只读的
50.元素大小offsetHeight元素的高度offsetWidth元素宽度offsetTop元素距top的大小,offsetLeft距left的大小(相对父元素),clientWidth元素的宽度不包括边框,clientHeight元素的高度不包括边框,scrollTop滚动距离顶部的高度,scrollLeft滚动距离这边的宽度,scrollWidth元素的总宽度,scrollHeight元素的总高度
51.DOM2级事件处理程序addEventListener和removeEventListener添加和删除事件,第三个参数true表示捕获阶段触发,false表示冒泡阶段触发,为兼容应该在冒泡阶段触发,addEventListener添加的事件必须removeEventListener移除,并且不能使用匿名函数的方式,IE中定义的是attachEvent和detachEvent方法,ie中事件需添加on前缀,使用attachEvent方法的情况下,事件处理程序在全局作用域中运行,即事件函数中的this===window,attachEvent添加的事件与执行的顺序相反,即先绑定的后执行,attachEvent添加的也只能detachEvent移除,并且不能是匿名函数
52.兼容DOM的事件会传人一个事件对象event,event包含这个事件的相关信息,event只有在事件执行期间才有,阻止默认事件preventDefalut();阻止事件在DOM中传播stopPropagation(),即阻止事件捕获或者冒泡,event.target事件当前对象,IE中事件对象是window.event,阻止默认事件returnValue=false取消事件默认行为,阻止事件冒泡canelBubble=true阻止冒泡,事件当前对象是event.srcElement
53.onload事件(window,document),DOM元素,img,(script,link部分支持),img的onload事件,新创建IMG(new Image())元素不一定要添加到文档后才开始下载,只有设置了src属性就开始下载,可以用来缓存图片,而script只有设置了src并添加到文档才会开始下载
54.unload,resize,scroll事件,resize(window,body)当浏览器变化1像素时触发,而FF则在浏览器介绍变化时触发,
55.焦点事件blur,focus事件都不冒泡(但有捕获)
56.鼠标事件click,mouseover,mouseout.dbclick,mousedown,mouseup,(mouseenter,mouserleave不冒泡)
57.鼠标事件坐标clientX,clientY表示事件发生在视口中的水平坐标和垂直坐标,不包含页面滚动的距离,页面坐标pageX,pageY表示鼠标在页面的位置(ie中pageX = clientX+document.body.scrollLeft||document.documentELement.scrollLeft),屏幕坐标位置screenX,screenY表示鼠标相对整个屏幕的位置,修改健shiftKey,aktKey,ctrlKey,metaKey默认为false,如果事件发生时健被按下相应的属性为true,mouseover和mouseout相关属性relatedTarget(ie中mouserout相关toElement,mouseover相关fromElement),鼠标按钮buttton属性(0-7表示按下不同键),(只IE支持的属性offsetX,offsetY目标距边界的坐标)鼠标滚轮事件(detail属性)mousewheel
58.键盘事件keydown.keypress,keyup,event对象有KeyCode属性表示按下的字符编码(编码兼容有差异),keypress有charCode属性使用String.fromCharCode可以将编码转化成字符,文本事件textIput,
59.HTML5事件,contentmenu,beforeunload,DOMContentLoaded,readystatechange,pageshow,pagehide,hashchange
60.移动设备事件orientationchange,MozOrientation,deviceorientation,devicemoation
61.触摸与手势touchstart,touchmove,touchend,touchcanel(属性touches,targetTouchs,changeTouches),gesturestart,gesturechange,gestureend
62.事件委托,通过事件冒泡实现,在公共的元素上绑定事件,而且通过event.target判断触发(适合事件委托的事件包括click,mouseover,mouseout,keydown,keyup,keypress),优点,访问快,设置时间少,占内存少,模拟事件,触发dispatchEvent
63.表单操作,select属性index,label,selected,text,value,添加选项appendChild,add,ie不支持new Option的appendChild添加,add可以,移除removeChild,设置null,
64.代码可读性,变量函数命名,解耦合,不修改基本类型的方法属性,避免全局变量,避免与null比较
65. 性能:使用局部变量比使用全局变量快(原型链查找),使用局部变量保存全局变量,最小化语句var a,b;i++,数组,对象字面量等等
66.字符串转换为数字 var a = parseFloat(str);var b = parseInt(str);var a = +(str);
67.多维数组 var arr = new Array(); var arr[0] = new Array();var arr[1]= new Array();
68.replace str.replace(/正则/,function(a,b,c){}),a表示str中匹配的字符串,b表示在str字符串中的位置,c表示str字符串
69.option 的add方法在ie6上第一个参数必须定义为 new Option对象
70.option 的移动删除操作都会重置index属性
posted on 2013-06-04 13:56 liuyong1855 阅读(242) 评论(0) 编辑 收藏 举报