您好,登錄后才能下訂單哦!
這篇文章主要介紹“JavaScript中的傳值與傳引用的方式”,在日常操作中,相信很多人在JavaScript中的傳值與傳引用的方式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JavaScript中的傳值與傳引用的方式”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
JavaScript中的傳值與傳引用
1.傳值(by value)
變量的值被復(fù)制出一份,與原來的值將不相干,也就是說即使新的值被修改,原來的值也不會改變,在JavaScript中基本類型都是傳值的.
function testPassValue()
{
var m=1;
var n=2;
//將m,n的值復(fù)制一份,傳遞到passValue
passValue(m,n);
alert(m); //將是原有的值
}
function passValue(a,b)
{
a = a+b; //改變a的值,這里a只是原有值的一份copy
alert(a);
}
輸出結(jié)果:
3
1
2.傳引用(by reference).
引用本身復(fù)制一份傳給function,引用指向的對象并沒有被復(fù)制傳遞(java中也是如此),在function中,如果改變了對象的屬性的值,由于和原來的引用指向的是同一個對象,因此在通過原來的引用訪問到的將是修改過的值;
但是如果只是在function中將引用指向一個新的對象,將不會改變原對象的值,改變的只是復(fù)制的這一份引用.
function testPassValue()
{
var date = new Date(2006,02,27);
alert(date.getDate()); //輸出為 27
//將date引用本身復(fù)制一份,傳遞到passReference,注意date所指向的對象并沒有被復(fù)制
passReference(date);
alert(date.getDate()); //輸出為12
//同上
changeReference(date);
alert(date.getDate()); //輸出還為12
}
function passReference(da)
{
//由于da和原引用指向的是同一個對象,在function外,通過原有的引用訪問到的將是對象的日期屬性值,將是修改之后的值.
da.setDate(12);
}
function changeReference(da)
{
//此時da引用實際上是原引用的一份copy,將引用本身重新賦值,將不會影響原引用
da= new Date(2007,05,11);
//將da引用指向一個新的對象,此時原引用指向的還是原來的對象
alert(da.getDate()); // 輸出為11
}
3 特殊的String
在JavaScript中,String也傳引用的. js中只有charAt方法,而沒有對應(yīng)的修改方法,和java中的String相同,都具有不變性.
var s1 = "hello";
var s2 = "hell" + "o";
if (s1 == s2)
alert("s1 = s2"); //這句會不會執(zhí)行? java用的熟的人可能會認(rèn)為不會執(zhí)行,因為java中的==比較的是同一性. 事實上在js中對String==比較的是值是否相等,所以這句話會執(zhí)行. 但是對其他的Object == 比較和java中一樣是同一性.
到此,關(guān)于“JavaScript中的傳值與傳引用的方式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。