1.<!DOCTYPE>的作用
此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范
2.Js中函数的几种声明方式
1.Function Declaration(函数定义)
function bar() { return 3;}
2.Function Expression(函数表达式)
//匿名函数表达式var a = function() { return 3;}
//有名函数表达式var a = function bar() { return 3;}
//自调用函数表达式(function sayHello() { alert("hello!");})();
3.数据类型
1.基本数据类型
num 布尔 str undefined null
2.引用数据类型
obj(arr function )
4.js中如何对一个对象进行深度克隆
首先克隆的概念要明白:
浅度克?。涸祭嘈臀荡?,对象类型仍为引用传递。
深度克?。核性鼗蚴粜跃耆粗?,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。
深度克隆的实现:为了保证对象的所有属性都被复制到,我们必须知道如果for循环以后,得到的元素仍是Object或者Array,那么需要再次循环,直到元素是原始类型或者函数为止。为了得到元素的类型,我们定义一个通用函数,用来返回传入对象的类型。
注意:deepClone这个函数中的result一定要判断类型。
5.箭头函数
this是不会改变指向对象的指向。
注意:我们知道call和apply可以改变this的指向,但是在箭头函数中是无效的。
6.如何控制alert的换行
function alert_br(){
if(!document.all){//FF谷歌浏览器用这个
alert('第一行\n第二行');
}else{ //IE系列用这个
alert('第一行\r\n第二行);
}
}
alert_br();
7.把url解析为对象
var url="http://www.taobao.com/index.php?key0=0&key1=1&key2=2";
function parseQueryString(url){
var str =url.split("?")[1];
var items = str.split("&");
console.log(items);
var result={};
for(var i = 0; i<items.length ; i++){
arr = items[i].split('=');
result[arr[0]]=arr[1];
}
return result;
}
var obj=parseQueryString(url);
console.log(obj)
8.阻止a标签向herf跳转
dom0是return false;
dom2就是preventDefault();
9.JQ实现angular的双向绑定
10.事件委托(代理)
原理:在容器节点上绑定事件,利用冒泡,判断事件是否在指定的选择器的节点上被触发。
优点:只绑定一次,动态创建的也不用重复绑定
11.闭包
作用:外部可以读取函数内部的变量
变量一直被保存在函数内部不被释放掉。
会造成内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法:在退出函数之前,将不使用的局部变量全部删除。
12.请介绍熟悉的加载方案,不少于2种?
1.defer,只支持IE;
- async: async的定义和用法(是HTML5的属性) ;
3.创建script,插入到DOM中,加载完毕后返回callBack。
13.js中如何定义class,如何扩展prototype
http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html
es6中 class Person {
constructor(name) { this.name = name; }
say () { console.log("say hi"); }};
new Person().say()
14.glup和fis3压缩工具
http://fis.baidu.com/fis3/docs/user-dev/uri.html
15.如何添加html元素的事件,有多少种方法
1.给元素直接绑定on事件类型
2.DOM0级
3.DOM2级