前端小知識10點(2019.5.2)

進擊的小進進發表於2019-05-03

1、為什麼 jQuery 整體上是一個匿名函式自呼叫?

因為匿名函式自執行裡面的所有東西都是區域性的,這樣引用 jQuery 時,能防止和其他的程式碼衝突。


2、jQuery 靜態方法和例項方法的區別

  • $() 是呼叫 jQuery 方法返回的一個 jQuery 物件,$() 呼叫的方法是例項方法,例項方法只能為 $() 所用
    如:$("li").each()
  • $ 是 jQuery 函式(方法),$ 呼叫的方法是靜態方法/工具方法,靜態方法既可以給 $() 呼叫,也可以給原生 javascript 呼叫
    如:$().each()

3、為什麼 typeof null 的結果是 object ?

console.log(typeof null//object
複製程式碼

在 JavaScript 最初的實現中,JavaScript 中的值是由一個表示型別的標籤和實際資料值表示的。物件的型別標籤是 0。由於 null 代表的是空指標(大多數平臺下值為 0x00),因此,null的型別標籤也成為了 0,typeof null就錯誤的返回了"object"。

MDN連結:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof


4、undefined 不是 js 的關鍵字
我們習慣在專案裡這樣判斷是否為 undefined

name===undefined?'a':'b'
複製程式碼

但一旦在塊級作用域中,手動定義 undefined 並且賦值了,那麼會覆蓋掉 js 的變數型別 undefined

{
  let undefined='a'
  console.log(undefined//a
}
複製程式碼

所以,在做專案中,不要給變數起名為 undefined,並賦值(感謝 @子奕 同學的提醒)


5、利用原型,來節省記憶體
A:

   function person(name){
      this.name=name
      this.showName=function(){
        console.log(this.name)
      }
    }
複製程式碼

B:

    function personA(name{
      this.name=name
    }
    personA.prototype={
      showName:function ({
        console.log(this.name)
      }
    }
複製程式碼

使用方法 A 來 new 物件時,每個物件都要定義一遍 showName 方法,這會增加瀏覽器的記憶體
而使用方法 B new 物件的話,每個物件都共享了原型的方法,從而節省記憶體


6、new 一個物件,一般經過四個步驟
(1)建立一個新物件
(2)將建構函式的作用域賦值給該物件(即 this 指向該物件)
(3)執行建構函式的程式碼
(4)返回該新物件
注意:new 關鍵字的重要作用就是把 例項物件的 this 與 原型鏈相關聯


7、當給陣列的index賦負數或小數時,陣列的長度有無變化?

  let arr=[]
  arr[10]=11
  console.log(arr.length); //11

  arr[-1]=-1
  console.log(arr.length) //11

  arr[3.14]=3.14
  console.log(arr.length) //11
  //===================================
  let arr1=[]

  arr1[2.1]=2.1
  console.log(arr1[2.1],'arr144'//2.1
  console.log(arr1.length,'arr145'//0

  arr1[1]=1
  console.log(arr1.length,'arr147'//2
  //========================
  let arr2=[]
  arr2[-1]=-1
  console.log(arr2.length,'arr253'//0
複製程式碼

(之前的例子寫的不對,感謝 @CurryME 同學的提醒)

8、antd的<Input>的 allowClear 作用是清除value的值,如果你的value是儲存在state裡的話,也是可以清除的

<Input 
    value={this.state.value}
    allowClear
/>
複製程式碼

9、物件有中文屬性,如何通過解構賦值的方式去獲取中文屬性?

  let obj={'哈哈':1}
  const {'哈哈':b}=obj
  const {a:{'嘿嘿':b}}=obj 
  console.log(b,'b24'//1
複製程式碼

10、物件解構賦預設值

//預設設為noa
const {a='noa'}=obj
//預設設為nob
const {a:{b='nob'}}=obj
複製程式碼

(完)

相關文章