void 0 有什麼意義?undefined居然是可變的?

這是我參與8月更文挑戰的第11天,活動詳情查看:8月更文挑戰前端

前言

哈嘍,你們晚上好哇!今天咱們來談一下JavaScript中一個頗有意思的現象,void 0 有什麼意義?undefined居然是可變的?web

說明

首先,咱們要對void運算符有一個基本的瞭解:void的正確使用方法是跟表達式,由於void會所有執行自身後面的表達式語句,可是它的返回值永遠是undefined。api

咱們要明白三件事情,一個是void運算符的做用,一個是void的返回值,還有一個是undefined是能夠被重定義的。瀏覽器

1,void 後須要跟表達式,表達式中的語句會所有執行。

void 運算符 對給定的表達式進行求值,而後返回 undefinedmarkdown

例如:前端工程師

void console.log("你們好,我是南極大冰塊") // 控制檯打印「你們好,我是南極大冰塊」
void alert("你們好,我是南極大冰塊") // 瀏覽器彈出「你們好,我是南極大冰塊」
void 1+2 // 返回 NAN,想一下爲何呢???
// 這是由於1+2外面沒有加(),默認從左到右執行,void 1爲undefined,undefined+2爲NAN
void (1+2) // 返回值是undefined
複製代碼

2,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

複製代碼

3,undefined在局部變量中是能夠被從新定義的

雖然在ES5開始,undefined就已經被設定爲僅可讀的,可是在局部做用域內,undefined依然是可變的。post

例如:url

function fun(){
	let undefined = 10
	console.log(undefined)
}
fun()  // 此時打印的undefined爲10 
複製代碼

之因此用 void 0 或者 void(0) 代替 undefined,很大一方面的緣由就是undefined可能會被從新賦值,你不能保證別人的代碼裏undefinedundefined。可是void 的返回值必定是undefinedspa

另外,因爲void 0undefined要短一些,所佔字符空間更少,因此在js壓縮代碼中,咱們也常常能看到用void 0來代替undefined的狀況。就像局部變量在壓縮代碼中會被a,b,c來代替同樣。固然啦,若是你願意,寫void 1來代替undefined也是同樣的。

後記

你好哇,我是南極大冰塊,一個技術與顏值成正比的前端工程師,崇尚一針見血的搞定前端問題,但願個人博客有幫助到了你。

關注我,前端路途一塊兒走。嘿哈~😛

相關文章
相關標籤/搜索