前端面試-JavaScript篇

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方法的區別?

參考:https://mp.weixin.qq.com/s?__biz=MzI3NzIzMzg3Mw%3D%3D&mid=100000054&idx=1&sn=71f6c214f3833d9ca20b9f7dcd9d33e4

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的同源策略?

參考:https://segmentfault.com/a/1190000004186889

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章