💡 JavaScript 的基本功,千萬要理解觀念,主要關注以下三大點
JS 值類型和引用類型的區別
手寫 JS 深拷貝
變量計算和類型轉換的坑
typeof 能判斷哪些類型
能判斷所有值類型
判斷出是函數
判斷是否是引用類型(但是無法再細分)
何時使用 === 何時使用 ==
除了== null
之外,其他都一律用 === (下面會有例子)
值類型和引用類型的區別
值類型:Number
undefined
String
Boolean
Symbol
引用類型:Object
Array
null
(特殊引用類型,指向空地址) function
(不用來儲存數據,沒有拷貝或是複製函數)、Date
、RegExp
深入分析
從 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