1、JavaScript的數據類型?
ECMAScript:string number boolean undefined object null
typeof:string number boolean undefined object function
2、3種強制類型轉換和2種隱式類型轉換?
強制類型轉換:Number()、String()、Boolean()、ParseInt()、parseFloat()
隱士類型轉換:+ - * / == %
3、數組中常見的方法?
參考:http://blog.csdn.net/mengstudents/article/details/76039281
4、ajax請求的時候,post方法和get方法的區別?
5、call和apply的區別?
call和apply的作用:改變構造函數中this的指向,一般用於繼承
6、ajax請求時,如何解析json數據?
解析json數據有兩種方式:
1、字符串解析
var obj = ‘{“name”:”小李子”}’;
var jsonObj = eval(‘(‘+obj+’)’);//eval解析
var jsonObj = JSON.parse(obj);//json.parse解析
2、區別
eval在解析字符串的時候,不會去判斷字符串的合法性,如果字符串中存在js語句,他也會執行;
JSON.parse在解析字符串的時候,會判斷字符串的合法性,如果字符串不合法的話,就會拋出異常;
就上面的描述而言,使用JSON.parse來解析json字符串更爲安全。
7、什麼是事件委託?
事件委託又叫事件代理,簡單來說:就是將自己要做的事情交給其他人去做,讓別人來代理。
事件委託的好處:
1)可以減少內存的佔用,不需要頻繁的綁定事件
2)當需要動態添加事件時,不需要爲新增的元素添加事件
8、什麼是閉包?有什麼特性?對頁面有什麼影響?
9、DOM節點的操作:添加、刪除、替換、插入
1、創建節點
1> 通過字符串方式創建節點:
var str = "<div></div>";
使用這種方式添加元素節點之後,想要爲每個元素添加事件,就需要重新獲取元素;否則的話,只能給最後一個元素節點添加事件
2> 通過createElement創建節點
該方法只能通過document對象來調用,可以動態的給元素綁定事件,創建完之後,使用appendChild的方式添加到頁面中,節點纔會生效
var div = document.createElement("div");//創建DIV節點
document.body.appendChild(div);//將創建好的節點添加到頁面中2、添加節點
1> 父元素.appendChild(節點對象)
將要插入的節點添加到父元素的最後一個子節點後邊,包括文本節點
var parent = document.getElementById("parent");//獲取父元素節點
var child = document.createElement("div");//創建新的元素節點
parent.appendChild(child);//將子元素節點添加到父元素節點中
2> 父元素.insertBofore(新的元素節點,被插入的元素節點)
將新的元素節點添加到被插入的元素節點之前
var parent = document.getElementById("parent");//獲取父元素節點
var newChild = document.createElement("div");//創建新的元素節點
var oldChild = parent.children[0];//獲取舊的元素節點
parent.insertBefore(newChild,oldChild);//將子元素節點添加到父元素節點中,並且將新的元素插入到舊的元素之前
3> 上述兩個方式,如果添加是已有元素,則相當於剪切
4> 注意:如果需要往父元素的第一個子元素節點前添加新的節點,需要先判斷該父元素是否存在子元素節點,如果存在,就使用insertBefore來插入子節點;否則的話就使用appendChild來插入子節點3、刪除節點
removeChild:刪除父元素下指定的節點
var parent = document.getElementById("parent");//獲取父元素節點
var child = parent.children[0];
parent.removeChild(child);//刪除第一個孩子節點4、克隆/複製節點
cloneNode:只能克隆節點的html和css樣式,不能克隆自定義屬性和事件
<body>
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<ul id="list2">
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
</ul>
<script>
var list = document.getElementById("list");
var list2 = document.getElementById("list2");
var child = list.children;
var child2 = list2.children;
var li = document.createElement("li");
li.innerHTML = 'hello';
list.appendChild(li); //往頁面中添加剛創建好的節點,添加到最後邊
list.appendChild(child2[3]); //將已經存在的節點添加到list中,相當於剪切功能,另一個元素對象list2中的節點會被刪除
list.insertBefore(li,child[1]); //向指定元素的前邊添加節點
list.insertBefore(child2[2],child[0]); //向指定元素前添加節點,同appendChild,具有剪切功能
list.removeChild(child[0]); //刪除指定的元素節點
list.replaceChild(li,child[0]); //替換指定位置的元素節點,被替換的元素會被刪除
</script>
</body>
5、替換節點
replaceChild(新元素,被替換的元素):被替換的元素會被刪除
6、查找節點
查找節點其實就是獲取元素對象,那麼就可以直接使用獲取元素對象的方法來查找節點—-在02中有相關方法說明
10、什麼是JavaScript的同源策略?
11、編寫一個B繼承A的方法
12、如何阻止事件冒泡和默認事件?
阻止事件冒泡:event.stopPropagation()
阻止默認事件:event.preventDefault()
13、下面程序執行後彈出什麼樣的結果?
function fn() {
this.a = 0;
this.b = function() {
alert(this.a)
}
}
fn.prototype = {
b: function() {
this.a = 20;
alert(this.a);
},
c: function() {
this.a = 30;
alert(this.a);
}
}
var myfn = new fn();
myfn.b();
myfn.c();
14、對this的理解
15、下面程序的結果
function fun(n,o) {
console.log(o)
return {
fun:function(m){
return fun(m,n);
}
};
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1); c.fun(2); c.fun(3);
16、下面這段程序的運行結果?
var name = 'World!';
(function () {
if (typeof name === 'undefined') {
var name = 'Jack';
console.log('Goodbye ' + name);
} else {
console.log('Hello ' + name);
}
})();
17、http狀態碼及其含義
status表示的是服務器返回的狀態碼:
1xx:表示信息請求
2xx:表示信息發送成功,200表示信息發送成功
3xx:表示重定向,表示存在緩存
4xx:表示錯誤;404表示文件找不見
5xx:表示服務器出現錯誤
18、一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什麼?
- 輸入URL地址
- 瀏覽器根據輸入的URL來獲取對應的IP地址
- 瀏覽器向服務器發送http請求
- 服務器接收請求,開始處理請求
- 服務器將響應發送給瀏覽器
- 瀏覽器根據返回的信息將內容渲染到HTML頁面中
19、常用的開發工具是什麼?
sublime、 webstorm、 HBuilder
20、最近流行的東西?常去的網站有哪些?
(1)nodeJS、 MongDB、 npm、 MVVM、 React、 VUE
(2)segmentfault、 github、 掘金、 CSDN