iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
自我挑戰組

從0到有學習JavaScript系列 第 25

第三章 型別、值和變數-問題筆記 undefined typeof void

  • 分享至 

  • xImage
  •  

一、必須使用===來檢查undefined

  1. 因為x未賦予值,結為true, 直接執行 if 條件式,也就是x 等於undefined。
  2. 必須使用 ===(嚴格相等)運算符來比較 x 是否等於 undefined,因為 x == undefined 會同時檢查 x 是否為 null,而這不是我們想要的行為。這是因為在 JavaScript 中,nullundefined 是不同的值。
  3. null 和undefined 都代表值的缺席,== 運算子會將null 和undefined 視為相同 ;===則是將null 和undefined 視為不同,所以必須要用===來區分他們。
let x;
if (x === undefined) {
  // these statements execute
} else {
  // these statements do not execute
}

二、使用typeof 搭配 if else 檢視undefined
typeof 檢視型別為undefined:

let x;
if (typeof x === "undefined") {
  // 執行這裡的計算
}

三、沒有宣告變數,使用typeof 及if else 可正常執行
沒有宣告變數,使用typeof 也不會跳出error:
沒有宣告變數,但如果不使用typeof ,直接報錯:x is not defined

// x has not been declared before

if (typeof x === "undefined") {
  // these statements execute
}

// 報錯
if (x === undefined) {
}

四、使用 in 方式來檢查變數是否在全域內
如果x沒有宣告過,使用in方式測試x是不是在全域作用域(global scope),結果是沒有。

if("x" in window){b=2}else{b=3};      //b=3

x有宣告過:

let x;
if(x in window){b=6}else{b=7};    //b=6

五、void是什麼?
void是JavaScript一個運算子,接收任意的運算式或值,然後回傳undefind。

用法與 typeof 一樣,可以在後面加上小括號 () 或是直接加上某個值:

void 0; // undefined 
void(0); // undefined

用void直接回傳undefined的範例:

let x;
console.log(x);         // undefined

let y = void 0;
console.log(y);         // undefined

let z = void "Hello";
console.log(z);         // undefined

let a = void (2 + 3);
console.log(a);         // undefined

六、宣告與否,與void 之間的關係
void 0 是一種獲取 undefined 值的方式,因此這個檢查是檢查變數 x 是否為 undefined
如之前有宣告,將x使用void設定為undefined後,if else 可正常執行:

let x;                                    //宣告x
if (x === void 0) {
  // (x === void 0)為true,運算可執行
}


之前沒有宣告,使用void會直接報錯:

// y 未宣告過
if (y === void 0) {
  // 報錯: y is not defined
}

Reference
https://medium.com/itsems-frontend/javascript-scope-and-scope-chain-ca17a1068c96
https://kuro.tw/posts/2019/08/04/JS-%E5%86%B7%E7%9F%A5%E8%AD%98-%E4%BD%A0%E6%89%80%E4%B8%8D%E7%9F%A5%E9%81%93%E7%9A%84-void/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined


上一篇
第三章 型別、值和變數-問題筆記 undefined
下一篇
第三章 型別、值和變數-問題筆記 symbols part1
系列文
從0到有學習JavaScript31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言