引用類型导盅、對象拷貝

1.引用類型有哪些缠黍?非引用類型有哪些?

JS為了便于操作基本類型,提供了3個(gè)特殊的引用類型:Boolean/Number和String(基本類型轉(zhuǎn)引用類型): javascript基本包裝類型介紹

  • 引用類型值:(對象妻味、數(shù)組正压、函數(shù)、正則)
  • 指的是那些保存在堆內(nèi)存中的對象责球,變量中保存的實(shí)際上只是一個(gè)指針焦履,這個(gè)指針執(zhí)行內(nèi)存中的另一個(gè)位置,由該位置保存對象
  • 非引用類型:(字符串雏逾、數(shù)值嘉裤、布爾值、null和undefined)
  • 指的是保存在棧內(nèi)存中的簡單數(shù)據(jù)段

2.如下代碼輸出什么栖博?為什么

  var obj1 = {a:1, b:2};
  var obj2 = {a:1, b:2};
  console.log(obj1 == obj2);  //1
  console.log(obj1 = obj2);
  console.log(obj1 == obj2);  //2
  • 第一個(gè)為false屑宠,因?yàn)閛bj1和obj2的值雖然相同,但是這兩個(gè)對象分別保存在堆內(nèi)存的不同位置仇让,指針各自指向不同的位置
  • 第二個(gè)為true典奉,因?yàn)閛bj2將值賦予obj1實(shí)際是將存儲在變量中的指針賦予obj1,而這個(gè)指針指向同一個(gè)堆內(nèi)存位置

3.如下代碼輸出什么? 為什么

    var a = 1
    var b = 2
    var c = { name: '饑人谷', age: 2 }
    var d = [a, b, c]

    var aa = a
    var bb = b
    var cc = c
    var dd = d

    a = 11
    b = 22
    c.name = 'hello'
    d[2]['age'] = 3

    console.log(aa)  // 輸出為1丧叽,因?yàn)榉且妙愋蜁截惒⒅匦聞?chuàng)建了一個(gè)棧內(nèi)存空間在原來的a之上
    console.log(bb) // 輸出為2卫玖,因?yàn)榉且妙愋蜁截惒⒅匦聞?chuàng)建了一個(gè)棧內(nèi)存空間在原來的b之上
    console.log(cc) // 輸出為{ name: 'hello', age: 3 },因?yàn)橐妙愋褪峭ㄟ^指針指向?qū)ο笏娣诺奈恢糜淮荆苯舆M(jìn)行拷貝假瞬,則將該指針賦值給cc,所以cc的值和c一樣
    console.log(dd) // 輸出為{1,2,{ name: 'hello', age: 3 }},因?yàn)橐妙愋褪峭ㄟ^指針指向?qū)ο笏娣诺奈恢猛衍裕苯舆M(jìn)行拷貝剪芥,則將該指針賦值給dd,所以dd的值和d一樣

4.如下代碼輸出什么? 為什么

    var a = 1
    var c = { name: 'jirengu', age: 2 }

    function f1(n){
      ++n
    }
    function f2(obj){
      ++obj.age
    }

    f1(a) 
    f2(c) 
    f1(c.age) 
    console.log(a) //輸出為1芦劣,函數(shù)內(nèi)的局部變量不影響全局變量的值
    console.log(c) //輸出為{ name: 'jirengu', age: 3 }粗俱,f2進(jìn)行函數(shù)運(yùn)算后age為3说榆,因?yàn)橐妙愋偷奶攸c(diǎn)虚吟,所以值改變,而進(jìn)行f1的函數(shù)運(yùn)算時(shí)签财,由于是單獨(dú)提取出age的值進(jìn)行運(yùn)算串慰,相當(dāng)于轉(zhuǎn)變?yōu)榉且妙愋停灾挡皇苡绊?

5.過濾如下數(shù)組唱蒸,只保留正數(shù)邦鲫,直接在原數(shù)組上操作

js中splice()的強(qiáng)大(插入、刪除或替換數(shù)組的元素)

    var arr = [3,1,0,-1,-3,2,-5]
    function filter(arr){
        for(var i = 0; i < arr.length; i++) {
            if(arr[i] <= 0){
                arr.splice(i,1);  
                i--;
            }
        }
    }
    filter(arr)
    console.log(arr) // [3,1,2]

6.過濾如下數(shù)組神汹,只保留正數(shù)庆捺,原數(shù)組不變,生成新數(shù)組

