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.判斷函式的返回值型別,如果是值型別,返回建立的物件,如果是引用型別,返回引用型別的建立物件
陣列有哪些原生方法?