核名查詢系統(tǒng)seo如何優(yōu)化
系列文章目錄
文章目錄
- 系列文章目錄
- 前言
- 1.JavaScript常見數(shù)據(jù)類型
- null 和 undefind區(qū)別
- symbol(ES6新增)、bigInt(ES10新增)
- 2.JavaScript判斷數(shù)據(jù)類型的方式
- 3.== 和 === 區(qū)別,分別在什么情況使用?
- 4.變量聲明 var、let、const 的區(qū)別
- 5.作用域
- 6.作用域鏈
- 7.垃圾回收機制
- 8.閉包
- 什么是閉包?閉包的作用?閉包引起的問題
- 9.JS的變量提升
- var聲明的變量聲明提升
- 10.箭頭函數(shù)
- 箭頭函數(shù)的特性
- 箭頭函數(shù)和普通函數(shù)的區(qū)別?
- 11.構(gòu)造函數(shù)
- 實例化執(zhí)行過程(構(gòu)造函數(shù)加了new發(fā)生了什么事情)?
- 12. JavaScript中創(chuàng)建對象的三種方式
- 13. JavaScript內(nèi)置引用類型(包裝類型)
- 14.字符串常用方法
- 15.原型與原型鏈
- 原型是什么?
- 原型鏈?zhǔn)鞘裁?#xff1f;
- 小結(jié)
- 16.調(diào)用函數(shù)
- 17.遞歸函數(shù)
- 18. 深淺拷貝
- 常見拷貝方式:
- 淺拷貝
- 深拷貝
- 深拷貝有幾種實現(xiàn)方式?
- 19.
- 總結(jié)
前言
Javascript 常考面試題。
1.JavaScript常見數(shù)據(jù)類型
null 和 undefind區(qū)別
(1)使用 typeof 進行判斷的時候,Null 類型化會返回 “object”,這是一個歷史遺留的問題。
(2)當(dāng)我們使用雙等號()對兩種類型的值進行比較時會返回 true,使用全等號(=)時會返回false
(3)與數(shù)字相加,undefind返回值為NaN,null返回值為數(shù)字。
如何安全獲取undefind?void 0 來獲得 undefined。
symbol(ES6新增)、bigInt(ES10新增)
(1)symbol作用: 主要用于創(chuàng)建一些唯一標(biāo)識, 可作為對象的屬性名使用, 可通過 Symbol(‘xxx’) 進行聲明
(2)bigInt: 用于表示比 Number 大的數(shù)值 (-2^53 - 1 到 2^53 - 1), 它聲明方式有兩種:
- 字面量形式, 通過在數(shù)字后面加 n 來進行表示: const bigint = 123n
- 通過函數(shù) BigInt 來聲明: const
bigint = BigInt(12312)- Symbol BigInt 都不是一個構(gòu)造函數(shù), 所以 new 關(guān)鍵詞的方式來構(gòu)建實例
- 創(chuàng)建一個 BigInt 的時候, 參數(shù)必須為整數(shù), 否則或報錯
2.JavaScript判斷數(shù)據(jù)類型的方式
- typeof:檢測任意變量的數(shù)據(jù)類型。用typeof檢測arguments的類型,返回object。
- instanceof:判斷一個對象的具體類型
- objict.prototype.toString.call()
- constructor:引用數(shù)據(jù)類型
3.== 和 === 區(qū)別,分別在什么情況使用?
- 等于操作符用( == ):如果操作數(shù)相等,則會返回 true;在比較中會先進行類型轉(zhuǎn)換,再確定操作數(shù)是否相等
- 全等操作符( === ):只有兩個操作數(shù)在不轉(zhuǎn)換的前提下相等才返回 true。即類型相同,值也需相同。
- 區(qū)別:== 判斷兩邊值是否相等(存在隱式轉(zhuǎn)換),=== 判斷兩邊值和數(shù)據(jù)類型是否完全相等。null 和 undefined 比較,相等操作符(==)為true,全等為false
4.變量聲明 var、let、const 的區(qū)別
(1)var
- 可以重復(fù)聲明
- 沒有塊作用域
- 有變量提升
(2)let
- 不能重復(fù)聲明
- 有塊作用域
- 沒有有變量提升
(3)const(定義常量時不可被修改)
- 不能重復(fù)聲明
- 有塊作用域
- 沒有有變量提升
5.作用域
5.1 作用域(scope):變量起作用的區(qū)域
5.2 局部作用域:
- 函數(shù)作用域:在函數(shù)內(nèi)部聲明的變量只能在函數(shù)內(nèi)部被訪問,函數(shù)外部無法訪問。
- 塊作用域:Javascript中使用{ }包裹的代碼稱代碼塊,let、const 聲明的變量(常量)會產(chǎn)生塊作用域,var 不會產(chǎn)生塊作用域。
5.3 全局作用域:
6.作用域鏈
7.垃圾回收機制
8.閉包
什么是閉包?閉包的作用?閉包引起的問題
9.JS的變量提升
var聲明的變量聲明提升
## 函數(shù)聲明提升
10.箭頭函數(shù)
箭頭函數(shù)的特性
- 編碼更簡潔
- 函數(shù)作用域內(nèi)沒有自己的this。會從自己作用域鏈的上一層尋找this
- 不可以使用new實例化構(gòu)造函數(shù)
- 箭頭函數(shù)內(nèi)部不可以使用arguments對象,該對象在函數(shù)體內(nèi)不存在,若使用該對象用rest參數(shù)代替。
常見使用場景:定義匿名函數(shù)、回調(diào)函數(shù)。
箭頭函數(shù)和普通函數(shù)的區(qū)別?
- 函數(shù)作用域內(nèi)沒有自己的this,從定義它的上下文中繼承
- 沒有 prototype 屬性,不能作為構(gòu)造函數(shù)使用
11.構(gòu)造函數(shù)
- 作用:初始化對象,快速創(chuàng)建多個類似對象,大寫字母開頭的函數(shù)。
- 通過new調(diào)用來創(chuàng)建自定義類型的實例對象。
- 構(gòu)造函數(shù)內(nèi)部不寫return,返回新創(chuàng)建對象。
實例化執(zhí)行過程(構(gòu)造函數(shù)加了new發(fā)生了什么事情)?
- 創(chuàng)建新對象;
- 構(gòu)造函數(shù)this指向新對象;
- 執(zhí)行構(gòu)造函數(shù)代碼,修改this,添加新屬性;
- 返回新對象。
12. JavaScript中創(chuàng)建對象的三種方式
- 對象字面量
const v = {name = '守?zé)粽?#39;
}
- new object
const v = new object ({name = '守?zé)粽?#39;
})
console.log(v)
- 構(gòu)造函數(shù)創(chuàng)建對象
13. JavaScript內(nèi)置引用類型(包裝類型)
- 引用類型:String、Number、Boolean、Date、RegExp等
- 基本類型有專門的構(gòu)造函數(shù),叫基本類型的包裝類型,如String類型是基本類型String的包裝類型。
為什么字符串類型能夠使用length?為什么有屬性?
- 在JS的底層把基本的數(shù)據(jù)類型包裝成了復(fù)雜數(shù)據(jù)類型。
14.字符串常用方法
15.原型與原型鏈
原型是什么?
一個對象,稱 prototype 為原型對象
作用:
- 共享方法
- 把不變的方法直接定義在 prototype 對象上
- prototype:原型對象
- proto:對象原型,暴露對象的 prototype 特性
原型鏈?zhǔn)鞘裁?#xff1f;
通__proto__屬性鏈接的多個原型對象
小結(jié)
- 構(gòu)造函數(shù)和原型對象里面的 this 指向 實例對象
- 公共的屬性寫到構(gòu)造函數(shù)里面
- 公共的方法寫到原型對象上面
- 要確定一個對象是不是另一個對象的原型,可以使用 isPrototypeOf() 方法
16.調(diào)用函數(shù)
JavaScript中函數(shù)可以通過5種方式調(diào)用
- 作為函數(shù)
- 作為方法
- 作為構(gòu)造函數(shù)
- 通過 call() 或 apply() 方法簡介調(diào)用
- 通過 JavaScript 語言特性隱式調(diào)用
17.遞歸函數(shù)
18. 深淺拷貝
常見拷貝方式:
- 拷貝對象 object assgin() / 展開運算符{ …obj }拷貝對象
- 拷貝數(shù)組 array.prototype.concat 或 [ …arr ]
淺拷貝
- 淺拷貝 ,拷貝對象之后,里面的屬性值是簡單數(shù)據(jù)類型,直接拷貝值。
- 如果屬性值是引用類型,則拷貝的是地址。
直接賦值和淺拷貝有什么區(qū)別?
- 直接賦值,賦值的是地址,修改會影響原對象。淺拷貝是一層的,不會和原對象相互影響。
深拷貝
深拷貝,拷貝的是對象
深拷貝有幾種實現(xiàn)方式?
- 通過遞歸實現(xiàn)深拷貝
- 通過 JSON.stringify() 實現(xiàn)
- 通過JS庫 lodash / cloneDeep() 實現(xiàn)