ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개발공부 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

     

    난 정말 태어나지도 않았다 아직 엄마배에도 없다 

    아는 게 없다.. 충격적이다.. 

     

    앞으로 얼마나 더 무궁무진할지... 감도 안 온다 

Designed by Tistory.