indexOf() ๋ฉ์๋๋ ๋ฐฐ์ด์์ ์ง์ ๋ ์์๋ฅผ ์ฐพ์ ์ ์๋ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๊ณ ์กด์ฌํ์ง ์์ผ๋ฉด -1์ ๋ฐํํฉ๋๋ค.
let arr = ["welcome", "to", "My", "blog"];
console.log(arr.indexOf("to")); // 1
console.log(arr.indexOf("blog")); // 3
console.log(arr.indexOf("useong")); // -1
๊ฐ์ ์ธ๋ฑ์ค ๊ฐ์ ๋ฐํํ๊ณ , ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์๊ฐ ์์ผ๋ฉด -1 ์ ๋ฐํํ๋ค!
ํด๋น ๋ฐ์ดํฐ ์ฃผ์๋ฅผ ์ฐพ์์ ๊ฐ์ ๋ณ๊ฒฝํจ
๋ํ์ ์ธ ๋ฉ์๋ : pop(), push(), shift(), unshift(), splice(), reverse(), sort()
push()๋ฅผ ์ด์ฉํด์ ์ฃผ์๊ฐ์ด ๋์ผํ ๋ฐฐ์ด์ ๊ฐ์ฅ ๋ง์ง๋ง์์์ ์ธ์๊ฐ์ ๋ฃ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํ์.
let arr = ["welcome", "to", "My", "blog"];
//1๋ฒ์งธ ํจ์
function newArr1(arr, el) {
return arr.push(el);
}
//2๋ฒ์งธ ํจ์
function newArr2(arr, el) {
arr.push(el);
return arr;
console.log(newArr1, "useong"); // 5
console.log(newArr2, "useong"); // ["welcome","to","My","blog","useong"]
}
์ด๋ฌํ ์ฐจ์ด๋ฅผ ๋ณด์ด๋ ์ด์ ๋ mutable(์ฐธ์กฐํ์ )์ ์ง์ ๋ณ๊ฒฝ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. push ๋ฉ์๋๋ ์ฃผ์ด์ง ๊ฐ์ผ๋ก ์ ๋ ฅํ๋ ๊ฒ์ ์ด๋์์ ์์ํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด length ์์ฑ์ ์์กดํ๋ค.
๊ทธ๋ ๊ธฐ๋๋ฌธ์, 2๋ฒ์งธ ํจ์์ฒ๋ผ ์ง์ ๋ณ๊ฒฝ์ ํด์ฃผ๊ณ ๋ฐํ์ ํ๊ฒ ๋๋ฉด ์ํ๋ ๊ฐ์ ์ป์ ์ ์๋ค.
ํด๋น ๋ฐ์ดํฐ ์ฃผ์์ ๋ค๋ฅธ ์๋ก์ด ์ฃผ์(์๋ก์ด ๋ฐฐ์ด)์ ๊ฐ์ด ํ ๋น
๋ํ์ ์ธ ๋ฉ์๋ : slice(), concat(), join(), reduce(), map(), includes()
slice()๋ฅผ ์ฌ์ฉํด์ ๋ฐฐ์ด๊ณผ ์ธ๋ฑ์ค๋ฅผ ์ ๋ ฅ๋ฐ์ ์ฃผ์ด์ง ์ธ๋ฑ์ค ์ดํ์ ์์๋ค์ ๊ฐ๋ ์๋ก์ด ๋ฐฐ์ด์ ๊ฐ์ ธ์ค์.
let arr = ["hello", "welcome", "to", "My", "blog"];
//1๋ฒ์งธ ํจ์
function newArr1(arr, n) {
return arr.slice(n);
}
//2๋ฒ์งธ ํจ์
function newArr2(arr, n) {
arr.slice(n);
return arr;
console.log(newArr1, 1); // ["welcome", "to", "My", "blog"]
console.log(newArr2, 1); // ["hello", "welcome", "to", "My", "blog"]
}
์ด ๋์ ์ฐจ์ด๋ ๋ญ๊น ?
์ฒซ๋ฒ์งธ ํจ์๋ slice๊ฐ immutable ํ๊ธฐ ๋๋ฌธ์ ์๋ณธ ๋ฐฐ์ด์ ๋ฐ๋ก ์๊ณ , ์๋ก์ด ๋ฐฐ์ด์ ์๋ก์ด ์์๋ฅผ ๋ด์์ ๋ฆฌํด์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ํ๋ ๊ฐ์ ์ป์ ์ ์์๋ค.
์๋ณธ๋ฐฐ์ด์ ๋ฐ๋ก ์๊ณ , ์ฃผ์๊ฐ๋ ๋ค๋ฅธ ์๋ก์ด ๋ฐฐ์ด์ ๋ฆฌํดํ ๊ฒ์ด๋ค. (์์ ๋ณต์ฌ์ ๊ฐ๋ )
๊ทธ๋ ๋ค๋ฉด, ๋๋ฒ์งธ๋ ๋ณํจ์์ด ๊ทธ๋๋ก ๋ฆฌํด์ด ๋์์๊น?
๋๋ฒ์งธ๋ ๊ทธ๋ฅ arr ์ ๋ฐํํ ๊ฒ์ด๋ ๋ค๋ฆ์ด ์๋ค. arr.slice(n) ์ arr ๋ ๋ค๋ฅธ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ค. ๋ด์ผ์ ๊ฐ์ฒด์ ๋ํด์ ๋ค๋ค๋ณผ ์์ ์ธ๋ฐ, ์ค๋ ์๊ฒ ๋ ์ง์์ด ์์ด์ ์ ๊น ๋ธ๋ก๊น ์ ํ๋ ค๊ณ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด(Array)์ ๊ฐ์ฒด(Object)์ ์ผ์ข ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
๋ ์ฝ๊ฒ ๋งํด, ๋๋ฒ๋ง์ด๋์ด ์์ฐจ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ ๊ฐ์ฒด(Object)๋ฅผ ๋ฐฐ์ด(Array)์ด๋ผ ํ๋ค.
๊ฐ์ฒด์๋ ๋ชจ๋ ์์ฑ์ ์ง๋ ์ํ ๊ฐ์ฒด(Object.prototype) ๊ฐ ์๋๋ฐ,
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด ์ํ ๊ฐ์ฒด์ ์์ฑ์ ๊ฐ์ ธ์์(์ฐธ์กฐํ์ฌ) ๋ฐฐ์ด์ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์์ฑ์ ์ด๋ฆฌ์ ๋ฆฌ ๋ฐ๊พผ ๋ฐฐ์ด ์ํ ๊ฐ์ฒด(Array.prototype)๋ฅผ ๋ฐ๋ก ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋ฌ๋ฉด ๋ฐฐ์ด ์ํ ๊ฐ์ฒด๊ฐ, ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค ์ ์๊ฒ ๋๋ ๊ฒ ์ด๋ค.
์ด๋ฐ ๊ณผ์ ์ ๋์ด์ผ๋ณด๋ฉด, ๊ฒฐ๊ตญ โ๋ฐฐ์ด์ ๋ง์ ์์ฑ์ ๊ฐ์ฒด์ ๋ค๋ฅผ๋ฐ๊ฐ ์๊ณ , Object.prototype์ ์ต์ข ์ข ์ฐฉ์ง๋ก ๊ฐ์ง๊ธฐ ๋๋ฌธ์, object, array, function์ ์ฌ์ค ๊ฐ์ฒด ๋ผ๋ ๋ง์ ํ๊ณ ๋ ํ๋ค.
๋ค๋ง, ์ค์ง์ ์ผ๋ก ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๋ค๋ฅธ ์๋ฃ ํํ๋ก ์ฌ์ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๋ฉ ์์ ์ด๋ฐ ๋ฏธ๋ฌํ ์ ๊น์ง ๊ตฌ๋ถํ๊ณ ์ฐพ์์ ํด์ผ ํ๋ ์ผ์ ๋ง์ง ์๋ค.
์ด ๋ถ๋ถ์ ๋ํด์ ๋ ๊ณต๋ถํ๊ธฐ ์ํด์ OOP๋ ๋ฐ๋ก ๊ฒ์ํด๋ด์ผ๊ฒ ๋ค!
๐ ๋ด์ผ์ TIW(today I Will)
๊ฐ์ฒด(Object), ์ค์ฝํ(Scope), ํด๋ก์ (Closure)