面試題:JS

持續更新中...webpack

面試傳送門:web

001.Promise原理?

異步解決方案面試

002.then能夠鏈式調用,多個then時,如何走到下一個then的失敗回調?

答:
1.返回一個失敗的promise。
2.拋出一個錯誤(throw new Error())c#

003.then能夠鏈式調用,多個then時,如何終止下一個then的調用?

答:返回一個處於pending(等待態)狀態的promise數組

004.js的異步解決方案有哪些(**)?

答:promise

  • 回調函數(嵌套,回調地獄,不優雅)
  • Promise
  • Generator+co (co能夠解決promise嵌套問題,generator+promise(promise嵌套問題))
  • async+await:是Generator的語法糖

005.把一個僞數組變成真實的數組?

答:瀏覽器

  • [...obj],須要保證obj是可迭代的
  • Array.from不須要保證obj是否迭代,內部會使它可迭代

006.使用過ES6中哪些新語法(** 熟練使用ES6語法)?

答:bash

  • 結構賦值 [] {}
  • 展開運算符(...args)(考察深拷貝,淺拷貝)
  • Set:經常使用於數組去重
  • Map:裏面存儲惟一的值

深拷貝實現的一種方式:JSON.parse(JSON.strinfy(obj));閉包

ES6 新增內容總結app

007.實現深拷貝(重點)淺拷貝?

理解JS中的淺拷貝與深拷貝

function deepClone(source) {
    const targetObj = source.constructor === Array ? [] : {}; // 判斷複製的目標是數組仍是對象
    for (let keys in source) { // 遍歷目標
        if (source.hasOwnProperty(keys)) {
            if (source[keys] && typeof source[keys] === 'object') { // 若是值是對象,就遞歸一下
                targetObj[keys] = source[keys].constructor === Array ? [] : {};
                targetObj[keys] = deepClone(source[keys]);
            } else { // 若是不是,就直接賦值
                targetObj[keys] = source[keys];
            }
        }
    }
    return targetObj;
}

var str1 = {
    arr: [1, 2, 3],
    obj: {
        key: 'value'
    },
    fn: function () {
        return 1;
    }
};
var str3 = deepClone(str1);

console.log(str3 === str1); // false
console.log(str3.obj === str1.obj); // false
console.log(str3.fn === str1.fn); // true
複製代碼

008.求數組的交集、並集、差集?

答:

//-----------------------------------------並集
// let arr1 = [1, 2, 3, 4]
// let arr2 = [3, 4, 5, 6]

//並集
// function union(arr1, arr2) {
//     // let s1 = new Set(arr1)
//     // let s2 = new Set(arr2)
//     // let s = new Set([...s1,...s2])
//     // return [...s]

//     let s = new Set([...arr1,...arr2])
//     return [...s]
// }

// console.log(union(arr1,arr2));  //[ 1, 2, 3, 4, 5, 6 ]

//-----------------------------------------交集
// let arr1 = [1, 2, 3, 4]
// let arr2 = [3, 4, 5, 6]

// //交集
// function intersection(arr1,arr2){
//     let s1 = new Set(arr1)
//     let s2 = new Set(arr2)
//     return [...s1].filter(item=>{
//         return s2.has(item)
//     })
// }

// console.log(intersection(arr1,arr2))    //[ 3, 4 ]

//-----------------------------------------差集
// let arr1 = [1, 2, 3, 4]
// let arr2 = [3, 4, 5, 6]

// function difference(arr1,arr2){
//     let s1 = new Set(arr1)
//     let s2 = new Set(arr2)
//     return [...s1].filter(item=>{
//         return !s2.has(item)
//     })
// }

// console.log(difference(arr1,arr2))      //[ 1, 2 ]
複製代碼

009.ES6中的模塊化?

答: juejin.im/post/5d3eb1…

ES6 的模塊化分爲導出(export) @與導入(import)兩個模塊。

as 的用法

010.模塊化的發展流程?

011.JS中的閉包

JS中的 閉包(Closure)

012.瀏覽器事件環 (宏、微任務)

JS(瀏覽器)事件環 (宏、微任務)

013.ES6新增了哪些內容,簡單說一下

ES6 新增內容總結

014.對JS原型和原型鏈的理解?

JavaScript 原型 與 原型鏈

015.對JS做用域和做用域鏈的理解?

JavaScript 做用域 與 做用域鏈

016.JS中new究竟作了什麼?

1.建立對象
2.綁定this 3.連接到原型
4.返回對象
JS中 new究竟作了什麼?

017.JS中this到底指向誰?怎麼改變this指向?

誰調用了包含this的方法,那麼this就指向誰
JS中的 this 到底指向誰?

改變this,能夠用call、apply、bind,他們之間的區別?
JS中改變this的指向 call、apply 和 bind 的區別

018.TS主要是幹什麼的?

簡單地說,TS就是增長了重要的類型檢測機制,添加了不少類型,能夠用來寫大型項目。
布爾值、數字、字符串、數組、元組、枚舉、any、void、null、undefined、never、object、類型斷言

019.JS中的方法(重中之重)

JS經常使用方法總結

020.JS中的數據類型?

JavaScript中有6種數據類型:數字(number)、字符串(string)、布爾值(boolean)、undefined、null、對象(Object)。

其中對象類型包括:數組(Array)、函數(Function)、還有兩個特殊的對象:正則(RegExp)和日期(Date)。

相關文章
相關標籤/搜索