JavaScript 核心觀念(34)-物件-課後練習

前言

接下來又來到了滿滿的物件章節測驗。

第一題

請問該如何從陣列物件中取得小明?

1
2
3
4
5
6
7
8
9
var a = [{
family:{
name: "小王",
}
},{
family:{
name: "小明",
},
}];
  1. a.family.name
  2. a[2].family.name
  3. a[0].family.name
  4. a[1].family.name
點我看解答(請認真思考後再看解答)

答案是:「4」
千萬要記得陣列的起始計算是從 0 開始。

第二題

請問 a 會呈現什麼答案?

1
2
3
4
5
var a = {};
var b = a;
var c = b = { number: 1 };
c.name = '小明';
console.log(a);
  1. { number: 1 }
  2. {}
  3. {name: "小明"}
  4. undefined
點我看解答(請認真思考後再看解答)

答案是:「2」
原因是出在 b = { number: 1 } 的時候,被重新賦予物件,所以就離開了物件參考特性。

第三題

1
2
3
4
5
{
"name": "小明",
"age": 28,
"address": "Taiwan...",
}
  1. 錯誤
  2. 正確
  3. 看不出來
點我看解答(請認真思考後再看解答)

答案是:「1」
JSON 的格式是非常嚴格的,多一個逗號少一個逗號,都會導致出現錯誤,所以 address 最後多了一個逗號

第四題

請問有哪些型別是 傳參考 特性?

  1. Array 、Function
  2. String、Number
點我看解答(請認真思考後再看解答)

答案是:「1」
這題應該不用解釋了吧 XD

第五題

請問 console.log(greet.a); 會出現什麼?

1
2
3
4
5
6
7
function greet() {
a = 1;
}

greet.a = 2;

console.log(greet.a);
  1. undefined
  2. a is not defined
  3. 2
  4. 1
點我看解答(請認真思考後再看解答)

答案是:「3」
在 JavaScript 中 function 是一個很特別的存在,它是可以當成物件來使用,透過 「.」 即可做到新增屬性與值,所以 function 在 JavaScript 是一個特殊的物件唷~

第六題

請問這是淺層複製還是深層複製?另外 console.log 會出現什麼?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var family = [{
name: '小明家',
members: {
father: '父親',
mon: '母親',
ming: '小明'
}
}];

var array = [];

family.forEach((item) => {
array.push(item);
})

array[0].members.ming = 'casper';
console.log(family[0].members.ming);
console.log(array[0].members.ming);
  1. 深層複製 / casper
  2. 淺層複製 / casper
  3. 深層複製 / 小明
  4. 淺層複製 / 小明
點我看解答(請認真思考後再看解答)

答案是:「2」
因為陣列一取出來後就直接 push 到新陣列中,所以其實是屬於淺層複製唷。

第七題

請問以下 console.log() 將會出現什麼?

1
2
3
4
5
6
var array = ['1', '2', '3', '4', '5'];
var array2 = array;

array2[4] = '6';
console.log('array: ' + array[4]);
console.log('array2: ' + array2[4]);
  1. array: 6 / array2: 6
  2. array: 5 / array2: 6
  3. array: 5 / array2: 5
  4. array: 6 / array2: 5
點我看解答(請認真思考後再看解答)

答案是:「1」
在前面課程有講過,傳參考特性中陣列也是一種唷~

第八題

請問 console.log() 會得到什麼答案?

1
2
3
4
5
6
7
8
9
10
11
var a = function () {
a = 1;
}

a.leng = 'English';

var b = a;

b.leng = 'Chinese';
console.log('a.leng: ' + a.leng);
console.log('b.leng: ' + b.leng);
  1. a.leng: English / b.leng: English
  2. a.leng: Chinese / b.leng: Chinese
  3. a.leng: Chinese / b.leng: English
  4. a.leng: English / b.leng: Chinese
點我看解答(請認真思考後再看解答)

答案是:「2」
在 JavaScript 中 function 也是物件的一種,只是它是擁有程式區塊的能力物件而已。

第九題

請問 console.log() 會出現什麼?

1
2
3
4
5
6
7
var a = JSON.parse('{"name": "小明", "age": 28, "address": "Taiwan...","family": {"members": {"father": "父親","mon": "母親","ming": "小明"}}}');

var b = a;
b.family.members.father = '爸爸';

console.log(a.family.members.father);
console.log(b.family.members.father);
  1. 父親 / 爸爸
  2. 爸爸 / 父親
  3. 爸爸 / 爸爸
  4. 父親 / 父親
點我看解答(請認真思考後再看解答)

答案是:「3」
透過 JSON.parse() 出來的資料是一個物件,所以物件會有傳參考特性

第十題

請問這三次的 console.log() 分別為多少?

1
2
3
4
5
6
var a = { x: 1 }
var b = a = { y: 2 };
console.log('第一次:' + a.y);
b.y = 3;
console.log('第二次:' + a.y);
console.log('第三次:' + b.y);
  1. 第一次: 2 / 第二次: 3 第三次: 3
  2. 第一次: 1 / 第二次: 2 第三次: 3
  3. 第一次: 1 / 第二次: 3 第三次: 2
  4. 第一次: 2 / 第二次: 3 第三次: 1
點我看解答(請認真思考後再看解答)

答案是:「1」
因為等號運算子先從右邊開始賦予,所以 a 原本的 { x:1 } 直接被重新賦值,所以從一開始就都是 { y:2 },而後面就是物件傳參考特性導致變成 {y : 3}

參考文獻