引用类型与对象拷贝

1.引用类型有哪些?非引用类型有哪些

引用类型: 对象 object 数组 函数 正则
非引用类型(基本类型): number string boolean null underfined symbol

2.如下代码输出什么?为什么

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};

console.log(obj1 == obj2);//false, 虽然指向的空间内容相同,但是是属于两片不同区域的对象,地址也会不一样

console.log(obj1 = obj2);// 复制obj2指向对象的地址给obj1, 输出 object={a: 1,b:2}

console.log(obj1 == obj2); // 比较两个地址相等,指向的也是同一片区域 ,输出true

3.如下代码输出什么? 为什么

var a = 1
var b = 2
var c = { name: '饥人谷', age: 2 }
var d = [a, b, c] // d数组包含a b 还有c对象

var aa = a // aa=a=1
var bb = b // bb=b=2
var cc = c // cc复制了指向对象的地址c, 可对对象操作
var dd = d //同上

a = 11 // a赋值为11
b = 22 // b 赋值为 22
c.name = 'hello' //对对象的内容改动 ,name: '饥人谷' 改成 name: 'hello'
d[2]['age'] = 3 // 改动d数组中的c中的age为3

console.log(aa) // 1
console.log(bb) // 2
console.log(cc) // var cc= { name: 'hello' , age: 3}
//改错:d[2]['age'] = 3 也改变了cc指向的对象的属性值 age: 3
所以 age: 3,不是2

console.log(dd) // var dd= [1,2, cc:{name:'hello', age: 3}]

4.如下代码输出什么? 为什么

var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}

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

f1(a)
//var n=a; var a=1; 所以 n=1;
++n //++n 输出2 , 然后n变为2 , 但a还是1, 输出a=1

f2(c)
// var obj = c = { name: 'jirengu', age: 2 }
++obj.age // 输出 age: 3 , 是对对象的age +1, 那么输出c就会内容变
化, 输出 var c = { name: 'jirengu', age: 3 }

f1(c.age)
//f1(c.age) 隐式语句: var n=c.age; c.age发生变化后 为3,所以n=3
//输出 ++n为4 ,所以var c = { name: 'jirengu', age: 3 }

console.log(a) //输出 a=1
console.log(c) // 输出 var c = { name: 'jirengu', age: 3 }

5.过滤如下数组,只保留正数,直接在原数组上操作
  • splice() 方法用于插入、删除或替换数组的元素。
  • 注意:这种方法会改变原始数组!。

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) //从负数的那个位置删除1个元素
i--
}
}
filter(arr)
console.log(arr) // [3,1,2]

6.过滤如下数组,只保留正数,原数组不变,生成新数组

var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
var newarr=[];
for(var i=0; i<arr.length; i++){
if( arr[i]>0 ){
newarr.push(arr[i]); //数组.push() 给数组添加元素
}
}
return newarr;
}

var arr2 = filter(arr) //newarr的属性给arr2
console.log(arr2) // [3,1,2]
console.log(arr) // [3,1,0,-1,-2,2,-5]

7.写一个深拷贝函数,用两种方式实现
  • //hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。

方法1

function copy(obj){
var newObj={}; //开辟新空间
for(var key in obj){
if(obj.hasOwnProperty(key)) //判断有个对象是否有属性或对象
if(typeof obj[key]==='null' || typeof obj[key]==='underfined' || typeof obj[key]==='string' || typeof obj[key]==='number' || typeof obj[key]==='boolean' ){ //判断对象中的属性全是基本类型时
newObj[key]= obj[key]; // 属性复制到新空间对象
}
else{
newObj[key] = copy(obj[key]);
}//如果对象中有嵌套对象 ,再递归嵌套对象的属性
}
}
return newObj;
}
var obj1 = {
name: 'ruoyu',
sex: 'male',
age: 30,
friend: {
name: 'hello,
age: 100
}
}
var obj3= copy(obj1);
obj1.name =wowo;
console.log(obj3);

方法2:

var obj1={
name:'teng',
age: 30,
friend: {
name: 'hello',
age: 100,
}
}
function copy(obj){
var newobj= JSON.parse(JSON.stringify(obj));
return newobj;
}
var obj3= copy(obj1);
console.log(obj3);

//JSON.stringify(obj) 对象转换成字符串
JSON.parse(JSON.stringify(obj)); 将转换来的字符串(此时的字符串已经不是之前的字符串) ,再生成为对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容