變量的類型和計算

變量類型

JS變量最基本的分類就是值類型引用類型,而兩者的區(qū)別,我這里舉個例子看一下。

以下是值類型的一個例子:

var a = 50
var b = a
console.log(b)

以下是引用類型的一個例子:

var a = {name:"zhangsan"}
var b = a
b.name = "lisi"
console.log()

typeof可以識別值類型,而對于引用類型則無能為力。但是,typeof可以將引用類型區(qū)分出function —— 相對于其他引用類型(如對象、數(shù)據(jù))來說,具有非常特殊的意義。JS中的函數(shù)非常重要,因為原型、作用域都需要用到函數(shù)。

JS有很多內(nèi)置函數(shù),例如Object、Array、Boolean、NumberString、DateRegExp、Error等,基本都是基礎(chǔ)數(shù)據(jù)類型的構(gòu)造函數(shù)。

typeof可以區(qū)分的類型:number、string、undefined(值類型)、object、function(引用類型)

typeof null // output: object 因為null也是引用類型,相當(dāng)于引用類型中的undefined

另外針對第二個例子,怎么將a的內(nèi)容復(fù)制給b,從而保證a不影響到b?這里可以運用深度復(fù)制,將a的屬性遞歸遍歷,依次復(fù)制。

以下是實現(xiàn)代碼,不對的歡迎指正:

deepClone(o, newO) {
  for (var key in o) {
    if (o.hasOwnProperty(key)) {
      if (typeof o[key] == "object" || typeof o[key] === "function") {
        deepClone(o[key], newO[key])
      } else {
        o[key] = newO[key]
       }
    }
  }
}

變量計算

簡單的+、-*、/以及字符串的拼接和替換,這里不提。但是在JS值類型的運算過程中,存在強制類型轉(zhuǎn)換這一特性,有以下的場景:

  • 字符串拼接
  • ==
  • 邏輯運算(if ! || &&)

首先是字符串拼接的常見錯誤,這里怎么規(guī)避呢 —— 可以使用typeof來解決,但是比較麻煩,因為寫代碼就是一件很累的事情。

var a = 100 + 10 // 110
var b = 100 + "10" // "10010"

==也會進行強制轉(zhuǎn)換,如

100 == "100" // true (100 "100")
0 == "" // true ("" 0 false)
null == undefined // true (object undefined)

最后是邏輯運算中的強制轉(zhuǎn)換,先說下if

var a = true
if (a) { // true
  // ...
}

var b = 100
if (b) { // true
  // ...
}

var c = ""
if (c) { // false
   // ...
}

也就是所有經(jīng)過if判斷的變量,都會進行邏輯運算的強制類型轉(zhuǎn)換,轉(zhuǎn)換為true或者false。

console.log(10 && 0) // false
console.log (10 || 0) // true
console.log(!0) // false

日常開發(fā)中,以下變量會被強制轉(zhuǎn)換成false

  • 0
  • NaN
  • undefined
  • null
  • ""
  • false本身

這里引出一個另外一個問題,比如if(a)如何知道變量被if轉(zhuǎn)換為什么? —— !!a

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

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