javascript中沒(méi)有指針,只有引用;指針指的是內(nèi)存地址,能夠操作指針表示程序可以直接操作內(nèi)存,而JavaScript腳本試運(yùn)行在網(wǎng)頁(yè)的,瀏覽器以及操作系統(tǒng)都不允許JavaScript可以操作內(nèi)存,所以JavaScript腳本中沒(méi)有指針的概念,只能由瀏覽器分配內(nèi)存。
本教程操作環(huán)境:windows10系統(tǒng)、javascript1.8.5版、Dell G3電腦。
javascript中有指針嗎
JS 沒(méi)有指針(pointer),只有引用(reference)。
一個(gè)簡(jiǎn)單的判斷依據(jù)就是:指針是可以有 ++ 操作的,但 JS 辦不到。
指針其實(shí)就是內(nèi)存地址,能夠操作指針,就表示程序可以直接操作內(nèi)存,這對(duì)于運(yùn)行于網(wǎng)頁(yè)中的js腳本是非常危險(xiǎn)的,瀏覽器以及操作系統(tǒng)都不可能讓這樣的事發(fā)生,所以js腳本不可能有指針的概念,只能引用由瀏覽器分配的內(nèi)存,至于這個(gè)內(nèi)存的物理地址究竟是什么,則至少對(duì)于js的編程者而言是不透明的。
示例如下:
let a = 888 let b = a a = 999 console.log(a, b) // 999 888 對(duì)于『基本類型』的變量,a,b 相互是不影響的
但是,對(duì)于復(fù)合類型的變量,變量其實(shí)存儲(chǔ)的是一個(gè)『指針』, 當(dāng) d=c 后,他們指向的是同一個(gè)內(nèi)存地址,所以當(dāng) c 改變了,d 同樣也改變了:let c = ['a', 'b', 'c']
let d = c d === c // true 都指向同一個(gè)『指針』呢 c[0] = 'x' console.log(d) // ["x", "b", "c"] 而這樣let c = ['a', 'b', 'c'] let d = ['a', 'b', 'c'] // or 簡(jiǎn)寫成 d = [...c] d === c // false 變量 d 重新賦值了呢,所以和 c 就不是一伙的啦! c[0] = 'x' console.log(d) // ["a", "b", "c"]
擴(kuò)展知識(shí):
指針,是C語(yǔ)言中的一個(gè)重要概念及其特點(diǎn),也是掌握C語(yǔ)言比較困難的部分。指針也就是內(nèi)存地址,指針變量是用來(lái)存放內(nèi)存地址的變量,在同一CPU構(gòu)架下,不同類型的指針變量所占用的存儲(chǔ)單元長(zhǎng)度是相同的,而存放數(shù)據(jù)的變量因數(shù)據(jù)的類型不同,所占用的存儲(chǔ)空間長(zhǎng)度也不同。有了指針以后,不僅可以對(duì)數(shù)據(jù)本身,也可以對(duì)存儲(chǔ)數(shù)據(jù)的變量地址進(jìn)行操作。
指針描述了數(shù)據(jù)在內(nèi)存中的位置,標(biāo)示了一個(gè)占據(jù)存儲(chǔ)空間的實(shí)體,在這一段空間起始位置的相對(duì)距離值。在 C/C++語(yǔ)言中,指針一般被認(rèn)為是指針變量,指針變量的內(nèi)容存儲(chǔ)的是其指向的對(duì)象的首地址,指向的對(duì)象可以是變量(指針變量也是變量),數(shù)組,函數(shù)等占據(jù)存儲(chǔ)空間的實(shí)體。
【