函数无明确返回值时,返回的值是undefined
undefined表示对象已经声明,没有赋值.null表明对象不存在(null == undefined)
强制转换为boolean类型时,undefined、null、空字符串、0都返回false,其它的返回true;
在进行逻辑运算时,如果运算数不是原始Boolean类型,则返回对象。
== 和 === 区别是 ==在比较前会进行自动类型转换,而===不会进行类型转换
with语句是运行缓慢的代码段,尽量少用
java 与 js 中switch 的区别: js中switch case可以用字符串也可以用不是常是的值
js中可以声明两个函数名一样的函数而不会发生错误,后面的函数会覆盖前面的函数
闭包就是函数的内部函数调用了外部的变量
js原始类型: undefined、null、Number、String、Boolean
js引用类型: String、Number、Boolean、Object (虽然名字和原始类型一样,但引用类型是原始类型的包装类)
encodeURI和encodeURIComponent区别:后者只会转码所有的非标准字符,例如: 空格 --> %20
escape和encodeURI最大区别: escape只能转码ascii字符,所有建议少用
cell 向上取整, floor向下取整 ,round 标准的四舍五入
location.reload(true); 强制刷新,默认是false
obj.attributes.getNamedItem('id').nodeValue 访问节点的属性值
document.all ie返回所有元素 document.getElementsByTagName('*') other browser return
document.getElementsByName ie6仅仅检查input和img标签
document.getElementById('abc') ie6中如果abc是某元素的id值同时也是另一个元素的name值 那么会返回这两个元素
通过dom访问元素的class属性时 要通过className访问,不能通过class访问是因为class是保留字,估计留有其它用的
可以通过NodeIterator和TreeWalker遍历dom
dom事件分类 捕获型事件(DOM)、冒泡型事件(IE),dom型事件是坐documentElement向事件源捕获,然后再冒泡。而ie事件是直接从事件源向documentElement冒泡
addEventListener、removeEventListener ie6-ie8均不支持 只支持attachEvent、detachEvent
常用事件编号 回车:13 空格:32 回删:8
var target=event.srcElement || event.target; //事件源对象
var char=target.keyCode || target.charCode; //事件源对象接收的按键
event.returnValue=false ie阻止事件 event.preventDefault(); dom兼容阻止事件
event.cancelBubble=true ie阻止事件冒泡 event.stopPrapagation() dom兼容阻止事件冒泡 目前高版本的浏览器均支持cancelBubble和stopPropagation
keyDown > keyPress > keyUp 按字符键产生事件顺序
keyDown > keyUp 按非字符键产生的事件顺序
一直按字符键不松,会一直产生keyDown、keyPress事件。一直按非字符键不松只会产生keyDown事件
obj.currentStyle.color ie中的最终样式 getComputedStyle(obj,null).color dom中的最终样式,null可以是伪类时的样式 例如:'hover'
innerHTML、outerHTML、innerText、outerText firefox(16.0.0)不支持*Text,支持*html,chrome都支持
EvalError、ReferenceError、RangeError、synatexError、TypeError、URIError js异常类型
document.domain='qq.com' 设置域,可以跨子域访问。只能设置url中已经存在的值,所有baidu.com就不能设置成功
1160 单个tcp-ip包的大小,所有尽量控制js文件的大小在1160字节
/* 数组连结比'+'性能更高 */
function StringBuffer(){
this._strings=new Array();
}
StringBuffer.prototype.append=function(str){
this._strings.push(str);
}
StringBuffer.prototype.toString=function(){
return this._strings.join('');
}
var d=new Date();
var sb=new StringBuffer();
for(i=0;i<100000;i++){
sb.append(i);
}
sb.toString();
var d2=new Date();
console.log(d2-d);
/* 混合构造/原型方式*/
function o(a,b,c){
this.a=a;
this.b=b;
this.c=c;
}
o.prototype.m=function(){
console.log(this.a);
}
var t1=new o(1,2,3);
var t2=new o(4,5,6);
t1.m();
t2.m();
/* call 和 apply */
function classA(a,b){
console.log(a+','+b);
}
function classB(a,b){
classA.call(this,a,b); //参数为列表
classA.apply(this,arguments); //传递为数组
this.a=a;
this.b=function(){
console.log(a);
}
}
var t1=new classB('1','2');
t1.b();
var t2=new classA('3','4');
/* 批量添加节点 */
var arr=[1,2,3,4,5,6];
var oFragment=document.createDocumentFragment();
for(i in arr){
var oDiv=document.createElement('span');
var oText=document.createTextNode(i);
oDiv.appendChild(oText);
oFragment.appendChild(oDiv);
}
document.body.appendChild(oFragment);
/* dom 访问节点*/
obj.firstChild
obj.lastChild
obj.childNodes
obj.nodeName
obj.nodeValue
obj.nodeType
obj.ownerDocument 这个节点所属的文档
obj.previousSibling 上一个兄弟节点
obj.nextSibling 下一个兄弟节点
obj.hasChildNodes 是否包含兄弟节点
obj.attributes 返回节点包含的属性数组
obj.appendChild
obj.removeChild
obj.replaceChild(newNode,oldNode)
obj.insertBefore(newNode,refNode)
/* dom 创建节点 */
document.createElement
document.createTextNode; 创建文本节点(text)
document.appendChild;
document.createDocumentFragment 文档碎片,把批量的节点添加到fragment后再添加到目标元素,减少界面重绘,提高性能
/* addEventListener*/
function show(){alert('clicked');}
var arr=[1,2,3,4,5,6];
var oFragment=document.createDocumentFragment();
for(i in arr){
var oDiv=document.createElement('div');
var oText=document.createTextNode(i);
oDiv.addEventListener('click',show,false); //false:冒泡时触发 true:捕获时触发
oDiv.appendChild(oText);
oFragment.appendChild(oDiv);
}
document.body.appendChild(oFragment);
/* 兼容事件绑定*/
var EventUtil=new Object;
EventUtil.addEventHandler=function(oTarget,sEventType,fnHandler){
if(oTarget.addEventListener)
oTarget.addEventListener(sEventType,fnHandler,false); //false 冒泡时触发
else if(oTarget.attachEvent)
oTarget.attachEvent('on'+sEventType,fnHandler);
else
oTarget['on'+sEventType]=fnHandler;
}
EventUtil.removeEventHandler=function(oTarget,sEventType,fnHandler){
if(oTarget.removeEventListener)
oTarget.removeEventListener(sEventType,fnHandler,false)
else if(oTarget.detachEvent)
oTarget.detachEvent('on'+sEventType,fnHandler);
else
oTarget['on'+sEventType]=null;
}
/* 查看css样式表中的样式 */
var oCSSRules=document.styleSheets[0].cssRules || document.styleSheets[0].rules;
var css='';
for(i=0;i<oCSSRules.length;i++) //样式表规则的集合
css+=oCSSRules[i].cssText;
//oCSSRules[i].style.color; //访问解析后的样式
console.log(css);
/*js 私有、静态、实例属性*/
function Person(age,face){
var age=age; //私有
this.face=face; //实例
Person.gender='man'; //静态属性
}
var p1=new Person(20,'圆脸');
var p2=new Person(22,'尖脸');
Person.gender; //必须在Person构造函数运行后(Person() || new Person())才能调用到值
p1.gener;
p1.age;
p1.face;