参考资料:
Alex老师教学
JS30-Day14-JS Reference VS Copy
传值和传址的练习。
我对这部分的概念还不算很清楚,以後还需要继续找题目来写。
今天的练习都是开console看。
Q1
// start with strings, numbers and booleans
// 首先从字串、数字、布林开始
let a = 'A';
let b = a;
a = 'B';
console.log(a, b); // B A
let c = 0;
let d = c;
c++;
console.log(c, d); //1 0
let e = true;
let f = e;
e = false;
console.log(e, f); //false true
let g = 'A';
let h = 'A';
let i = 'A';
(h = 'B'), (i = 'C'), (g += h), (g += i);
// h = 'B';
// i = 'C';
// g += h;
// g += i;
console.log(g, h, i); //ABC B C
Q2
// Let's say we have an array
// 让我们来看看阵列
const players = ['Wes', 'Sarah', 'Ryan', 'Poppy'];//题目预设
// and we want to make a copy of it.
// 我们希望复制阵列
如果直接复制阵列,则复制後的阵列修改时会导致原始阵列也会改变,因为两者指向同一储存位置。
let players2 = players;
players2[0] = 'aaa';
console.log(players, players2);
所以我们需要使用其他方法做出新阵列,以下是两种方法
let players3 = players.slice();
//slice()会把切出来的内容再做成一个阵列
players3[0] = 'bbb';
console.log(players, players3);
let players4 = [...players];
players4[1] = 'ccc';
console.log(players,players4);
Q3
// The same thing goes for objects, let's say we have a person object with Objects
// 处理物件也是类似的观念
let person = { //题目预设
name: 'Wes Bos',
age: 80,
};
同样的直接复制并修改会干扰到原本的物件
let person2 = person;
person.name = 'yyy';
console.log(person, person2);// {name: "yyy", age: 80} {name: "yyy", age: 80}
所以需要使用建立新物件的方法
let person3 = Object.assign({}, person);
person3.age = 30
console.log(person, person3);
物件有两层的情况:
const abc = {
name: 'abc',
age: 100,
social: {
twitter: '@abc',
facebook: 'abc.developer',
},
};
用assign()
方法复制再修改仍会干扰到原始物件
let abc2 = Object.assign({}, abc);
abc2.social.facebook = null;
console.log(abc.social.facebook);//null
用JSON.parse(JSON.stringify())
则不会修改到原始物件
let abc3 = JSON.parse(JSON.stringify(abc));
abc3.social.facebook = null;
console.log(abc.social.facebook);
>>: Day28 - GitLab CI 如何让工作流程流水线跑快一点?之二 逐一调整
早起运动30分钟Day1 今天一边运动,一边听《转行》这本书。里面提到几个我喜欢的观点。 “我们都以...
今天延续昨天的文字输入,我们来做更多尝试。 讲者把昨天 Text > Input 做出来的 I...
Annotation,大概最常见的就是@Override了,当我们写的类别继承自其他类别时,要覆写父...
URL : https://app.hackthebox.eu/machines/263 IP :...
说明 我在本系列文章中,主要是采用 IntelliJ-IDEA 作为示范。但我不会在文章中跟你讲述如...