JavaScript中undefined的正確打開方式詳解
一、 理解 void 0
1.1 什么是 void 運算符?
void
是 JavaScript 中的一個運算符,它接受一個表達式作為操作數(shù),總是返回 undefined,無論操作數(shù)是什么。
console.log(void 0); // undefined console.log(void 1); // undefined console.log(void "hello"); // undefined console.log(void {}); // undefined
1.2 為什么使用 void 0 而不是 undefined?
在 ES5 之前,undefined
不是保留字,可以被重寫:
// 在ES3環(huán)境中可能出現(xiàn)的危險情況 var undefined = "oops"; console.log(undefined); // "oops" 而不是預(yù)期的 undefined
void 0
則始終可靠地返回真正的 undefined 值:
var undefined = "oops"; console.log(void 0); // undefined (不受影響)
1.3 現(xiàn)代 JavaScript 還需要 void 0 嗎?
ES5 及以后版本中,undefined
是不可寫、不可配置的全局屬性:
// 現(xiàn)代瀏覽器中 undefined = "oops"; console.log(undefined); // undefined (不會被修改)
二、void 0 的實用場景
2.1 最小化場景:減少代碼體積
void 0
比 undefined
更短,在需要極致壓縮代碼時很有用:
// 原始代碼 function foo(param) { if (param === undefined) { param = 'default'; } } // 壓縮后(使用 void 0) function foo(n){if(n===void 0)n="default"}
2.2 立即執(zhí)行函數(shù)表達式 (IIFE)
傳統(tǒng) IIFE 寫法:
(function() { // 代碼 })();
使用 void
的 IIFE:
void function() { // 代碼 }();
2.3 箭頭函數(shù)中避免返回值
當(dāng)需要箭頭函數(shù)不返回任何值時:
let func = () => { return new Promise((resolve, reject) => { setTimeout(resolve(5)); }) }; // 會返回 func 的 Promise const logData = func(); // 明確不返回值 const logData = void func();
三、常見的 void 0 誤區(qū)
3.1 與 undefined和null的嚴格比較
console.log(void 0 === undefined); // true console.log(void 0 === null); // false
3.2 與 void 其他表達式
let count = 0; void ++count; console.log(count); // 1 (表達式仍會執(zhí)行)
總結(jié)
到此這篇關(guān)于JavaScript中undefined的正確使用方式詳解的文章就介紹到這了,更多相關(guān)JavaScript undefined使用方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Express代理轉(zhuǎn)發(fā)服務(wù)器實現(xiàn)
這篇文章主要為大家介紹了Express代理轉(zhuǎn)發(fā)服務(wù)器實現(xiàn)技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05原生js實現(xiàn)可兼容PC和移動端的拖動滑塊功能詳解【測試可用】
這篇文章主要介紹了原生js實現(xiàn)可兼容PC和移動端的拖動滑塊功能,結(jié)合實例形式詳細分析了javascript事件響應(yīng)及頁面元素屬性動態(tài)操作實現(xiàn)滑塊拖動功能的相關(guān)操作技巧,需要的朋友可以參考下2019-08-08momentjs獲取上周、上月、前三個月的起始和結(jié)束時間(附完整代碼)
這篇文章主要給大家介紹了關(guān)于momentjs獲取上周、上月、前三個月的起始和結(jié)束時間的相關(guān)資料,在需要你進行日期處理的地方,必然少不了moment.js的使用,需要的朋友可以參考下2023-07-07JavaScript數(shù)組操作學(xué)習(xí)之splice()函數(shù)入門與精通
這篇文章介紹了JavaScript數(shù)組操作中的splice()方法,詳細講解了其定義、語法和用法,并通過實例展示了如何使用該方法進行數(shù)組元素的添加、刪除和替換,需要的朋友可以參考下2024-11-11談?wù)凧SON對象和字符串之間的相互轉(zhuǎn)換JSON.stringify(obj)和JSON.parse(string)
這篇文章主要介紹了談?wù)凧SON對象和字符串之間的相互轉(zhuǎn)換JSON.stringify(obj)和JSON.parse(string)以及JSON的parse()和stringfy()方法詳解,感興趣的朋友一起看看吧2015-10-10