var numbers = [1, 2, 3, 4, 5];
if (numbers.length > 3) {
numbers.length = 3;
}
console.log(numbers); // [1, 2, 3]
console.log(numbers.length); // 3
concat은 인자로 주어진 배열, 값을 기존 배열에 합쳐 새 배열을 반환한다.
예제1
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);
console.log(array1)
(3) ['a', 'b', 'c']
console.log(array2)
(3) ['d', 'e', 'f']
console.log(array3);
(6) ['a', 'b', 'c', 'd', 'e', 'f']
예제2
const alpha = ['a', 'b', 'c'];
alpha.concat(1, [2, 3]);
// 결과: ['a', 'b', 'c', 1, 2, 3]
[1, 2, 3, 4, 5].copyWithin(0, 3, 4);
// [4, 2, 3, 4, 5]
[3,5,8,22,45].copyWithin(0,1,3);
// [5,8,8,22,45]
const bird = ['뻐꾸기','참새','종달새','두루미'];
newBird = bird.entries();
Array Iterator {}
newBird.next()
{value: Array(2), done: false}
newBird.next()
{value: Array(2), done: false}
newBird.next()
{value: Array(2), done: false}
newBird.next()
{value: Array(2), done: false}
newBird.next()
{value: undefined, done: true}
○ 배열의 요소 삭제
const fruits = [
{banana: "30개"}, {mango: "27개"}, {melon:"10개"}, {lemon:"62개"}, {kiwi:"88개"}
]
fruits.splice(0);
console.log(fruits) // output : []
○ 배열의 요소 삭제,변경
const newproduct = {watermelon:"14개"}
const fruits = [
{banana: "30개"}, {mango: "27개"}, {melon:"10개"}, {lemon:"62개"}, {kiwi:"88개"}
]
fruits.splice(0,1); // [{"banana":"30개"}]
console.log(fruits);
// [{"mango": "27개"},{"melon": "10개"},{"lemon": "62개"},{"kiwi: 88개}]
const devideFruits = fruits.splice(2,2,newproduct);
// [{"lemon": "62개", "kiwi": "88개"}]
console.log(devidefruits) // [{"lemon": "62개", "kiwi": "88개"}]
console.log(fruits)
// [{"mango": "27개"},{"melon": "10개"},{"watermelon":"14개"}
let namba = [1,2,3,4,5,6,7,8,10];
namba.every((tomato) =>{ return tomato <11;});
>true
let myFriends = [
{ name : "kim" , hobby : "fishing" ,age : 30},
{ name : "park" , hobby : "football",age : 29 },
{ name : "choi" , hobby : "sleep" ,age : 33},
{ name : "song" , hobby : "eat" ,age : 31}
]
myFriends.every((키값) => { return 키값.age < 40 });
>true
let myFriends = [
{ name : "kim" , hobby : "fishing" ,age : 30},
{ name : "park" , hobby : "football",age : 29 },
{ name : "choi" , hobby : "sleep" ,age : 33},
{ name : "song" , hobby : "eat" ,age : 31}
]
myFriends.some((elems) =>{ return elems.hobby.includes("eat");})
>true
Rest 파라미터
Rest 파라미터는 함수 인자 선언 앞에 ...을 붙여서 정의하는 문법
function getData(...rest){
let[item1,item2,item3,item4,item5] = rest;
console.log(...rest);
}
getData(1,2,3,4,5)
Spread 파라미터
Rest 파라미터와 마찬가지로 ...을 붙여서 정의하는 문법
iterable한 변수 앞에 붙여서, 해당 변수의 데이터를 개별 아이템으로 분리함
iterable = 반복 가능한 객체를 의미하며 배열,문자열 등을 의미함
기존 배열로 새로운 배열 구성하기
myArray2 = [1,2,3,3,4,5]
function func(a,b,c,d,e,f,g,h,i,j,k){
console.log(a,g,j,k,e,b,c);
}
func(...data);
1 10 69 77 13 23 7
// spread 매개변수는 배열이 아닌 각각의 값을 내보낸다
--
new로 Promise 객체 생성
2. Promise 객체에서는 executor라는 함수가 자동으로 실행됨.
executor 함수는 resolve,reject라는 두개의 [함수]를 인자로 받아
비동기 처리 함수를 실행.
executor를 통해 비동기 처리 함수를 실행 완료 후,
해당 작업이 성공이면 resolve 실패하면 reject 함수 호출
const promise = new Promise((resolve,reject) =>{
setTimeout(() =>{
let num = 10;
if(num>=11){
resolve(num);
}else{
reject("error");
}
},1000);
});
실행부
promise.then(resolve인자함수,reject인자함수)
--
정의부
const runCode = new Promise(
(resolve,reject) => {
setTimeout(() =>{
let num = 10;
if( num>9) {
resolve();
}else{
reject();
}
}});
실행부
runCode
.then((item) =>{
console.log('success',item);
}, (err) =>{
console.log(err);
})
.then(() =>{
console.log('순차적으로 실행된다');
});
비동기적인 코드를 먼저 실행해야 한다면(순서대로 실행되야 한다면)
.then을 계속 써서 순차적으로 실행하게 만들 수 있다. (콜백지옥해결)
실행된 .then에
retrun [value];로 그 다음 then에 값을 넘겨줄 수 있다.
.catch
실행 중 예외사항 처리함.
failureCallback이 정의되지 않을 경우 reject 함수를 호출한다.
보통 호출부 제일 마지막에 설치함.
throw
사용자 정의 예외를 던질 때 사용
catch 블록이 있으면 catch블록으로 전달되고 그렇지 않으면 플그램을 종료함
보통 다음과 같은 구문으로 사용됨 (Error클래스의 객체를 만들어서 전달함)
Throw new Error("ERROR");
finally() 성공 실패와 상관 없이 실행됨.
모든 promise 실행 후 .then 실행
promise.all([promise1,promise2,promise...])
.then((data) => {
//내용작성
};
제일 빠른 promise 실행 후 .then실행
promise.race([promise1,promise2]).then((data) =>{
console.log(data);
});
1단계 HTML parsing
2단계 DOM tree , CSSOM tree생성
3단계 Render tree 생성
4단계 랜더링 : Layout / Paint / Compositing
HTML 객체를 이용해서 화면에 뿌려준다
javascript를 head에 넣으면
DOM tree 구성 전에 javascript가 실행되므로 DOM을 조작하는
javascript는 에러가 나거나 정상 실행이 되지 않는다.
window와 document
window : 최상위 객체 웹브라우저 객체
document : window tree 바로 아래 DOM 객체의 최상위 객체
BOM(Browser Object Model)
자바스크립트로 HTML을 조작하기 위해서는 CRUD 사용법을 이해해야 한다.
Create , Read(find) , Update , Delete
원하는 HTML을 읽는다는 의미는 원하는 HTML을 찾는다는 의미다.
Array.push(추가할 값)
배열의 [[끝]]에 있는 아이템을 리턴해주고 해당 아이템은 배열에서 삭제
Array.pop()
배열의 첫 아이템 삭제, 그 뒤에 있는 아이템을 앞으로 당김
Array.shift()
두 배열을 합치는 함수
const 배열3 = 배열3.concat(배열1,배열2)
아이템 사이에 특정 문자열을 넣어서 모든아이템을 합쳐 하나의 문자열로 만들어 줌
Array.join(stirng);
let data2 = data1.join(string);
데이터1 배열안에 값 각각에 string 값을 붙여 준다.
Array.reverse
오른쪽에서 왼쪽으로 (역순으로 배치해준다)
배열의 일부분을 반환해준다
Array.slice(a,b) : a 아이템 인덱스번호부터 시작해서, b-1 아이템 인덱스까지 추출
for문을 대체해서 간단히 배열의 각 아이템을 가져올 수 있는 함수.
Array.forEach(item)
배열의 각 아이템에 정의한 함수를 적용해서 새로운 배열을 생성
Array.map
const data2 = data1.map(item => item * 2)
배열에서 지정한 데이터가 위치한 인덱스 번호를 리턴한다. 없으면 -1 리턴
Array.indexOf
배열 내 객체에 들어 있는 값의 인덱스를 알고 싶다면 findIndex를 사용한다.
Array.findIndex(item => (Array.name === ' Emerson ');
배열 내 객체들에 키값 name이 Emerson인 객체를 찾아 index번호를 리턴해줌.
Array.find
findindex와 유사하지만 데이터 위치를 리턴하는 것이 아니라, 지정한 데이터가 들어 있는
객체를 리턴함
Array.filter(fn)
배열에서 특정 조건에 맞는 아이템만 추출함 (true값)
Array.from(1번매개변수 :복사할 배열객체 또는 반복가능객체 2번 : mapping할 함수)
객체 구조 분해 할당 (비구조화 할당) 문법
배열이나 객체의 속성을 해체해서, 값을 개별 변수에 대입할 수 있게 하는 문법
구조분해할당은 객체와 배열을 좀 더 쉽게 다루는 문법으로 이해하면 됨
const data = {
name : "dave",
age : 20
};
const { age, name } = data; // 동일한 프로퍼티명을 써줘야, 해당 프로퍼티에 맞는 값이 대입됨
console.log(name,age) = dave 20
가져오고 싶은 객체의 키값 입력으로 가져올 수 있다.
다른 이름으로 가져오고 싶다면 .
const { name = myName , age = myAge } = data
console.log(myName,myAge);
const data = {
name : "Emerson",
age : 33,
job : "doctor"}
undefined
const { job } = data;
job // "doctor"
--
배열 분해 할당
const data = [1,2,3];
const [item1,item2] = data;
console.log(item1,item2);
item1,item2 라고 해도 해당 번호가 index번호를 의미하는 것은 아니다.
item3,item4로 매개변수를 입력해도 1,2를 가져옴 .
data 배열은 변형되지 않는다
const data = [1,2,3];
const [item1,item2] = data;
data = (3) [1, 2, 3]
function ab(){
return item1 * item2
} // item1,item2가 전역변수, 사용할 수 있는 지역변수라면 빼와서 사용이 가능..!!
ab(item1,item2) 결과값 2
data 결과값 (3) [1, 2, 3]
문법 활용 팁
값 치환하기
let a = 1;
let b = 2;
[a, b] = [b, a];
함수 리턴시 여러 데이터 넘겨주기
function getData(){
return [10,20];
}
let[a,b] = getData();
문자열 배열로 만들기
const data = 'DaveLee,fun-coding,coding';
console.log(data.split(',');
결과값 : (3) ["Dave Lee" , "fun-coding" , "coding"]
구조분해할당 활용 팁
일반 문자열인 const data를 배열로 가져올 수 있다.
const data = "Orange,Apple,Banana,Melon,Kiwi"
newdata = data.split(',');
newdata 결과값 (5) ['Orange', 'Apple', 'Banana', 'Melon', 'Kiwi']
secondData[favorite,good,most] = newdata.split
secondData
Rest 파라미터
Rest 파라미터는 함수 인자 선언 앞에 ...을 붙여서 정의하는 문법
function getData(...rest){
let[item1,item2,item3,item4,item5] = rest;
console.log(...rest);
}
getData(1,2,3,4,5)
Spread 파라미터
Rest 파라미터와 마찬가지로 ...을 붙여서 정의하는 문법
iterable한 변수 앞에 붙여서, 해당 변수의 데이터를 개별 아이템으로 분리함
iterable = 반복 가능한 객체를 의미하며 배열,문자열 등을 의미함
기존 배열로 새로운 배열 구성하기
myArray2 = [1,2,3,3,4,5]
function func(a,b,c,d,e,f,g,h,i,j,k){
console.log(a,g,j,k,e,b,c);
}
func(...data);
1 10 69 77 13 23 7
// spread 매개변수는 배열이 아닌 각각의 값을 내보낸다