1.<!DOCTYPE>的作用
此標(biāo)簽可告知瀏覽器文檔使用哪種 HTML 或 XHTML 規(guī)范
2.Js中函數(shù)的幾種聲明方式
1.Function Declaration(函數(shù)定義)
function bar() { return 3;}
2.Function Expression(函數(shù)表達(dá)式)
//匿名函數(shù)表達(dá)式var a = function() { return 3;}
//有名函數(shù)表達(dá)式var a = function bar() { return 3;}
//自調(diào)用函數(shù)表達(dá)式(function sayHello() { alert("hello!");})();
3.數(shù)據(jù)類型
1.基本數(shù)據(jù)類型
num 布爾 str undefined null
2.引用數(shù)據(jù)類型
obj(arr function )
4.js中如何對(duì)一個(gè)對(duì)象進(jìn)行深度克隆
首先克隆的概念要明白:
淺度克略尤场:原始類型為值傳遞,對(duì)象類型仍為引用傳遞伙菊。
深度克掳苡瘛:所有元素或?qū)傩跃耆珡?fù)制,與原對(duì)象完全脫離镜硕,也就是說(shuō)所有對(duì)于新對(duì)象的修改都不會(huì)反映到原對(duì)象中运翼。
深度克隆的實(shí)現(xiàn):為了保證對(duì)象的所有屬性都被復(fù)制到,我們必須知道如果for循環(huán)以后兴枯,得到的元素仍是Object或者Array血淌,那么需要再次循環(huán),直到元素是原始類型或者函數(shù)為止财剖。為了得到元素的類型悠夯,我們定義一個(gè)通用函數(shù),用來(lái)返回傳入對(duì)象的類型躺坟。
注意:deepClone這個(gè)函數(shù)中的result一定要判斷類型沦补。
5.箭頭函數(shù)
this是不會(huì)改變指向?qū)ο蟮闹赶颉?br> 注意:我們知道call和apply可以改變this的指向,但是在箭頭函數(shù)中是無(wú)效的咪橙。
6.如何控制alert的換行
function alert_br(){
if(!document.all){//FF谷歌瀏覽器用這個(gè)
alert('第一行\(zhòng)n第二行');
}else{ //IE系列用這個(gè)
alert('第一行\(zhòng)r\n第二行);
}
}
alert_br();
7.把url解析為對(duì)象
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標(biāo)簽向herf跳轉(zhuǎn)
dom0是return false夕膀;
dom2就是preventDefault();
9.JQ實(shí)現(xiàn)angular的雙向綁定
10.事件委托(代理)
原理:在容器節(jié)點(diǎn)上綁定事件美侦,利用冒泡产舞,判斷事件是否在指定的選擇器的節(jié)點(diǎn)上被觸發(fā)。
優(yōu)點(diǎn):只綁定一次音榜,動(dòng)態(tài)創(chuàng)建的也不用重復(fù)綁定
11.閉包
作用:外部可以讀取函數(shù)內(nèi)部的變量
變量一直被保存在函數(shù)內(nèi)部不被釋放掉庞瘸。
會(huì)造成內(nèi)存消耗很大,所以不能濫用閉包赠叼,否則會(huì)造成網(wǎng)頁(yè)的性能問(wèn)題擦囊,在IE中可能導(dǎo)致內(nèi)存泄露违霞。解決方法:在退出函數(shù)之前,將不使用的局部變量全部刪除瞬场。
12.請(qǐng)介紹熟悉的加載方案买鸽,不少于2種?
1.defer贯被,只支持IE眼五;
- async: async的定義和用法(是HTML5的屬性) ;
3.創(chuàng)建script彤灶,插入到DOM中看幼,加載完畢后返回callBack。
13.js中如何定義class幌陕,如何擴(kuò)展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級(jí)
3.DOM2級(jí)