|
|
|
|
|
void 這個(gè)術(shù)語(yǔ)在編程中使用時(shí),指的是“無(wú)”的返回 - 可以說(shuō)是“空值”。當(dāng)函數(shù)為空時(shí),意味著該函數(shù)不返回任何內(nèi)容。這類(lèi)似于 JavaScript 中undefined
顯式返回的函數(shù),如下所示:
function und() {
return undefined
}
und()
或隱含地,像這樣:
function und() {
}
und()
無(wú)論上述函數(shù)中的表達(dá)式和語(yǔ)句如何,都沒(méi)有返回結(jié)果。
那么,什么是 javascript:void(0) 呢?
如果我們把它分開(kāi),我們有javascript:
和void(0)
。讓我們更詳細(xì)地看一下每個(gè)部分。
javascript:
這稱(chēng)為偽 URL。當(dāng)瀏覽器接收到此值作為href錨標(biāo)記上的值時(shí),它會(huì)解釋冒號(hào) (:) 后面的 JS 代碼,而不是將該值視為引用路徑。
例如:
<a href="javascript:console.log('javascript');alert('javascript')">Link</a>
單擊“鏈接”時(shí),結(jié)果如下:
如上所示,瀏覽器不會(huì)將其href視為引用路徑。相反,它將其視為一些 JavaScript 代碼,以“javascript:
”開(kāi)頭并以分號(hào)分隔。
void(0)
void
運(yùn)算符計(jì)算給定的表達(dá)式并返回undefined
。
例如:
const result = void(1 + 1);
console.log(result);
// undefined
1 + 1
被評(píng)估但undefined
被返回。為了證實(shí)這一點(diǎn),這是另一個(gè)例子:
<body>
<h1>Heading</h1>
<script>
void(document.body.style.backgroundColor = 'red',
document.body.style.color = 'white'
)
</script>
</body>
上面代碼的結(jié)果是:
這是另一個(gè)例子:
console.log(void(0) === undefined)
// true
結(jié)合javascript:
和void(0)
有時(shí),你不希望鏈接導(dǎo)航到另一個(gè)頁(yè)面或重新加載頁(yè)面。使用javascript:
,你可以運(yùn)行不會(huì)更改當(dāng)前頁(yè)面的代碼。
這與void(0)
一起使用,什么都不做- 不要重新加載,不要導(dǎo)航,不要運(yùn)行任何代碼。
例如:
<a href="javascript:void(0)">Link</a>
“鏈接”一詞被瀏覽器視為鏈接。例如,它是可聚焦的,但它不會(huì)導(dǎo)航到新頁(yè)面。
0
是一個(gè)傳遞給void
的參數(shù),它什么都不做,什么都不返回。
JavaScript 代碼(如上所示)也可以作為參數(shù)傳遞給void
方法。這使得鏈接元素運(yùn)行一些代碼,但它維護(hù)相同的頁(yè)面。
例如:
<a id='link' href="javascript:void(
document.querySelector('#link').style.color = 'green'
)">Link</a>
單擊按鈕時(shí),結(jié)果如下:
使用void
,它告訴瀏覽器不要返回任何東西(或 return undefined)。
帶有javascript:void(0)
引用的鏈接的另一個(gè)用例是,有時(shí)鏈接可能會(huì)在后臺(tái)運(yùn)行一些 JavaScript 代碼,而導(dǎo)航可能是不必要的。在這種情況下,表達(dá)式將用作傳遞給void
的參數(shù)。
結(jié)論
在這篇簡(jiǎn)化的文章中,我們了解了void
運(yùn)算符是什么、它是如何工作的,以及它如何與鏈接屬性的javascript:
偽 URL一起使用href。
這可確保頁(yè)面在單擊時(shí)不會(huì)導(dǎo)航到另一個(gè)頁(yè)面或重新加載當(dāng)前頁(yè)面。