🌟 기본 문법 정리
: Data type, Operator(연산자), 함수(function), 조건문, 객체(Object), 배열(Array), 반복문, break, continue
UX(User Experience)= 사용자 경험
JS 언어의 특징
객체 지향 프로그래밍 지원
객체 지향 프로그램(데이터와 함수를 객체라는 그룹으로 묶어서 처리)
동적타이핑(런타임 시점에 변수에 할당되는 값에 따라 자동으로 데이터 타입이 결정)
함수형 프로그래밍 지원
비동기 처리(작업을 순차적으로 기다리지 않고 병렬로 처리할 수 있도록 하는 방식)
클라이언트 측 및 서버 측 모두에서 사용 가능(Nods.js를 이용하여 서버 측에서도 사용, 이를 통해 웹 개발 전반에 걸쳐 자바스크립트를 화용가능)
변수 : 기억하고 싶은 값을 메모리에 저장 => 재사용
var는 재선언이 가능하지만 let과 const는 재선언이 불가하다.
var와 let은 재할당이 가능하지만 const는 재할당이 불가하다.
Data type은 runtime에 결정된다.
runtime : 코드 작성할 때가 아닌 실제 코드가 실행될 때
(typeof 변수) Data type을 조회가능
[숫자]
[문자]
: string(문자열 = 문자의 나열)
[Boolean]
true, false
[undefined]
: 정의되지 않은 것
un : not, define : 정의하다
[null]
: 개발자가 의도적으로 값이 존재하지 않음을 "명시적"으로 나타내는 방법
[object(객체)]
: key-value pair
let person = {
name: "SoHyun",
age: 20,
}
[Array(배열)]
: 여러개의 데이터를 순서대로 저장하는 데이터 타입 (index를 가지고 있음)
[문자]
{}, null, undefined + "1" => 문자열
let result1 = 1 + "2";
console.log(result1);
console.log(typeof result1);
let result2 = "1" + true;
console.log(typeof result2);
[숫자]
let result3 = 1 - "2";
console.log(result3);
console.log(typeof result3);
let result4 = "2" + "3";
console.log(typeof result4);
console.log(Boolean(0));
console.log(Boolean(""));
console.log(Boolean(null));
console.log(Boolean(undefined));
console.log(Boolean(NaN));
console.log(Boolean("false"));
console.log(Boolean({}));
[String(문자)]
let result5 = String(123);
console.log(String(typeof result5));
let result6 = String(true);
console.log(String(typeof result6));
let result7 = String(false);
console.log(String(typeof result7));
let result8 = String(null);
console.log(String(typeof result8));
let result9 = String(undefined);
console.log(String(typeof result9));
[Number(숫자)]
let result10 = Number("123");
console.log(result10);
console.log(typeof result10);
let x = 10;
let result = x > 5 ? "크다" : "작다";
console.log("------");
console.log(result);
: input과 output
: 영향을 끼치는 범위
: js전체에 영향을 주는 변수
: 지역내에서만 영향을 주는 변수
: ES6 신 문법
function add(x, y) {
return x + y;
}
// 1-1 기본적인 화살표 함수
let arrowFunction = (x, y) => {
return x + y;
};
// 한 줄로(함수식이 줄이 한 줄일 때만 가능)
let arrowFunc02 = (x, y) => x + y;
if(/*true또는 false가 나올 수 있는 조건*/){
// 조건에 따라 수행할 식
}
if (조건) {
//main logic #1
} else {
//main logic #2
}
if (조건1) {
// main logic #1
} else if (조건2) {
// main logic #2
} else {
// main logic #3
}
let fruit = "사과";
switch (fruit) {
case "사과":
console.log("사과입니다.");
break;
case "바나나":
console.log("바나나입니다.");
break;
case "키위":
console.log("키위입니다.");
break;
default:
console.log("아무것도 아닙니다.");
break;
}
if(조건){
// main logic #1
if(조건){
// main logic #1
}else{}
}else{}
: 앞의 조건이 만족하면 뒤를 실행
// let x = 10;
// if(x>0){
// console.log("x는 양수입니다.")}
x > 0 && console.log("x는 양수입니다.");
let y; // y는 undefined
let z = y || 20;
해석: y가 undefined면 20일 넣어라
: if문의 조건문 안에서 [0, "", null, undefined, NaN, false]실행 안됨(false라는 값으로 인식함)
if (0) {
// main logic
console.log("hello");
}
if ("") {
// main logic
console.log("hello");
}
if (null) {
// main logic
console.log("hello");
}
if (undefined) {
// main logic
console.log("hello");
}
if (NaN) {
// main logic
console.log("hello");
}
if (false) {
// main logic
console.log("hello");
}
if (true) {
// main logic
console.log("hello");
}
: 하나의 변수에 여러개의 값을 넣을 수 있다
key - value pair
let person = {
name : "홍길동",
age : 30.
gender : "남자",
}
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
let person1 = new Person("홍길동", 30, "남자");
let person2 = new Person("홍길순", 20, "여자");
: 변수명.value
console.log(person.name);
console.log(person.age);
console.log(person.gender);
let newPerson = {};
Object.assign(newPerson, person);
console.log("newPerson=>", newPerson);
let newPerson = {};
Object.assign(newPerson, person, { age: 31 });
console.log("newPerson=>", newPerson);
: 객체는 메모리에 저장할 때 별도의 공간에 저장
별도 공간에 대한 주소를 저장
객체 비교를 하면 변수와 달리 내용이 같아도 저장한 주소가 다르기 떄문에 false를 반환한다.
spread Operator => ... 을 객체 앞에 붙임
{}를 풀어줌
let person1 = {
name: "홍길동",
age: 30,
};
// person2 별도 공간에 대한 주소
let person2 = {
gender: "남자",
};
console.log("----------");
let perfectMan = { ...person1, ...person2 };
console.log(perfectMan);
// 결과
// : {name : 홍길동, age : 30, gender : "남자"}
let fruits = ["사과", "바나나", "오렌지"];
let number = new Array(5);
console.log(fruits[0]);
let fruits = ["사과", "바나나", "키위"];
let slicedFruits = fruits.slice(1, 2);
console.log(slicedFruits);
// ['바나나;]
: 배열의 반복문
콜백함수 : 매개변수자리에 함수를 넣는 것
=> 배열명.forEach(function(item){
실행문
})
let numbers = [5, 2, 3, 8, 5];
// 콜백함수 : 매개변수자리에 함수를 넣는 것
numbers.forEach(function (item) {
console.log("item입니다", +item);
});
// 출력값
// item입니다 5
// item입니다 2
// item입니다 3
// item입니다 8
// item입니다 5
: 기존에 있었던 배열을 가공해서 새로운 배열을 생산
항상 원본 배열의 길이만큼이 return된다.(리턴이 없어도 undefined로 원본 배열의 길이만큼 출력)
=> 배열명.map(function(item){
return 변형시킬 방법;
})
(ex)
let numbers = [5, 2, 3, 8, 5];
let newNumbers = numbers.map(function (item) {
return item * 2; // return필수
});
console.log(newNumbers);
// 출력값
//[ 10, 4, 6, 16, 10 ]
: 배열의 값중 return의 조건에 맞는 값만 반환
=> 배열명.filter(function(item){
return item === 5;
})
let filteredNumbers = numbers.filter(function (item) {
return item === 5; // 조건
});
console.log(filteredNumbers);
: return 조건에 맞는 첫번째 값만 반환
=> 배열명.find(function(item){
return (조건)
})
let numbers = [5, 2, 3, 8, 5];
let result = numbers.find(function (item) {
return item > 3;
});
console.log(result);
: 조건이 될 때까지 식을 반복
for 문 기본식
=> for(초기값;조건식;증감식){}
for ~ in문
: 객체의 속성을 출력하는 문법
=> for(let key in 객체명){
console.log()
}
let person = {
name: "John",
age: 30,
gender: "male",
};
for (let key in person) {
console.log(key + ":" + person[key]);
}
=> while(조건){
//메인로직
//증감
}
=> do{//메인로직; 증감;}while
(조건;)
:break문을 만나면 for문을 탈출
for (let i = 0; i < 10; i++) {
if (i === 5) {
break;
}
console.log(i);
} // 1,2,3,4,5
: continue를 만났을 때 다음 for문으로 넘어감
for (let i = 0; i < 10; i++) {
if (i === 5) {
continue;
}
console.log(i); // 1,2,3,4,6,7,8,9
}
처음 Javascript 문법을 1회독하였을때는 헷갈리는 것들도 많았고 이해가 잘 가지 않던 것들도 많았는데 몇회독씩 반복하다보니 이해도 가고 좀 더 잘 활용할 수 있을 것 같다는 확신이 든다...!
문법은 기초일 뿐이기에 응용하고 활용하는 방법을 익혀서 꼭 능력있는 개발자가 되고싶다...!
그날까지 화이팅💪💥
★ 항상 기술적고민을 많이 하고 생각할 것!