javascript的字符串按引用復(fù)制和傳遞,按值來比較介紹與應(yīng)用
更新時(shí)間:2012年12月28日 10:31:27 作者:
字符串是按引用復(fù)制和傳遞的,但是是按值來比較的;當(dāng)按值復(fù)制或傳遞時(shí),將在計(jì)算機(jī)內(nèi)存中分配一塊空間并將原值復(fù)制到其中,需要的朋友可以參考下
按值和按引用的比較
Numbers 和 Boolean 類型的值 (true 和 false) 是按值來復(fù)制、傳遞和比較的。當(dāng)按值復(fù)制或傳遞時(shí),將在計(jì)算機(jī)內(nèi)存中分配一塊空間并將原值復(fù)制到其中。然后,即使更改原來的值,也不會影響所復(fù)制的值(反過來也一樣),因?yàn)檫@兩個(gè)值是獨(dú)立的實(shí)體。
對象、數(shù)組以及函數(shù)是按引用來復(fù)制、傳遞和比較的。 當(dāng)按地址復(fù)制或傳遞時(shí),實(shí)際是創(chuàng)建一個(gè)指向原始項(xiàng)的指針,然后就像拷貝一樣來使用該指針。如果隨后更改原始項(xiàng),則將同時(shí)更改原始項(xiàng)和復(fù)制項(xiàng)(反過來也一樣)。實(shí)際上只有一個(gè)實(shí)體;“復(fù)本”并不是一個(gè)真正的復(fù)本,而只是該數(shù)據(jù)的又一個(gè)引用。
當(dāng)按引用比較時(shí),要想比較成功,兩個(gè)變量必須參照完全相同的實(shí)體。例如,兩個(gè)不同的 Array 對象即使包含相同的元素也將比較為不相等。要想比較成功,其中一個(gè)變量必須為另一個(gè)的參考。要想檢查兩個(gè)數(shù)組是否包含了相同的元素,比較 toString() 方法的結(jié)果。
最后,字符串是按引用復(fù)制和傳遞的,但是是按值來比較的。請注意,假如有兩個(gè) String 對象(用 new String("something") 創(chuàng)建的),按引用比較它們,但是,如果其中一個(gè)或者兩者都是字符串值的話,按值比較它們。
字符串是按引用復(fù)制和傳遞的,但是是按值來比較的。請注意,假如有兩個(gè) String 對象(用 new String("something") 創(chuàng)建的),按引用比較它們,但是,如果其中一個(gè)或者兩者都是字符串值的話,按值比較它們。
var str1="aa";
var str2=new String("aa");
var str3=str2;
function test(p){
var str4=p;
console.log(str4===str2);
}
console.log(str1===str2); //false
console.log(str3===str2); //true
test(str1);//false
test(str2);//true
Numbers 和 Boolean 類型的值 (true 和 false) 是按值來復(fù)制、傳遞和比較的。當(dāng)按值復(fù)制或傳遞時(shí),將在計(jì)算機(jī)內(nèi)存中分配一塊空間并將原值復(fù)制到其中。然后,即使更改原來的值,也不會影響所復(fù)制的值(反過來也一樣),因?yàn)檫@兩個(gè)值是獨(dú)立的實(shí)體。
對象、數(shù)組以及函數(shù)是按引用來復(fù)制、傳遞和比較的。 當(dāng)按地址復(fù)制或傳遞時(shí),實(shí)際是創(chuàng)建一個(gè)指向原始項(xiàng)的指針,然后就像拷貝一樣來使用該指針。如果隨后更改原始項(xiàng),則將同時(shí)更改原始項(xiàng)和復(fù)制項(xiàng)(反過來也一樣)。實(shí)際上只有一個(gè)實(shí)體;“復(fù)本”并不是一個(gè)真正的復(fù)本,而只是該數(shù)據(jù)的又一個(gè)引用。
當(dāng)按引用比較時(shí),要想比較成功,兩個(gè)變量必須參照完全相同的實(shí)體。例如,兩個(gè)不同的 Array 對象即使包含相同的元素也將比較為不相等。要想比較成功,其中一個(gè)變量必須為另一個(gè)的參考。要想檢查兩個(gè)數(shù)組是否包含了相同的元素,比較 toString() 方法的結(jié)果。
最后,字符串是按引用復(fù)制和傳遞的,但是是按值來比較的。請注意,假如有兩個(gè) String 對象(用 new String("something") 創(chuàng)建的),按引用比較它們,但是,如果其中一個(gè)或者兩者都是字符串值的話,按值比較它們。
字符串是按引用復(fù)制和傳遞的,但是是按值來比較的。請注意,假如有兩個(gè) String 對象(用 new String("something") 創(chuàng)建的),按引用比較它們,但是,如果其中一個(gè)或者兩者都是字符串值的話,按值比較它們。
復(fù)制代碼 代碼如下:
var str1="aa";
var str2=new String("aa");
var str3=str2;
function test(p){
var str4=p;
console.log(str4===str2);
}
console.log(str1===str2); //false
console.log(str3===str2); //true
test(str1);//false
test(str2);//true
相關(guān)文章
Bootstrap基本插件學(xué)習(xí)筆記之按鈕(21)
這篇文章主要為大家詳細(xì)介紹了Bootstrap基本插件學(xué)習(xí)筆記之按鈕的相關(guān)資料,實(shí)現(xiàn)按鈕狀態(tài)控制等形式的交互,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12深入學(xué)習(xí)js函數(shù)的隱式參數(shù) arguments 和 this
這篇文章主要介紹了 深入學(xué)習(xí)js函數(shù)的隱式參數(shù) arguments 和 this,arguments是一個(gè)類數(shù)組結(jié)構(gòu),它保存了調(diào)用時(shí)傳遞給函數(shù)的所有實(shí)參;this是函數(shù)執(zhí)行時(shí)的上下文對象, 這個(gè)對象有些讓人感到困惑的行為。 下面分別對他們進(jìn)行討論。,需要的朋友可以參考下2019-06-06BootStrap的彈出框(Popover)支持鼠標(biāo)移到彈出層上彈窗層不隱藏的原因及解決辦法
彈出框(Popover)與工具提示(Tooltip)類似,提供了一個(gè)擴(kuò)展的視圖。本文給大家介紹BootStrap的彈出框(Popover)支持鼠標(biāo)移到彈出層上彈窗層不隱藏的原因及解決辦法,喜歡的朋友參考下吧2016-04-04JavaScript實(shí)現(xiàn)跟隨滾動緩沖運(yùn)動廣告框
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)跟隨滾動緩沖運(yùn)動廣告框,頁面左右兩邊跟隨式廣告框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07JS實(shí)現(xiàn)表單中點(diǎn)擊小眼睛顯示隱藏密碼框中的密碼
這篇文章主要介紹了JS實(shí)現(xiàn)表單中點(diǎn)擊小眼睛顯示隱藏密碼框中的密碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考價(jià)值,需要的朋友可以參考下2020-04-04