문자
.indexOf(): 지정된 요소가 몇번째에 있는지를 알 수 있는 메소드로 요소가 없다면 -1로 출력된다.
const result = 'Hello world!'.indexOf('Korea!')
console.log(result) // 결과는 -1로 나옴.
.slice(): 문자열의 일부를 추출하면서 새로운 문자열을 반환해주는 메소드다.
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2, 4)); // camel과 elephant가 추출된다.
console.log(animals.slice(-1) // -1은 제일 마지막인 elephant만 추출된다.
.replace('변경하고 싶은 부분', '변경할 문구'): 원하는 부분을 대체할 수 있는 메소드다.
const str = 'Hello world!'
console.log(str.replace(' world!', ' Korea!'))
// Hello Korea!로 출력된다.
// 만약 replace를 통해 글을 지우고싶다면 뒤에 아무 인수도 안 넣어주면 된다.
console.log(' world', '')
.match(): 문자열이 정규식과 매치되는 부분을 검색하는 메소드다.
.trim(): 공백문자들을 없애주는 메소드다.
const greeting = ' Hello world! ';
console.log(greeting.trim());
// 공백없이 Hello world!로 출력된다.
숫자와 수학
const pi = 3.14159265358979;
const str = pi.toFixed(2);
console.log(str); // 3.14가 출력된다.
const str = pi.toFixed(2); // 3.14
const integer = parseInt(str);
console.log(integer); // 정수인 3이 출력된다.
const str = pi.toFixed(2); // 3.14
const float = parseFloat(str);
console.log(float); // 3.14로 출력된다.
cosole.log(typeof float); // number로 출력된다.
console.log(Math.abs(-12)) // 양수인 12가 추출된다.
// 만약 양수인 12가 들어간다면 그대로 12가 추출된다.
console.log(Math.ceil(3.14)) // 4로 출력된다.
console.log(Math.floor(3.14)) // 3이 출력된다.
console.log(Math.round(3.5)) // 4로 출력된다.
배열
.length: 배열의 길이를 반환한다.
const fruits = ['Apple', 'Banana', 'Cherry']
console.log(fruits.length) // 3이 출력된다.
console.log([].length) // 0이 출력된다. 0이 나왔다는것은 배열이 없다는 의미이다.
.concat(): 두개에 배열데이터를 병합해서 새로운 배열데이터를 반환해주는 메소드이다. 원본은 손상되지않는다.
.forEach(): 주어진 함수를 배열 요소 각각에 대해 실행하는 메소드다.
const array1 = ['a', 'b', 'c'];
array1.forEach(element => console.log(element));
// 첫번째: "a"
// 두번째: "b"
// 세번째: "c"
※ 매개변수이름은 원하는 이름으로 작성하면된다.
.map(): 콜백에서 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환하는 메소드다.
.filter(): 특정한 기준에 대한 필터링 된 결과를 나오게 해주는 메소드이며 원본은 훼손하지않는다.
const numbers = [1, 2, 3, 4]
const b = numbers.filter(number => number < 3)
console.log(b) // [1, 2]만 출력된다.
.find(): 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환하며 요소가 없을때는 undefined로 반환된다.
const array1 = [5, 12, 8, 130, 44];
const found = array1.find(element => element > 10);
console.log(found); // 12가 출력된다.
.findIndex(): 주어진 판별 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스를 반환하는 메소드이다.
const array1 = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array1.findIndex(isLargeNumber)); // 3이 출력된다.
.includes(): 인수가 해당배열에 들어있는지를 확인해주는 메소드이다.
.push(): 배열 맨 뒤쪽에 특정한 데이터를 삽입해주는 메소드이다. 원본이 수정되니 주의할 것!
const numbers = [1, 2, 3, 4]
numbers.push(5)
console.log(numbers) // [1,2,3,4,5]
.unshift(): 배열에 맨 앞쪽에 특정한 데이터를 삽입해주는 메소드이다. 원본이 수정되니 주의할 것!
const numbers = [1, 2, 3, 4]
numbers.unshift(0)
console.log(numbers) // [0,1,2,3,4]
.reverse(): 배열의 순서를 반전해주는 메소드이다. 원본이 수정되니 주의할 것!
.splice(): 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경해주는 메소드이다. 원본이 수정되니 주의할 것!
const numbers = [1, 2, 3, 4]
const fruits = ['Apple', 'Banana', 'Cherry']
numbers.splice(2, 1)
console.log(numbers) [1, 2, 4]로 출력된다.
// numbers.splice(2, 0) -> 뒤에 0이 들어가는건 아무것도 지우지않는다는 것을 의미
// numbers.splice(2, 0, 999) // 3번째 자리에 999를 넣는다는 것을 의미
// numbers.splice(2, 1, 99) // 3번째 자리에 3을 뺴고 99를 넣는다는 것을 의미
fruits.splice(2, 0, 'Orange')
console.log(fruits)
// ['Apple', 'Banana','Orange', 'Cherry']가 출력된다.
// 문자도 삭제 또는 추가가 가능하다.
객체
const userAge = {
// key: value
name: 'Heropy',
age: 85
}
const userEmail = {
name: 'Heropy',
email: 'thesecon@gmail.com'
}
const target = Object.assign(userAge, userEmail)
console.log(target)
// userAge와 userEmail에서 중복되는 값을 뺀 나머지값이 출력된다.
const target = Object.assign({}, userAge, userEmail)
// 앞쪽에 {}이 뒤에 있는 속성들을 흡수하여 새로운 객체데이터를 만들 수 있다.
console.log(target === userAge)
// target은 새로운 객체데이터가 되었기 때문에 false로 출력된다.
const user = {
name: 'Heropy',
age: 85,
email: 'thesecon@gmail.com'
}
const keys = Object.keys(user)
console.log(keys)
// ['name', 'age', 'email']로 출력됨.
구조 분해 할당(= 비구조화 할당)
const fruits = ['Apple', 'Banana', 'Cherry', 'Orange']
const [a, b, ...fruit] = fruits
console.log(fruit) // ['Cherry', 'Orange]가 출력됨.
전개 연산자(Spread)
객체나 배열의 값을 하나 하나 넘기는 용도로 사용할 수 있으며 사용된다.
const fruits = ['Apple', 'Banana', 'Cherry', 'Orange']
const toObject = (a, b, ...c) => ({ a, b, c })
console.log(toObject(...fruits)) // ...이 전개 연산자의 작성방법임.
// {a: 'Apple', b: 'Banana', c: Array(2)}로 출력됨.
데이터 불변성
let a = 1
let b = 4
console.log(a, b, a === b) // 1 4 false
b = a
console.log(a, b, a === b) // 1 1 true
a = 7
console.log(a, b, a === b) // 7 1 false
let c = 1
console.log(b, c, b === c) // 1 1 true
얕은 복사와 깊은 복사
얕은 복사(Shallow Copy): 객체의 참조값(주소 값)을 복사하는 것.
let a = {name:'빨간 사과'};
let b = a;
a.name = '초록 사과';
console.log(a); // '초록 사과'
console.log(b); // '초록 사과'
// 해당데이터의 메모리를 전달하게 되면서 데이터를 공유하기 때문에 값이 같이 변경된다.
깊은 복사(Deep Copy): 객체의 실제 값을 복사하는 것.
let a = '빨간 사과';
let b = a;
a = '초록 사과';
console.log(a); // '초록 사과'
console.log(b); // '빨간 사과'
// 복사 시 독립적인 메모리를 만들어내기 때문에 a가 재할당 되더라도 b는 영향을 받지 않는다.
가져오기 & 내보내기
내보내기(export)
export function random() {
return Math.floor(Math.random() * 10)
} // Named export는 이름을 맘대로 지정할 수 있으며 여러번 사용이 가능하다.
export default 123 // export default는 여러번 사용이 불가능하다.
가져오기(import)
import random from './getrandom'
import * as R from './getRandom'
// *를 와일드카드라고 부름, getRandom 안에 모든 정보를 가지고 오고 싶을 때 사용한다.
Lodash: 일반적인 유틸 함수들을 모아서 제공해주는 라이브러리다.
_.uniqBy(데이터, 기준값): 기준값을 통해 중복되는 값은 뺀 값들을 반환해주는 메소드이다. 배열데이터가 하나일 때만 사용한다.
const userA = [
{ userId: '1', name: 'HEROPY'},
{ userId: '2', name: 'Neo'}
]
const userB = [
{ userId: '1', name: 'HEROPY'},
{ userId: '3', name: 'Amy'}
]
const usersC = userA.concat(userB)
console.log('concat', usersC)
console.log('uniqBy', _.uniqBy(usersC, 'userId'))
// 결과
0: {userId: '1', name: 'HEROPY'}
1: {userId: '2', name: 'Neo'}
2: {userId: '3', name: 'Amy'}
_.unionBy(데이터1, 데이터2, 기준값): 합치기 전의 데이터들을 합쳐서 중복 되는 값을 제거한 값들을 반환해주는 메소드이다. 배열이 여러개일 때 사용한다.
const userA = [
{ userId: '1', name: 'HEROPY'},
{ userId: '2', name: 'Neo'}
]
const userB = [
{ userId: '1', name: 'HEROPY'},
{ userId: '3', name: 'Amy'}
]
const usersD = _.unionBy(userA, userB, 'userId')
console.log('unionBy', usersD)
// 결과
0: {userId: '1', name: 'HEROPY'}
1: {userId: '2', name: 'Neo'}
2: {userId: '3', name: 'Amy
_.find(데이터, 찾을 조건): 조건에 대한 정보를 알려준다.
const users = [
{userId: '1', name: 'Heropy'},
{userId: '2', name: 'Neo'},
{userId: '3', name: 'Amy'},
{userId: '4', name: 'Evan'},
{userId: '5', name: 'Lewis'},
]
const foundUser = _.find(users, {name: 'Amy'})
// 결과
{userId: '3', name: 'Amy'}
_.findIndex(데이터, 찾을 조건): 조건이 몇번째 요소인지 알려준다.
const users = [
{userId: '1', name: 'Heropy'},
{userId: '2', name: 'Neo'},
{userId: '3', name: 'Amy'},
{userId: '4', name: 'Evan'},
{userId: '5', name: 'Lewis'},
]
const foundUserIndex = _.findIndex(users, {name: 'Amy'})
console.log(foundUserIndex)
// 결과
2
_.remove(데이터, 지울 조건): 원하는 요소를 지울때 사용한다.
const users = [
{userId: '1', name: 'Heropy'},
{userId: '2', name: 'Neo'},
{userId: '3', name: 'Amy'},
{userId: '4', name: 'Evan'},
{userId: '5', name: 'Lewis'},
]
_.remove(users, {name: 'Heropy'})
console.log(users)
// 결과
0: {userId: '2', name: 'Neo'}
1: {userId: '3', name: 'Amy'}
2: {userId: '4', name: 'Evan'}
3: {userId: '5', name: 'Lewis'}
JSON: 자바스크립트의 객체 표기법
JSON.stringify(): 자바스크립트의 값을 JSON의 문자열로 변환시키는 메소드를 말한다.
const user = {
name: 'HEROPY',
age: 85,
emails: [
'thesecon@gmail.com',
'neo@zillinks.com'
]
}
const str = JSON.stringify(user)
console.log('str', str)
// 결과
str {"name":"HEROPY","age":85,"emails": ["thesecon@gmail.com","neo@zillinks.com"]}
JSON.parse(): JSON 문자열을 자바스크립트의 값으로 변환시키는 메소드를 말한다.
const user = {
name: 'HEROPY',
age: 85,
emails: [
'thesecon@gmail.com',
'neo@zillinks.com'
]
}
const str = JSON.stringify(user)
const obj = JSON.parse(str)
console.log('obj', obj)
// 결과
{name: 'HEROPY', age: 85, emails: Array(2)}
storage
// 정보를 수정하고 싶을 때!
const str = localStorage.getItem('user')
const obj = JSON.parse(str)
obj.age = 22
console.log(obj)
localStorage.setItem('user', JSON.stringify(obj))
API
function fetchMovies() {
axios
.get('https://www.omdbapi.com/?apikey=키값&s=frozen')
.then(res => {
console.log(res)
const h1El = document.querySelector('h1')
const imgEl = document.querySelector('img')
h1El.textContent = res.data.Search[0].Title
imgEl.src = res.data.Search[0].Poster
})
}
fetchMovies()
↑ 위 코드의 결과
드디어 자바스크립트의 대한 모든 수업이 끝났다. 매 일지마다 이야기 하고 있지만 내가 국비지원교육을 받을때 배웠던 수업이랑은 너무 달랐다는걸 다시 한번 느꼈고 그래서 더 뜻깊은 시간이었다. 자바스크립트를 같이 복습하면서 이제 리액트강의도 같이 들어야겠다.