進(jìn)階-任務(wù)4

1.引用類(lèi)型有哪些?非引用類(lèi)型有哪些

  • 引用類(lèi)型:
    對(duì)象、數(shù)組、函數(shù)、正則表達(dá)式
  • 非引用類(lèi)型:
    數(shù)值、字符串、布爾值、null、undefined

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

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
// obj1和obj2指向的是不同的對(duì)象
console.log(obj1 == obj2);    // false
// 將obj2引用對(duì)象的指針賦值給obj1
console.log(obj1 = obj2);      // Object {a:1, b:2}
// 現(xiàn)在obj1和obj2指向同一個(gè)對(duì)象
console.log(obj1 == obj2);    // true

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

// aa和bb都是數(shù)值,非引用類(lèi)型,a和b數(shù)值的變化對(duì)aa和bb無(wú)影響
console.log(aa)   // 1
console.log(bb)   // 2
// 將c指向?qū)ο蟮闹羔樫x給cc,c和cc指向的其實(shí)是同一個(gè)對(duì)象,對(duì)c的修改就是對(duì)其指向的對(duì)象的修改,因此cc會(huì)保持一致的變化
console.log(cc)   // {name:'hello',age:3}
// d[0]和d[1]只是將a和b的數(shù)值拷貝過(guò)來(lái),而d[2]和c指向的也是同一個(gè)對(duì)象,d[2]中存儲(chǔ)的只是指向?qū)ο蟮闹羔?console.log(dd)  // [1, 2, {name: 'hello', age: 3} ]

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

// f1(a)將a的值賦給f1的參數(shù),參數(shù)的變化不會(huì)影響a
f1(a) 
// f2(c)將c指向?qū)ο蟮闹羔樫x給參數(shù)obj,因此obj和c指向同一個(gè)對(duì)象
f2(c) 
// c.age是一個(gè)數(shù)值,和f1(a)類(lèi)似
f1(c.age) 
console.log(a)    // 1
console.log(c)    //  { name: 'jirengu', age: 3 }

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

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

6.過(guò)濾如下數(shù)組,只保留正數(shù),原數(shù)組不變,生成新數(shù)組

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

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

  • 遞歸調(diào)用
var stu1 = {
    name: 'nicole',
    score: {
        math: 90,
        english: 85 
    }
}
function deepCopy(obj) {
    var newObj = {};
    for( var key in obj) {
        if (obj.hasOwnProperty(key)) {
            if (typeof obj[key] === 'number' || typeof obj[key] === 'string' || typeof obj[key] === 'boolean'
                  || obj[key] === undefined || obj[key] === null) {
                newObj[key] = obj[key];
            }else {
                newObj[key] = deepCopy(obj[key]);
            }
        }
    }
    return newObj;
}
var stu2 = deepCopy(stu1);
stu2.name = 'Jack';
stu2.score.math = 80;
console.log(stu1);
console.log(stu2);
  • Jason解析
    Note:它能正確處理的對(duì)象只有 Number, String, Boolean, Array, 扁平對(duì)象,即那些能夠被 json 直接表示的數(shù)據(jù)結(jié)構(gòu),并且兼容性是IE8+
var obj = {
    name: 'nicole',
    score: {
        math: 90,
        english: 85 
    }
}
var obj2 = JSON.parse(JSON.stringify(obj));
obj2.name = 'Jack';
obj2.score.math = 80;
console.log(obj);
console.log(obj2);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 引用類(lèi)型有哪些?非引用類(lèi)型有哪些2.如下代碼輸出什么?為什么? 引用類(lèi)型有哪些,非引用類(lèi)型有哪些引用類(lèi)型:數(shù)組,對(duì)...
    小羊熊閱讀 267評(píng)論 0 0
  • 1.引用類(lèi)型有哪些?非引用類(lèi)型有哪些? 引用類(lèi)型值(對(duì)象、數(shù)組、函數(shù)、正則):指的是那些保存在堆內(nèi)存中的對(duì)象,變量...
    饑人谷_一葉之秋閱讀 161評(píng)論 0 0
  • 如何控制alert中的換行?\n alert(“p\np”); 請(qǐng)編寫(xiě)一個(gè)JavaScript函數(shù) parseQu...
    heyunqiang99閱讀 1,146評(píng)論 0 6
  • 1. 引用類(lèi)型有哪些?非引用類(lèi)型有哪些 基本類(lèi)型值(數(shù)值、布爾值、null和undefined):指的是保存在棧內(nèi)...
    cheneyzhangch閱讀 128評(píng)論 0 0
  • 閱讀很重要,說(shuō)了誰(shuí)都知道,可是能做到的卻真的不是很多。一路上我們總會(huì)被許多事情牽絆,錯(cuò)過(guò)很多也失去很多,可唯有活得...
    飲雨秋寒閱讀 200評(píng)論 0 0

友情鏈接更多精彩內(nèi)容