1. 程式人生 > 其它 >JS面試知識點分享(一)

JS面試知識點分享(一)

JavaScript有哪些資料型別,它們的區別是?


JS的八種資料型別:undefined、null、boolean、number、String、object、ES6新增了一種資料型別:(Symbol)這種型別的物件永不相等,即便建立的時候傳入相同的值也不相等
主要用於解決屬性名衝突問題

谷歌也出現了一種: Biglnt 指的是安全儲存,操作大整數

所以js資料型別包含了以上八種 undefined String Object Number Null Boolean Symbol bigInt

棧:基本資料型別:undefined、null、boolean、number、string

堆:引用資料型別,(物件,陣列和函式)objectarrayfunction

1.這五種基本型別可以直接訪問,他們是按照值進行分配的,存放在棧記憶體中的簡單資料段,資料大小確定,記憶體空間大小可以分配

2.引用型別即存放在堆記憶體中的物件,變數實際儲存的是一共指標,這個指標指向另一個位置


null和undefined區別:


null 只有一個值,是null,不存在的物件,表示一個空物件指標

undefined只有一個值,是undefined。沒有初始化。undefined是從null中派生出來的

簡單理解就是:undefined是沒有定義的,null是定義了但是為空!


資料型別檢測的方式有哪些?


1.typeof檢測資料型別的運算子

typeofvalue返回值首先是一個字串,裡面包含了對應的資料型別:number、string、boolean、undefined、object、function

只能判斷原始值 number、string,判斷引用型別objectnull這些結果都是object,判斷不了

2.instanceof檢測某一個例項是否屬於某一個類檢測是原型

判斷不了基本資料型別number、string,可以判斷引用資料型別objectarrayfunction

3.constructor(慎用!)

constructor這個屬性存在建構函式的原型鏈上的屬性,指向建構函式,可以通過直接訪問檢視建構函式上的__proto__直接檢視所屬型別。

4.Object.prototype.toString.call( ) (推薦!!!)


判斷陣列的方式有哪些?


1. instanceof

2. 使用Array物件的isArray方法判斷

3. Object.prototype.toString.call( )


typeof和null的結果是什麼


typeof和null的結果:object


instanceof操作符的實現原理及實現


instanceof判斷建構函式的prototype屬性是否出現在物件的原型鏈中

用於測試建構函式的prototype屬性,是否出現在物件的原型鏈中的任何位置。


new操作符的實現原理?


1. 建立一個新的空物件

2.設定原型,將物件的原型設定為函式的prototype物件

3.讓函式的this指向這個物件,執行建構函式的程式碼(為這個新物件新增屬性)

4.判斷函式的返回值型別,如果是值型別,返回建立的物件,如果是引用型別,返回引用型別的建立物件


陣列有哪些原生方法?