JavaScript中數(shù)組slice和splice的對比小結(jié)

 方法一:
 var arr = [3,1,0,-1,-3,2,-5]
          var j = 0;
          function filter(arr){
              var newArr = [];
              for(var i = 0; i < arr.length; i++){
                  if(arr[i] >= 0) {
                      newArr[j] = arr[i];
                      j++;
                  }
               }
              return newArr;
          }
          var arr2 = filter(arr)
          console.log(arr2) // [3,1,2]
          console.log(arr)  // [3,1,0,-1,-2,2,-5]

方法二:
var arr = [3,1,0,-1,-3,2,-5]
var arr2 = arr.slice();
function filter(arr2) {
    for(var i=0;i<arr2.length;i++) {
        if(arr2[i]<=0) {
            arr2.splice(i,1);
            filter(arr2);
          }
    }
 }
filter(arr2);
console.log(arr);
console.log(arr2);

7.寫一個(gè)深拷貝函數(shù)屁魏,用兩種方式實(shí)現(xiàn)

JS中的hasOwnProperty()和isPrototypeOf()屬性實(shí)例詳解

    方法一:
    obj = {
            age:100,
            one: null,
            finder: {
                name: 'jirengu',
                sex: 'nv'
            }
        }

        function copy(obj) {
            var newObj = {};
            for(var key in obj) {
                if(obj.hasOwnProperty(key)) {   // hasOwnProperty 是檢測對象在排除原型鏈的情況下是否具有某個(gè)屬性滔以。
                    if(typeof obj[key] === 'number' 
                        || typeof obj[key] === 'boolean' 
                        || typeof obj[key] === 'string' 
                        || typeof obj[key] === 'undefined'
                        || obj[key] === null) {
                        newObj[key] = obj[key];
                    }else{
                        newObj[key] = copy(obj[key]);
                    }
                }
            }
            return newObj;
        }

        var obj3 = copy(obj);
        obj.finder.name = '饑人谷'
        console.log(obj3);

方法二:
function copy(obj){
    var newobj = JSON.parse(JSON.stringify(obj));
    return newobj;
}
var obj2 = copy(obj1)
console.log(obj2)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市氓拼,隨后出現(xiàn)的幾起案子你画,更是在濱河造成了極大的恐慌,老刑警劉巖桃漾,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坏匪,死亡現(xiàn)場離奇詭異,居然都是意外死亡撬统,警方通過查閱死者的電腦和手機(jī)适滓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恋追,“玉大人凭迹,你說我怎么就攤上這事〖赣冢” “怎么了蕊苗?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沿彭。 經(jīng)常有香客問我朽砰,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任瞧柔,我火速辦了婚禮漆弄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘造锅。我一直安慰自己撼唾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布哥蔚。 她就那樣靜靜地躺著倒谷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糙箍。 梳的紋絲不亂的頭發(fā)上渤愁,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音深夯,去河邊找鬼抖格。 笑死,一個(gè)胖子當(dāng)著我的面吹牛咕晋,可吹牛的內(nèi)容都是我干的雹拄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼掌呜,長吁一口氣:“原來是場噩夢啊……” “哼滓玖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起站辉,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤呢撞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饰剥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殊霞,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年汰蓉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绷蹲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顾孽,死狀恐怖祝钢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情若厚,我是刑警寧澤拦英,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站测秸,受9級特大地震影響疤估,放射性物質(zhì)發(fā)生泄漏灾常。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一铃拇、第九天 我趴在偏房一處隱蔽的房頂上張望钞瀑。 院中可真熱鬧,春花似錦慷荔、人聲如沸雕什。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贷岸。三九已至,卻和暖如春吧碾,著一層夾襖步出監(jiān)牢的瞬間凰盔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工倦春, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人落剪。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓睁本,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忠怖。 傳聞我的和親對象是個(gè)殘疾皇子呢堰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1.引用類型有哪些?非引用類型有哪些非引用類型值凡泣,即基本類型值(數(shù)值枉疼,布爾值,undefined鞋拟,null):指保...
    青鳴閱讀 392評論 0 0
  • 1.引用類型有哪些骂维?非引用類型有哪些 非引用類型值,即基本類型值(數(shù)值贺纲,布爾值航闺,undefined,null):指...
    LINPENGISTHEONE閱讀 205評論 0 0
  • 1.引用類型有哪些猴誊?非引用類型有哪些 基本類型值(Number潦刃、Boolean、string懈叹、null和undef...
    saintkl閱讀 355評論 0 0
  • 引用類型有哪些乖杠?非引用類型有哪些 基本類型值(Undefined、Null澄成、Boolean胧洒、Number和Stri...
    jamesXiao_閱讀 146評論 0 0
  • 1.引用類型有哪些笆包?非引用類型有哪些 基本類型(數(shù)值、布爾值略荡、null庵佣、undefined):指的是保存在棧內(nèi)存中...
    我七閱讀 154評論 0 0