1、js基礎(chǔ)知識點(diǎn)

1、原始類型(基本類型)有哪些?null是對象嗎?

number、string、null、undefined、Boolean、symbol(ES6新增)
原始類型儲存的是值,是沒有函數(shù)可以調(diào)用的。'1'.tostring()做了隱式轉(zhuǎn)換,轉(zhuǎn)換為了String類型,就是字符串的對象包裝類型,所以可以調(diào)用tostring()函數(shù)

null不是對象,雖然typeof null 會輸出object,但是這是js的一個悠久bug。在js最初版本中使用的是32位系統(tǒng),為了性能考慮使用低位儲存變量的類型信息,000開頭的是對象。而null表示為全零,所以將它錯誤的判斷為object。雖然現(xiàn)在的內(nèi)部類型代碼判斷已經(jīng)改變,但是這個bug一直流傳下來

2、對象類型(引用類型)與原始類型有什么區(qū)別?函數(shù)參數(shù)是對象會發(fā)生什么問題?

對象類型儲存的是個地址,原始類型儲存的是值

3、typeof 是否能正確判斷類型?instanceof 能正確判斷對象的原理是什么?

typeof能判斷除null之外的所有基本類型
instanceof正確判斷對象是因為內(nèi)部機(jī)制通過原型鏈來判斷的
valueof()返回對象的原始值

4、如何正確判斷this的指向?箭頭函數(shù)的this是什么?

function foo(){
  console.log(this.a)  //this--->window
}
a=1
foo()

const obj = {
  a:2,
  foo:foo
}
obj.foo() //this--->obj

const c =new foo()  //---> c
  • 對于直接調(diào)用foo函數(shù)的,不管foo()位于什么位置,this指向都是window
  • 對于obj.foo(),誰調(diào)用了foo(),this指向就是誰。所以這種情況下this就是obj
  • 對于new的方式來說,this被永遠(yuǎn)綁定在了c上,不會被任何方式改變
    但是可能會發(fā)生多個規(guī)則同時出現(xiàn)的情況,這時候不同的規(guī)則之間會根據(jù)優(yōu)先級最高的來決定 this 最終指向哪里。
    new的方式優(yōu)先級>bind/apply()/call() >obj.foo() > foo()
    箭頭函數(shù)的this一旦綁定,就不會被任何方式改變

    this指向流程圖,圖中流程只針對單個規(guī)則:
    this指向流程圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容