-
개발공부 29일,30일차 [유데미 자바스크립트기본 강의]개인공부 2023. 2. 23. 21:39
실은 리엑트강의인데 아직 자바스크립트 단계다..
자바스크립트 여러 영상 많이 봐서 대부분 비슷한 얘기겠지 했는데 무슨?
난 정말 개발공부를 얕게만 본 거 같다
모르는 게 수두룩 빽빽이었고 아직 영상 몇 개 남았는데 앞으로도 더 모를 예정이다.
Javascript 기본
변수에 var를 쓰지 않는 이유 : 변수명을 중복해서 사용이 가능하기 때문에 같은 변수명으로 두 번 적히면 이후 적은 변수는 정상작동 할 수 있지만 이전 변수가 오류가 날 수 있다.
let과 동일한 점은 변수 값을 변경할 수 있지만 let은 동일한 변수명으로 또 적혔을 때 에러가 떠서 중복으로 사용을 할 수 없게 한다.
자료형과 형 변환
- 숫자열
Infinity 무한대
-Infinity 음의 무한대
NaN 수학적인 계산의 실패 결과값 - null
직접 null이라는 값을 넣어줘야 하는데 의미로는 의도적으로 이값은 아무것도 안 가리키고 있다. 아무것도 안 담고 있다는 의미를 줌.
parseInt( ) → 문자열을 숫자열로 바꿔줌.
복합연산자
let a = 5; a += 10; //a = a+10 = 15
증감연산자
let a = 10; a++; console.log(a); //11
let a = 10; console.log(a++); //10 console.log(a); //11 --- let a = 10; console.log(++a); // 11
console에 a가 먼저 찍히고 나서 ++가 되기 때문에 처음 a++에는 10이라고 나온 거임.
++a일 경우 먼저 더해지고 a가 출력되기 때문에 11로 찍힘.
논리연산자
! - not
console.log(!true); //false
&& - AND
|| - OR
타입확인
let A = 1; A = "1"; console.log(typeof A); //string
변수 A는 1이였지만 문자열 “1”로 바뀌었고 그 타입을 콘솔에 찍어봤을 때 숫자가 아니나 문자열(string)임이 나타난다.
null병합 연산자
let a; a = a?? 10; console.log(a); //10
a가 null이거나 undefined이면 a의 값은 a가 아닌 10이 출력된다.
조건문
let a = 5; if(a >=7){ console.log("7 이상입니다.") } else if(a >=5){ console.log("5 이상입니다.") } else { console.log("5 미만입니다.") } //5 이상입니다.
스위치 문
let country = "ko"; switch (country) { case 'ko': console.log("한국"); break; //break를 안써주면 밑에 조건까지 하나로 인식을 해버림. case 'cn': console.log("중국"); break; case 'jp': console.log("일본"); break; default: console.log("미 분류"); break } //한국 으로 출력됨.
함수
함수 선언식
function getArea(){ let width = 10; let height = 20; let area = width * height console.log(area); } //함수 선언식, 함수 선언 방식의 함수 생성 getArea(); //함수의 호출 console.log("함수 실행 완료") //함수의 호출이 먼저 이루어지면 호출이 완료될때까지 다음동작은 실행하지 않음.
<직사각형 10개의 너비를 구하기>
let width1 = 10; let height1 = 20; let area1 = width1 * height1 console.log(area1) //200 let width2 = 30; let height2 = 15; let area2 = width2 * height2 console.log(area2) //450
⬇️
function getArea(width, height){ let area = width * height; console.log(area) } getArea(100,200); //100 = width //200 = height getArea(1,200); getArea(2,200); getArea(3,200); getArea(4,200); getArea(5,200); getArea(6,200); getArea(7,200); getArea(8,200); getArea(9,200); console.log("함수 실행 완료");
콘솔에 찍는 게 아닌 변수에 할당하고 싶을 땐 return을 사용한다.
function getArea(width, height){ let area = width * height; return area } let area1 = getArea(100,200); //100 = width //200 = height console.log(area1) //20000 console.log("함수 실행 완료");
return을 적지 않을 경우 area1은 undefined이 뜬다.
함수내부에 선언된 변수 - 지역변수
함수 내부에 선언된 변수는 함수 바깥에서 호출할 수가 없다.
function getArea(width, height){ let area = width * height; return area } let area1 = getArea(100,200); //100 = width //200 = height console.log(area) //Uncaught ReferenceError: area is not defined라고 에러가 뜸.
함수 외부에 선언되어 어디서든 사용가능 한 변수
- 전역변수, 글로벌변수
함수외부에 선언된 변수는 함수 내부에서도 사용 가능하다.
let count = 1; function getArea(width, height){ let area = width * height; console.log(count) return area } let area1 = getArea(100,200);
함수 표현식
함수를 변수에 담을 수 있다.let hello = function(){ return "안녕하세요 여러분"; } console.log(hello) //ƒ (){ // return "안녕하세요 여러분"; //}
let hello = function(){ return "안녕하세요 여러분"; } const helloText = hello() console.log(helloText) //안녕하세요 여러분
호이스팅 - 프로그램 실행 전에 코드의 최상단으로 끌어올려진다.
console.log(helloB()); //안녕하세요. 여러분 let helloA = function(){ return "안녕하세요 여러분"; } //함수 표현식 function helloB(){ return "안녕하세요 여러분" } //함수 선언식
함수선언식이 아래에 되어있지만 프로그램 실행 전에 최상단으로 끌어올려져
맨 위에 호출을 해도 정상적으로 호출이 된다.
console.log(helloA()) //Cannot access 'helloA' before initialization let helloA = function(){ return "안녕하세요 여러분"; } //함수 표현식 console.log(helloA()); //안녕하세요 여러분
함수표현식은 호이스팅이 되지 않기 때문에 함수 위에 호출할 경우 에러가 뜬다.
화살표함수
let helloA = () => { return "안녕하세요 여러분"; } //함수 표현식 console.log(helloA()) //안녕하세요 여러분 let helloB = () => "안녕하세요 여러분"; //함수가 return할 필요가 없다면 중괄호가 없어도 된다. console.log(helloB()) //안녕하세요 여러분
콜백함수
기분에 따라 동작하게 하기
function checkMood(mood,goodCallback,badCallback){ if(mood === 'good'){ // 기분 좋을 때 하는 동작 goodCallback() } else { // 기분 안좋을 때 하는 동작 badCallback() } } function cry(){ console.log("ACTION :: CRY") } function sing(){ console.log("ACTION :: SING") } function dance(){ console.log("ACTION :: DANCE") } checkMood("sad",sing,cry) //"sad" -> else에 해당한다. //sing -> goodCallback()에 해당한다. //cry -> badCallback()에 해당한다. //else에 해당하면 badCallback()함수가 들어와야 하기 때문에 ACTION :: CRY가 출력된다.
콜백 함수 = 함수의 파라미터로 함수를 넘긴다.
객체
let person = new Object(); //객체 생성자 방식 //new ObJect = 새로운 객체를 생성한다.
let person = {}; //객체 리터럴 방식
let person = { key: "value", key1: 123, key2: true, key3: undefined, key4: [1,2], key5: function (){} }; //객체 리터럴 방식 console.log(person.key1)// 점 표기법 // 123
key값에는 문자열, 숫자열, 불리언, 배열, 함수 어떤 게 들어가도 상관이 없고 중복이 되어도 괜찮다.
다만 key값이 중복이 되면 뒤에 선언된 key값으로 인식되기 때문에 key값은 중복되면 안 된다.
let person = { name : "유리", age : 29 }; //객체 리터럴 방식 console.log(person["name"])// 괄호 표기법(key를 문자열로 입력해야함.) // 유리
let person = { name : "유리", age : 29 }; //객체 리터럴 방식 console.log(getPropertyValue("name")); function getPropertyValue(key){ return person[key]; }
프로퍼티 추가하는 방법
let person = { name : "유리", age : 29 }; //객체 리터럴 방식 person.location = "한국"; // 점표기법 추가 person["gender"] = "여성" //괄호표기법 추가
프로퍼티 수정하는 방법
let person = { name : "유리", age : 29 }; //객체 리터럴 방식 person.name = "최유리" person["age"] = "27"
만약 let을 const로 바꾸면 추가하거나 수정했을 때 에러가 뜨는가?
에러가 뜨지 않는다. 상수자체를 수정하는 게 아닌 객체의 값만 수정이 되다 보니 에러가 뜨지 않는다.
다만 상수자체를 수정하려고 하면 에러가 뜬다.
const person = { name : "유리", age : 29 }; //객체 리터럴 방식 person = { age:20 }
프로퍼티 삭제하는 방법
let person = { name : "유리", age : 29 }; //객체 리터럴 방식 delete person.age; delete person["age"]
이렇게 하면 지워지긴 하나 메모리 자체에서 삭제되진 않는다.
let person = { name : "유리", age : 29 }; //객체 리터럴 방식 person.name = null;
name의 값을 null을 주게 되면 삭제된 거랑 동일하게 작용한다.
위 방법보단 null을 주는 방법을 추천한다.
메서드 - 객체 안에 들어있는 함수
let person = { name : "유리", age : 29, say: function(){ console.log("hi"); } }; //객체 리터럴 방식 person.say(); // hi
메서드 안에 함수자신을 가리킬 땐 this라고 써줘도 된다.
let person = { name : "유리", age : 29, say: function(){ console.log(`hi ${this.name}`); } }; //객체 리터럴 방식 person.say();
현재 메서드 안에 this는 person과 같다.
객체에 존재하지 않는 프로퍼티에 접근하면?
let person = { name : "유리", age : 29, say: function(){ console.log(`hi ${this.name}`); } }; //객체 리터럴 방식 console.log(person.gender); //undefined
undefined이 나타나는 방식은 유연한 프로그래밍을 가능하게 하지만 존재하지 않는 프로퍼티에 잘못 접근해서 연산을 수행한다던가
오류를 발생할 수 있다.
존재하지 않는 프로퍼티는 추가할게 아니면 접근하지 않는 것이 좋다.
찾고자 하는 프로퍼티다 존재하는지 확인을 하는 방법.
let person = { name : "유리", age : 29, say: function(){ console.log(`hi ${this.name}`); } }; //객체 리터럴 방식 console.log(`${"name" in person}`); //name이라는 프로퍼티가 person안에 있는가?라는 의미 //결과값은 true console.log(`${"gender" in person}`) //false
난 정말 태어나지도 않았다 아직 엄마배에도 없다
아는 게 없다.. 충격적이다..
앞으로 얼마나 더 무궁무진할지... 감도 안 온다
'개인공부' 카테고리의 다른 글
개발공부 31일차 [노데미 자바스크립트 응용] (0) 2023.02.25 개발공부 29일,30일차 [유데미 자바스크립트기본 및 응용 강의] (0) 2023.02.23 개발공부 28일차 [웹개발 종합반 4~5주차 2회완강] (0) 2023.02.21 개발공부 25,26일차 [웹개방종합반 3주차 2회완강 및 스터디] (0) 2023.02.20 개발공부 24일차 [노마드코드 앱만들기 최종] (0) 2023.02.20 - 숫자열