์ด ๊ธ์ ๊ณ ํ์ค, ์กํ์ฃผ ๋์ ์ธ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ์ฐธ์กฐํ์ฌ ์์ฑํ ๊ธ์ ๋๋ค.
JavaScript ๋ฐ์ดํฐ ํ์ ๊ณผ ์ฐ์ฐ์ (๊ณ์)#
์ฐธ์กฐ ํ์ (๊ฐ์ฒด ํ์ )#
for in ๋ฌธ๊ณผ ๊ฐ์ฒด ํ๋กํผํฐ ์ถ๋ ฅ#
for in ๋ฌธ์ ์ฌ์ฉํ๋ฉด, ๊ฐ์ฒด์ ํฌํจ๋ ๋ชจ๋ ํ๋กํผํฐ์ ๋ํด ๋ฃจํ๋ฅผ ์ํํ ์ ์๋ค .
// ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ํตํ foo ๊ฐ์ฒด ์์ฑvar foo = { name: 'foo', age: 30, major: 'computer science',};
// for in ๋ฌธ์ ์ด์ฉํ ๊ฐ์ฒด ํ๋กํผํฐ ์ถ๋ ฅfor (var prop in foo) { console.log(prop, foo[prop]);}[์ถ๋ ฅ ๊ฒฐ๊ณผ]
name fooage 30major computer sciencefor in ๋ฌธ์ด ์ํ๋๋ฉด์ prop ๋ณ์์ foo ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ํ๋์ฉ ํ ๋น๋๊ณ , prop ์ ํ ๋น๋ ํ๋กํผํฐ์ ์ด๋ฆ์ ํตํด์ foo[prop] ์ ๊ฐ์ด ๋๊ดํธ ํ๊ธฐ๋ฒ์ ์ด์ฉํด ํ๋กํผํฐ ๊ฐ์ ์ถ๋ ฅํ๋ค.
๊ฐ์ฒด ํ๋กํผํฐ ์ญ์ #
JS ์์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ delete ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ์ฆ์ ์ญ์ ํ ์ ์๋ค.
์ฃผ์ํ ์ ์ delete ์ฐ์ฐ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ญ์ ํ ๋ฟ, ๊ฐ์ฒด ์์ฒด๋ฅผ ์ญ์ ํ์ง๋ ๋ชปํ๋ค๋ ๊ฒ์ด๋ค.
// ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ํตํ foo ๊ฐ์ฒด ์์ฑvar foo = { name: 'foo', nickname: 'babo',};
console.log(foo.nickname); // (์ถ๋ ฅ๊ฐ) babodelete foo.nickname; // (์ถ๋ ฅ๊ฐ) nickname ํ๋กํผํฐ ์ญ์ console.log(foo.nickname); // (์ถ๋ ฅ๊ฐ) undefined
delete foo; // (์ถ๋ ฅ๊ฐ) foo ๊ฐ์ฒด ์ญ์ ์๋console.log(foo.name); // (์ถ๋ ฅ๊ฐ) foo์ฐธ์กฐ ํ์ ์ ํน์ฑ#
์๋ฐ ์คํฌ๋ฆฝํธ์์๋ ๊ธฐ๋ณธ ํ์ ์ธ ์ซ์, ๋ฌธ์์ด, boolean, null, undefined 5๊ฐ์ง๋ฅผ์ ์ธํ ๋ชจ๋ ๊ฐ์ ๊ฐ์ฒด๋ค. ๋ฐฐ์ด์ด๋ ํจ์ ๋ํ ๊ฐ์ฒด๋ก ์ทจ๊ธ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๊ฐ์ฒด๋์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฐธ์กฐ ํ์ ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ฐ์ฒด์ ๋ชจ๋ ์ฐ์ฐ์ด ์ค์ ๊ฐ์ด ์๋ ์ฐธ์กฐ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ด๋ค.
var objA = { value: 40,};var objB = objA;
console.log(objA.value); // 40console.log(objB.value); // 40
objB.value = 50;
console.log(objA.value); // 50console.log(objB.value); // 50
var a = 40;var b = a;
console.log(a);console.log(b);
b = 50;
console.log(a);console.log(b);objA ๋ ๊ฐ์ฒด ์์ฒด๋ฅผ ์ ์ฅํ๊ณ ์๋ ๊ฒ์ด ์๋๋ผ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๊ฐ์์ ์ฅํ๊ณ ์๋ค.
objB ์ objA ๋ฅผ ํ ๋นํ ๋ ์ฐธ์กฐ๊ฐ์ด objB ์ ์ ๋ฌ๋๊ณ , objB ์ objA ๊ฐ๋์ผํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋์ด objB.value ์ ๊ฐ์ 50์ผ๋ก ๊ฐฑ์ ํ์ objA.value ์๊ฐ๋ 50์ผ๋ก ๊ฐฑ์ ๋๋ค.
๋ฐ๋ฉด ๊ฐ์ฒด๊ฐ ์๋ ๊ธฐ๋ณธ ํ์
์ธ a , b ์ ๊ฒฝ์ฐ๋ b ์ a ๋ฅผ ํ ๋นํ ๋, ์ฐธ์กฐ๊ฐ์ด ์ ๋ฌ๋๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ์ด ๋ณต์ฌ๋๋ค. ๋ฐ๋ผ์ b ๋ฅผ 50์ผ๋ก ๊ฐฑ์ ํด๋ a ์ ๊ฐ์ 40์ผ๋ก ์ ์ง๋๋ค.
Call by value vs Call by reference
๊ฐ์ฒด ๋น๊ต ( == )#
๋๋ฑ ์ฐ์ฐ์( == )๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ ๋๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ์ด ์๋ ์ฐธ์กฐ๊ฐ์ ๋น๊ตํ๋ค.
var objA = { value: 100,};
var objB = { value: 100,};
var objC = objB;
console.log(objA.value == objB.value); // trueconsole.log(objA == objB); // falseconsole.log(objB == objC); // trueobjA.value ์ objB.value ๋ฅผ ๋๋ฑ ์ฐ์ฐ์( == )๋ก ๋น๊ตํ๋ฉด, true ๊ฐ ๋๋๋ฐ์ด ๋์ ๊ธฐ๋ณธ ํ์
์ผ๋ก ๊ฐ ์์ฒด๋ฅผ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ฉด objA ์ objB ๋ ๊ฐ์ ํ๋กํผํฐ ๊ฐ์ ๊ฐ๊ณ ์์ง๋ง, ๋ค๋ฅธ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋์ ์ฐธ์กฐ๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ false ๊ฐ ์ถ๋ ฅ๋๋ค.
objC ๋ objB ์ ์ฐธ์กฐ๊ฐ์ ๋ณต์ฌํด์๊ธฐ ๋๋ฌธ์, true ๊ฐ ์ถ๋ ฅ๋๋ค.
ํ์ค ๋์น (
==) vs ์๊ฒฉ ๋์น (===)
== : ๋ ํผ์ฐ์ฐ์์ ์๋ฃํ์ด ๊ฐ์ง ์์ ๊ฒฝ์ฐ ๊ฐ์์ง๋๋ก ๋ณํํ ํ, ๋น๊ต๋ฅผ ์ํํ๋ค. ๋ชจ๋ ๊ฐ์ฒด๋ผ๋ฉด ์ฐธ์กฐ๋ฅผ ๋น๊ตํ๋ค. - ์ซ์์ ๋ฌธ์์ด ๋น๊ต์์ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ๊ฐ๊น์ด Number *์๋ฃํ ๊ฐ์ผ๋ก ๋ฐ์ฌ๋ฆผํ๋ค.
- ํ๋์ ์ฐ์ฐ์๊ฐ*
Boolean์ธ ๊ฒฝ์ฐtrue๋ 1,false๋ 0์ผ๋ก๋ณํํ๋ค. - ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด์ด๋ ์ซ์์ ๋น๊ตํ๋ ๊ฒฝ์ฐ, ์ฐ์ฐ์๋ ์ฐ์ ๊ฐ์ฒด์valueOf()๋๋toString()๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ฌธ์์ด ํน์ ์ซ์ ๊ฐ์ ๋ฐ์ผ๋ ค ์๋ํ๋ค.
=== : ์๋ฃํ ๋ณํ ์์ด ๋ ์ฐ์ฐ์๊ฐ ์๊ฒฉํ ๊ฐ์์ง ํ๋ณํ๋ค. ๋ชจ๋ ๊ฐ์ฒด๋ผ๋ฉด ์ฐธ์กฐ๊ฐ ๋น๊ตํ๋ค.
- ๐ MDN web docs - ๋น๊ต ์ฐ์ฐ์ ์์
์ฐธ์กฐ์ ์ํ ํจ์ ํธ์ถ ๋ฐฉ์#
๊ธฐ๋ณธ ํ์ ๊ณผ ์ฐธ์กฐ ํ์ ์ ๊ฒฝ์ฐ๋ ํจ์ ํธ์ถ ๋ฐฉ์๋ ๋ค๋ฅด๋ค.
๊ธฐ๋ณธ ํ์ ์ ๊ฒฝ์ฐ๋ ๊ฐ์ ์ํ ํธ์ถ ๋ฐฉ์์ผ๋ก ํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋ณต์ฌ๋ ๊ฐ์ด์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ํจ์ ๋ด๋ถ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํด ๊ฐ์ ๋ณ๊ฒฝํด๋ ์ค์ ๋ก ํธ์ถ๋ ๋ณ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง๋ ์๋๋ค.
์ฐธ์กฐ ํ์ ์ ๊ฒฝ์ฐ ์ฐธ์กฐ์ ์ํ ํธ์ถ ๋ฐฉ์์ผ๋ก ์ธ์๋ก ์ฐธ์กฐ ํ์ ์ธ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ๊ฒฝ์ฐ, ์ธ์๋ก ๋๊ธด ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ์ด ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ํจ์ ๋ด๋ถ์์ ์ฐธ์กฐ๊ฐ์ ์ด์ฉํด์ ์ค์ ๊ฐ์ฒด์ ๊ฐ์ ๋ณ๊ฒฝํ๋ค.
var a = 10;var objA = { value: 10,};
function changeArg(num, obj) { num = 20; obj.value = 20;
console.log(num); // 20 console.log(obj.value); // 20}
changeArg(a, objA);
console.log(a); // 10 (๋ฐ๋์ง ์์)console.log(objA.value); // 20 (๋ฐ๋)