js 的if()判斷的誤區

js的if語句,是把其他數據類型強制轉爲Boolean類型,其主要常見誤區也就是對於js數據類型理解不夠深入。首先說一下js的數據類型吧。

基本類型:字符串(String)、數字(Number)、布爾(Boolean)、對空(Null)、未定義(Undefined)、Symbol(獨一無二[es6增加的])。

引用類型:對象(Object)、數組(Array)、函數(Function)。

基本類型直接存在棧內存中 引用類型的地址存在棧內存,內容存在堆內存中,這就牽扯到深拷貝可淺拷貝(淺拷貝只拷貝棧內存內容,對引用類型就會使得只使用了棧內存的地址)。扯遠了。。。

今天主要說的是 if 語句把類型都強制轉爲Boolean類型的常見誤區

一、通常會直接轉爲false的四種類型 (沒有[] ,{}, function(){})

        尤其是[] 和{} 這兩個可以繼續執行if裏的語句的! 還有就是數字0 會被做終止操作。尤其是vue內的v-if操作很容易把0搞掉

1.數字0

2.NaN

3.空字符串

4.null或undefined

二、"0" "null" "undefined"則會返回true

js這種弱類型語言,賦值啥類型就改成啥類型了,後臺規範了還好,要是不規範,心裏一萬個草泥馬。同樣的代碼這邊好着,那邊又不行了。算了也不能全怪後臺,還是做一下類型判斷。

三、if([]==false) 返回true  if({} == false) 返回false

媽蛋這是什麼鬼  if([]) true   if([] == false) true; 心裏是不是又是一萬個草泥馬。 

四、if([] == [])  爲false  if({} == {}) 也爲false 

至於三和四 原因是js == 運算符的處理問題 

js做 == 操作 經歷過程如下

[] == false 經歷以下的轉化過程

([] == false)   ---->  ([] === +0)   ---->  (“”== +0)  ---->  (+0 == +0)  --->   true

也就經歷了8 9 10 三個過程

因此判斷數組和對象是否爲空,常用length來判斷

js鴨子型語言 是有很多弊端,在使用if語句時 根據自己實際需求和後臺返回差異性,注意一些這樣的問題也基本上能解決相應問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章