JavaScript 變量類型和判斷

·

2 min read

💡 JavaScript 的基本功,千萬要理解觀念,主要關注以下三大點

  • JS 值類型和引用類型的區別

  • 手寫 JS 深拷貝

  • 變量計算和類型轉換的坑

typeof 能判斷哪些類型

  • 能判斷所有值類型

  • 判斷出是函數

  • 判斷是否是引用類型(但是無法再細分)

何時使用 === 何時使用 ==

除了== null 之外,其他都一律用 === (下面會有例子)

值類型和引用類型的區別

值類型:Number undefined String Boolean Symbol

引用類型:Object Array null (特殊引用類型,指向空地址) function (不用來儲存數據,沒有拷貝或是複製函數)、DateRegExp

深入分析

從 JS 引擎理解兩種類型的出現原因

值類型是存在棧 queue 中,儲存值

引用類型存在於堆 stack 中,存儲內存地址

key: 內存地址 val: {age:20}

💡 為什麼引用類型只能複製內存地址給 key 或是 value?

Q: 性能的關係,計算耗時。值類型佔用空間比較少,引用類型的資料內容可能會比較大。如果直接賦予給 value 有可能會因為除存空間太大或影響複製速度

變量類計算—類型轉換

1. 字符串拼接

  • 有一些特殊案例要記得
const a = 100 + 10 // 110
const b = 100 + '10' // '10010'
const c = true + '10' // 'true10'
const d = 100 + parseInt('10') // 110

2. == 運算符

100 == '100' // true
0 == '' // true
0 == false // true
false == '' // true
null == undefined // true

// 除了 == null 之外,其它一律用 ===,例如:
const obj  = {x: 100 }
if (obj.a == null) {}
// 相當於:
if (obj.a === null || obj.a === undefined) {}

if 語句和邏輯計算

What requirements should this project fulfill?

  • truthy 變量: !!a === true 變量

  • falsy 變量: !!a === false 變量

// 以下是 falsy 變量,除此之外都是 truthy 變量
!!0 === false
!!NaN === false
!!'' === false
!!null === false
!!undefined === false
!!false === false

// 邏輯判断
console.log(10 && 0)    // 0
console.log('' || 'abc')    // 'abc'
console.log(!window.abc)    // true