前端面試:js數據類型

js數據類型是js中的基礎知識點,也是前端面試中必定會被考察的內容。本文旨在知識的梳理和總結,但願讀者經過閱讀本文,可以對這一塊知識有更清晰的認識。文中若是出現錯誤,請在評論區指出,謝謝。html

####js數據類型都有什麼? 答:js數據類型一共有7種,兩大類:原始類型,引用類型(對象) 原始類型包括:boolean, null,undefined,number,string,symbol前端


####爲何1.toString會報錯? 答:js中點有兩種,小數點和訪問對象屬性的點,若是一個表達式中有兩個以上的點,那麼第二個及後面的點會被js引擎看成是訪問對象屬性的點。而第一個點會有兩種狀況,js引擎在解讀以數字開頭的第一個點時,會被當成小數點進行處理,而'toString()’會被做爲一個不合法的浮點數來解釋,因此報錯。 而1.2.toString()則不會報錯。面試


####symbol是什麼數據類型? 答:原始數據類型。symbol是ES6引入的一種新的原始數據類型,表示獨一無二的值。symbol值由Symbol函數生成。函數


####爲何0.1+0.2 !== 0.3? 答:咱們在控制檯中打印0.1+0.2的時候,能夠看到結果爲0.30000000000000004。而不是0.3。這是由於在計算機中,數字不管是定點數仍是浮點數都是以二進制的方式進行存儲的。而0.1和0.2轉換成二進制後會無限循環,JavaScript使用Number類型表示數字,遵循IEEE754標準。在進行運算時,先轉換二進制,因爲IEEE754尾數位數限制,多餘部分捨棄,這樣在進制之間的轉換中進度已經損失,因爲指數位數不相同,運算時須要對接運算,也可能產生精度損失,因此計算結果出現誤差。解決問題的最經常使用的方法就是將浮點數轉化爲整數計算。spa


####null是對象類型麼? 答:null是原始數據類型,雖然typeof null === ‘object’,可是這是js的一個歷史遺留Bug。prototype


####說一說對象類型和原始類型的不一樣 答:對象類型,也叫作引用類型。與原始類型不一樣的是,對象類型是在計算機內存中幫咱們開闢一個空間來存放值,這個空間會有一個地址(指針)。例如:指針

const a = []

對於常量a來講,假設內存地址爲#001,那麼在地址#001的位置存放了值[],常量a存放了地址#001,因此code

const a = {}
b  = a
b[‘key’] = ‘value'
console.log(a[‘key'])    //‘value'

當咱們給變量b賦值的時候,是將a存放的內存地址(指針)複製給了b。因此a和b指向了同一個內存空間,這樣當內存空間存放的值放生了變化時,a和b同時被影響。htm


####請說明p1,p2的值對象

function test(person){ 
    person.age =26
    person = {
                name:'yyy’,
                age:30
             }
    return person 
}
const p1 = {
             name:'yck’,
             age:25
           }
const p2 = test(p1)
console.log(p1)// -> ?
console.log(p2)// -> ?

答: p1->{name: "yck", age: 26} p2 ->{name: "yyy", age: 30}

函數傳參是傳遞對象指針的副本,到函數內部修改參數的屬性這步,當前的p1值也被修改了,可是放咱們從新爲person分配了一個對象時,person擁有了一個新的地址,也就和p1沒有任何關係了。


####說一下js類型判斷的方法

1.typeof 對於原始類型來講,除了null均可以顯示正確類型(null->object) 2.typeof 對於對象來講,除了函數都會顯示object(function -> function) 3.instanceof 能夠判斷某個變量是不是每一個對象的實例。 4.比較理想的方法是 Object.prototype.toString.call(variable)


####如何判斷一個對象是空對象 1.Object.keys({}).length === 0 2.JSON.stringify({}) === ‘{}'


###類型轉換 ####轉布爾值 1.在條件判斷時,除了undefined, null,false,NaN,’’,0,-0,其餘全部值都轉化爲true,包括空對象

####對象轉原始類型順序 1.判斷是否爲原始類型,若是不是,繼續下一步 2.調用x.valueOf(),若是轉換爲基礎類型就返回轉換的值,若是沒有,繼續下一步 3.調用x.toString(),若是轉換爲基礎類型就返回轉換的值,若是沒有,繼續下一步 4.報錯

####四則運算中的類型轉換 1.加法運算,若是一方爲字符串或者引用類型,那麼會轉換爲字符串進行運算 2.加法運算,若是一方爲布爾類型,那麼會轉換爲數字進行計算(引用類型,字符串除外)。 3.加法運算,undefined與任何值相加,值都爲NaN(字符串,引用類型相加除外) 4.加法運算,若是一方爲null, 那麼會轉化爲數字進行運算,null值爲0(字符串,引用類型相加除外) 5.加法運算,若是一方爲數字, 那麼會轉化爲數字進行運算(字符串,引用類型相加除外)


== 和===的區別

== 當比較的二者類型不一樣時會進行類型轉換,

- 1==‘1’ //true 此情景 string轉number
- null == undefined //true 若是僅須要過濾掉null, undefined 兩種屬性時能夠利用此特性
- [] == ! [] //true 由於對象轉基本類型後作比較 false == fase 0 == 0
- [] == ![] //true
- [] == false //true
- '' == false //true
- '' == Number(false) //true
- '' == 0 //true
- Number('') == 0 //true
- 0 == 0 //true

原文出處:https://www.cnblogs.com/yxqd/p/10478709.html

相關文章
相關標籤/搜索