Object
- one of the JavaScriptโs data types.
- a collection of related date and/or functionality.
- Nearly all objects in JavaScript are instances of Object.
function print(name,age) {
console.log(name);
console.log(age);
}
ํจ์์ parameter์ ์ด๋ ๊ฒ ์์ฑํ ๊ฒฝ์ฐ, ์ธ์๊ฐ ๋ง์์ง๋ฉด ์ถ๊ฐํด์ผํ๋ ๊ฒ๋ค์ด ๋ง์์ง๋ค.
๋ก์ง์ปฌํ๊ฒ ๋ฌถ์ด์ ์๊ฐํ ์๋ ์์!
์ด๊ฑธ ๊ฐ์ ํ๊ณ ์ ์ฐ๋ ๊ฒ์ด Object โญ๏ธ
function print(person) {
console.log(person.name);
console.log(person.age);
}
const ellie = { name: 'ellie', age: 4 };
print(ellie);
- Literals and Properties
const obj1 = {}; // 'object literal' syntax
const obj2 = new Object(); // 'object constructor' syntax
new command๋ฅผ ๋ฃ์ด์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด, Object์์ ์ ์๋ constructor๊ฐ ํธ์ถ๋๋ค!
const ellie = { name: 'ellie', age: 4 };
print(ellie);
ellie.hasJob = true;
console.log(ellie.hasJob); // true
delete ellie.hasJob;
console.log(ellie.hasJob); // undefined
JS๋ ํ์ ์ด runtime(ํ๋ก๊ทธ๋จ์ด ๋์ํ๊ณ ์์ ๋)์ ๊ฒฐ์ ๋๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๊ฒ๋ ๊ฐ๋ฅํจ.
- Computed properties
์ ํํ๊ฒ ์ด๋ค key๊ฐ ํ์ํ์ง ๋ชจ๋ฅผ๋, ์ฆ runTime์์ ๊ฒฐ์ ๋ ๋ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ
์ฝ๋ฉํ ๋์๋ . ๋ฌธ๋ฒ์ผ๋ก ๋ถ๋ฌ์ค๋ ๊ฒ ๋ง์!
console.log(ellie.name); // ellie
console.log(ellie['name']); // ellie
ellie['hasJob'] = true;
console.log(ellie['hasJob']); // true
object ์์์๋ ๋ณ์์ ์ด๋ฆ์ string ํํ๋ก ๋ฐ์์ฌ ์ ์๋ค
- object์ property๋ฅผ . ๋ฌธ๋ฒ์ ์ด์ฉํด์ ์ ๊ทผ์ ํ ์ ์๊ณ
- ๋๋ computed properties ๋ฌธ๋ฒ์ผ๋ก ๋ฐฐ์ด์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ฏ์ด ์ ๊ทผํ ์ ์๋ค
๋จ, computed properties๋ก ๋ฐ์์ฌ ๋ key๋ ํญ์ stringํ์ ์ ์ง์ ํด์ ๋ฐ์์์ผํ๋ค!
- Property value shorthand
key์ value์ ์ด๋ฆ์ด ๋์ผํ๋ค๋ฉด ์๋ตํ ์ ์๋ค.
const Person1 = { name : 'bob', age: 2 };
const Person2 = { name : 'steve', age: 3 };
const Person3 = { name : 'dave', age: 4 };
const Person4 = Person('ellie',30);
console.log(person4);
function Person(name, age) {
return {
name,
age
}
}
Person1,2,3์ฒ๋ผ ๋์ผํ key์ value๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ ๋ฌํ๋ ๊ฒ์
=> ํจ์จ์ ์ผ๋ก ๊ฐ๋ง ๋ฃ์ผ๋ฉด ์ถ๋ ฅ๋๊ฒ ๋ณ๊ฒฝ.
class template๊ณผ ๋์ผํ ๊ตฌ์กฐ. class๊ฐ ์์์ ๋๋ ์ด๋ ๊ฒ ์์ฑํ๋ค.
- Constructor function
function Person(name, age) {
// this = {};
this.name = name,
this.age = age
// return this;
}
const Person4 = new Person('ellie',30);
์ด๋ ๊ฒ ๋ค๋ฅธ ๊ณ์ฐ์ ํ์ง ์๊ณ , ์์ํ๊ฒ object๋ฅผ ์์ฑํ๋ ํจ์๋ค์ ๋ณดํต ๋๋ฌธ์๋ก ์์ํ๋ค.
return๋ ํ์ง ์๊ณ ์ด๋ ๊ฒ class์ฒ๋ผ this๋ฅผ ์ฌ์ฉํ๋ค.
ํธ์ถ ์์๋ class์์ ์๋ก์ด object๋ฅผ ๋ง๋๋ ๊ฒ์ฒ๋ผ, new๋ก ํธ์ถํ ์ ์๋ค.
- in operator : property existance check (key in obj)
: ๊ฐ๋จํ๊ฒ key์ ์ ๋ฌด๋ฅผ ํ์ธํ ์ ์๋ ํค์๋, ์๋ค๋ฉด true, ์๋ค๋ฉด false
console.log('name' in ellie); // true
console.log('age' in ellie); // true
console.log('random' in ellie); // false
console.log(ellie.random); // undefined
- forโฆin vs forโฆof
- for (key in obj)
for (key in ellie) {
console.log(key);
}
ellie๊ฐ ๊ฐ์ง๊ณ ์๋ key๋ค์ด, ๋ธ๋ญ์ ๋ ๋๋ง๋ค key๋ผ๋ ์ง์ญ๋ณ์์ ํ ๋น์ด ๋๋ค!
๋ชจ๋ ํค๋ค์ ๋ฐ์์์ ์ผ์ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋ for in ์ ์ฌ์ฉํ๋ฉด ์ข๋ค.
-
- for (value of iterable)
- ๋ฐฐ์ด๊ณผ ๊ฐ์ ๋ฆฌ์คํธ, ์์ฐจ์ ์ผ๋ก Iterableํ ๊ฒ๋ค์ ์ด๋ค.
const array = [1,2,3,4,5];
for(let i = 0; i < array.lenth; i++) {
console.log(value);
}
์ด๊ฒ ๋ณด๋ค๋ ํจ์ฌ ๊ฐ๋จํ for of
for(value of array) {
console.log(value);
}
-
- Fun Cloning
- Object.assign(dest, [obj1,obj2,obj3โฆ])
const user = {name: 'ellie', age:'20'};
const user2 = user;
- ๋ฐ๊พธ์ง ์๊ณ ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ?
- old way
const user3 = {};
for(let i = 0; i < user.length; i++) {
user3[key] = user[key];
}
console.log(user3);
- Object.assign
// const user4 = {};
// user4 = Object.assign(user); ๋น ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์, ์๋์ฒ๋ผ ์ค์ผ ์ ์์
const user4 = Object.assign({ }, user );
console.log( user4 );
- ๋ค๋ฅธ ์์
const fruit1 = {color : 'red'};
const fruit2 = {color : 'blue', size:'big'};
const mixed = Object.assign({},fruit1, fruit2);
console.log(mixed.color); // blue
console.log(mixed.size); // big
์์ ๋์ผํ property๊ฐ ์๋ค๋ฉด, ๊ฐ์ด ๊ณ์ ๋ฎ์ด์์์ง๋ค
Array์ API
- array์ object์ ์ฐจ์ด์ !
- Declaration
const arr1 = new Array();
const arr2 = [1,2];
- Index position
const fruits = ['๐','๐'];
console.log(fruits);
console.log(fruits.length);
console.log(fruits[0]); //๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ๋
console.log(fruits[1]);
console.log(fruits[2]); //undefined
console.log(fruits[fruits.length - 1]); //๋ฐฐ์ด์ ๋ง์ง๋ง ๊ฐ์ฒด๋ฅผ ์ฐพ์ ๋
- Looping over an array
a. for loop
for(let i = 0; i < fruits.length; i ++){
console.log(fruits[i]);
}
b. for of loop
for (fruit in fruits) {
console.log(fruits[fruit])
}
c. for Each loop
fruits.forEach(function(fruit, index, array) {
console.log(fruit,index,array);
});
// anonymous function์ arrow function์ผ๋ก ์ถ์ฝ ๊ฐ๋ฅ
fruits.forEach((fruit, index) => {
console.log(fruit,index);
});
- Performs the specified action for each element in an array. array์ ๋ค์ด์๋ ๊ฐ๊ฐ์ ์๋ฆฌ๋ฉํธ์ ์ ํด์ง ์ก์ ์ ์ํํ๋ ํจ์
๋ฐฐ์ด์ ๋ค์ด์๋ ๊ฐ ๋ง๋ค ์ฐ๋ฆฌ๊ฐ ์ ๋ฌํ ์ก์ =์ฝ๋ฐฑํจ์๋ฅผ ์คํํ๋ค
- Addition, deletion, copy
a. push : add an item to the end ๋์ ์ถ๊ฐ
fruits.push('๐','๐');
b. pop : remove an item from the end ๋งจ ๋์ ์์ดํ ์ ์ญ์
fruits.pop();
fruits.pop();
c. unshift : add an item to the beginning
fruits.unshift('๐','๐'); // ๋ฐฐ์ด์ ์์ ์์ดํ
์ถ๊ฐ
d. shift : remove an item from the beginning
fruits.shift(); // ๋ฐฐ์ด์ ์์์๋ถํฐ ์์ดํ
์ ์ญ์
โญ๏ธ ์ค์ โญ๏ธ
shift, unshift are slower than pop, push!
e. splice : remove an item by index position splice(index, count)
fruits.push('๐','๐','๐');
console.log(fruits);
fruits.splice(1,1); // 1๋ฒ ์ธ๋ฑ์ค์์ 1๊ฐ๋ง.
fruits.splice(1); //์ํ๋ ์ธ๋ฑ์ค๋ง ์ง์ ํ๊ณ ๊ฐฏ์๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด, ๊ทธ ์ธ๋ฑ์ค ๋ค์ ์์ดํ
์ ์น ์ง์ด๋ค
console.log(fruits);
fruits.splice(1,1,'๐','๐');
// ์ง์ฐ๊ณ ๋์ ๊ทธ์๋ฆฌ์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
fruits.splice(1,0,'๐','๐');
// ์ง์ฐ์ง ์๊ณ ! ๊ทธ ์๋ฆฌ ๋ค์๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
f. concat combine two arrays ์๋ก ๋ฌถ์ฌ์ง ๋ฐฐ์ด์ด ํฉ์ณ์ ธ์ ์๋ก ๋ฆฌํด๋จ.
const fruits2 = ['๐','๐ฅ'];
const newFruits = fruits.concat(fruits2);
console.log(newFruits);
- Searching
a. indexOf : find the index
console.log(fruits);
console.log(fruits.indexOf('๐')); // 0
console.log(fruits.indexOf('๐')); // 3
console.log(fruits.indexOf('๐ฅ')); // -1 ํด๋น ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด -1์ ์ถ๋ ฅ
b. includes
console.log(fruits.includes('๐')); //true
console.log(fruits.includes('๐ฅ')); //false
c. lastIndexOf lastIndexOf : ๋ค์์๋ถํฐ ๊ฒ์ indexOf : ์์์๋ถํฐ ๊ฒ์
fruits.push('๐');
console.log(fruits); //['๐','๐','๐','๐','๐','๐'];
console.log(fruits.indexOf('๐')); // 0
console.log(fruits.lastIndexOf('๐')); // 5