1 行内元素,块级元素,空元素?
行内: a b span img input select strong
块级: div ul li h1 h12 h3 p….
空元素:br hr link meta等
HTML5移除了一些元素如:big,center,font,frame,frameset等
处理HTML5标签兼容性的问题方式:
1. IE6-IE8支持document.createElement产生的标签,可以利用这个特性兼容
2. 使用html5shim框架
var arr = [3,6,2,5,9,4],len = arr.length;
for(var i = 0;i<len;i++){
for(var j = 0;j<len-i-1;j++){
if(arr[j] < arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
==与===
===判断规则:
1 首先比较类型,如果类型不同,则肯定不同
在类型相同的前提下:
2 如果两边都是数值,且同一个值,则相等,如果有至少一个NaN,则不相等
3 如果两个值都是字符串,每个位置字符都一样,则相等
4 如果两个值都是true,或者false,则相等
5 如果两个值都引用同一个对象或者函数,则相等
6 如果两个值都是null或者undefined,则相等;
==判断规则:
如果两个值类型相同,进行===比较,
如果两个值类型不同,则需要进行类型转换再比较:
1 如果一个是null,一个是undefined,则相等
2 如果一个是字符串,一个是数值,则要转换成数值再进行比较
3 如果一个boolean,一个是数值,则true转换为1再比较,如果是false转换成0再比较。
如果一个对象一个数值或字符串,要用对象的toString()和valueOf()方法转换成相应的类型再进行比较。
举例:
0 == ""; //true
0 == false; //true
0 === ""; //false
0 === false; // false
"" === false; //false
1 == "1"; //true
1 === "1"; //false
数组去重
Array.prototype.unique1 = function(){
var newArr = [],obj = {};
for(var i = 0;i<this.length;i++){
if(!obj[this[i]]){
newArr.push(this[i]);
obj[this[i]] = 1;
}
}
return newArr;
}
//es6
var newArr = [...new Set(arr)];
var newArr = Array.from(new Set(arr));
ajax工作原理
获取XMLHttpRequest对象,
function getRequest(){
var xmlHttp = null;
try{
xmlHttp = new XMLHttpRequest();
}catch(e){
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHttp");
}catch(e){
}
}
return xmlhttp;
}
调用函数open(method,url)
发送请求send();
接收相应
request.onreaystatechange = function(){
if(request.readyState == 4 && request.state == 200){
var restule = request.responseText;
}
}
ajax status:
200 请求成功
404 没有找到
500 服务器出错
304 请求成功,但是源文件没有修改。
403 禁止访问
清除浮动CSS
推荐使用的:
在父级DIV上定义伪类:after
parentDiv:after{display:block;height:0;contetn:”“;clear:both;visibility:hidden}
parentDiv{zoom:1;}//用来兼容IE6
响应式布局
@media screen only not and
null和undefined
null表示没有对象,转换数值为0,
初始化一个变量,可能被赋值为一个对象;
undefined,表示缺少值,数值转化为NaN
变量被声明了但是没有赋值,调用函数时,应该提供的参数没有提供,
对象没有赋值的属性,函数没有返回值时,返回undefined;
null表示无值,undefined表示未声明的变量,或已声明,但并没有赋值。
null==undefined结果为true.
闭包
闭包就是能够读取其他函数内部变量的函数,只有定义在一个函数内部的子函数才能
读取这个函数的变量,可理解成:定义在一个函数内部的函数。
本质上,闭包就是将函数内部和函数外部连接起来的桥梁。
onload和ready的区别
ready:表示文档结构已经加载完成(不包含图片等非文字媒体文件)
onload:表示页面包含图片等在内的所有元素都加载完成
js原型链
每个对象都有一个prototype属性,称之为原型,而原型的值也是一个对象,因此他也有自己的原型,这样串联起来就形成了一条原型链,原型链的链头是Object,他的prototype值比较特殊,为null.
原型链的作用是用于对象继承,函数A的原型属性是一个对象,当这个函数被用作构造函数来创建实例时,该函数的原型属性将被作为原型赋值给所有对象实例。
当访问一个对象的一个属性时,首先查找对象本身,若未找到,则继续查找其原型对象的属性。只要没有被覆盖,对象原型的属性就能在所有的实例中找到。
return返回值
function foo(){
return
{
bar:’hello’
}
}
在js中,return,break,continue语句中,如果后面紧跟换行,解析器一定会在后面填充分号,所以这个函数返回值为undefined;
NaN
Not a Number的缩写,使用isNaN()来判断一个值是否为NaN;
isNaN(NaN) true
isNaN(22) false
isNaN(‘AA’) true
isNaN(‘343fdf’) true
typeof NaN //number
NaN === NaN false
NaN === undefined false;
短路运算
逻辑与和逻辑或会返回一个值,并且二者都是短路运算符
逻辑与返回第一个是false的操作数或最后一个为true的运算符
1&&2&&0 //0
1&&0&&1 //0
1&&2&&3 //3
如果某个操作数为false,则之后的都不会被计算
逻辑或返回第一个为true的操作数或最后一个是false的操作数
1||2||0 //1
0||2||1 //2 第一个是0,为false,那么还要继续计算下去,第二个2为true,则返回2
0||0||false //false
如果某个操作数为true,则之后的值都不会被计算
判断为数组
Array.isArray()
toString.call([]); //”[object Array]”
var arr = [];
arr.constructor://Array
instanceof Array;//true
事件绑定
addEventListener(events,callback,captrue)//captrue 默认为false,冒泡执行,true就是捕获执行
IE9以前使用attachEvent(on+event,callback)只支持冒泡
var event = event || window.event;
var target = event.srcElement || event.target
document.documentElement.clientWidth || document.body.clientWidth