這是我參與8月更文挑戰的第11天,活動詳情查看:8月更文挑戰前端
哈嘍,你們晚上好哇!今天咱們來談一下JavaScript中一個頗有意思的現象,void 0 有什麼意義?undefined居然是可變的?web
首先,咱們要對void運算符有一個基本的瞭解:void的正確使用方法是跟表達式,由於void會所有執行自身後面的表達式語句,可是它的返回值永遠是undefined。api
咱們要明白三件事情,一個是void運算符的做用,一個是void的返回值,還有一個是undefined是能夠被重定義的。瀏覽器
void
後須要跟表達式,表達式中的語句會所有執行。void
運算符 對給定的表達式進行求值,而後返回 undefined
markdown
例如:前端工程師
void console.log("你們好,我是南極大冰塊") // 控制檯打印「你們好,我是南極大冰塊」
void alert("你們好,我是南極大冰塊") // 瀏覽器彈出「你們好,我是南極大冰塊」
void 1+2 // 返回 NAN,想一下爲何呢???
// 這是由於1+2外面沒有加(),默認從左到右執行,void 1爲undefined,undefined+2爲NAN
void (1+2) // 返回值是undefined
複製代碼
void
返回值永遠是undefined
例如:svg
let a = void 0
console.log(a) // 打印結果爲undefined
let a = console.log("你們好,我是南極大冰塊")
console.log(a) // 打印結果爲undefined
let a = void alert("你們好,我是南極大冰塊")
console.log(a) // 打印結果爲undefined
let a = void (1+2)
console.log(a) // 打印結果爲undefined
複製代碼
undefined
在局部變量中是能夠被從新定義的雖然在ES5開始,undefined就已經被設定爲僅可讀的,可是在局部做用域內,undefined依然是可變的。post
例如:url
function fun(){
let undefined = 10
console.log(undefined)
}
fun() // 此時打印的undefined爲10
複製代碼
之因此用 void 0
或者 void(0)
代替 undefined
,很大一方面的緣由就是undefined
可能會被從新賦值,你不能保證別人的代碼裏undefined
是undefined
。可是void
的返回值必定是undefined
。spa
另外,因爲void 0
比undefined
要短一些,所佔字符空間更少,因此在js壓縮代碼中,咱們也常常能看到用void 0來代替undefined的狀況。就像局部變量在壓縮代碼中會被a,b,c來代替同樣。固然啦,若是你願意,寫void 1
來代替undefined
也是同樣的。
你好哇,我是南極大冰塊,一個技術與顏值成正比的前端工程師,崇尚一針見血的搞定前端問題,但願個人博客有幫助到了你。
關注我,前端路途一塊兒走。嘿哈~😛