ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 항해99 1일차! 자바스크립트 기본언어
    항해99(진짜시작) 2023. 4. 4. 00:05

    JS 언어의 특징

    1. 객체 지향 프로그래밍 지원
    2. 동적 타이핑 변수를 선언할 때 타입을 지정하지 않는다.
    3. 함수형 프로그래밍 지원
    4. 비동기 처리
    5. 클라이언트 측 및 서버 측 모두에서 사용 가능

    변수, 상수

    기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 들여 재사용 하기 위해 변수라는 메커니즘을 이용한다.

    변수 이름 : 저장된 값의 고유 이름

    변수 값 : 변수에 저장된 값

    변수 할당 : 변수에 값을 저장하는 행위

    변수 선언 : 변수를 사용하기 위해 컴퓨터에 알리는 행위

    변수 참조 : 변수에 할당된 값을 읽어오는것

    데이터 타입과 형 변환

    데이터 타입

    숫자(Number)

    1. 정수형 숫자(Integer)
    2. let num1 = 10; console.log(num1); // 10 console.log(typeof num1); // "number"
    3. 실수형 숫자(Float)
    4. let num2 = 3.14; console.log(num2); // 3.14 console.log(typeof num2); // "number"
    5. 지수형 숫자(Exponential)
    6. let num3 = 2.5e5; // 2.5 x 10^5 console.log(num3); // 250000 console.log(typeof num3); // "number"
    7. NaN(Not a Number)<aside> ❗ NaN(Not a Number)은 자바스크립트에서 숫자가 아님을 나타내는 값입니다. 보통 수학적으로 정의되지 않는 계산을 수행하거나, 숫자가 아닌 값을 숫자로 변환하려고 할 때 발생합니다.
    8. </aside>
    9. let num4 = "Hello" / 2; console.log(num4); // NaN console.log(typeof num4); // "number"
    10. Infinity(무한대)
    11. let num5 = 1 / 0; console.log(num5); // Infinity console.log(typeof num5); // "number"
    12. Infinity(-무한대)
    13. let num6 = -1 / 0; console.log(num6); // -Infinity console.log(typeof num6); // "number"

    문자열(string)

    1. 문자열 길이(length) 확인하기
    2. let str = "Hello, world!"; console.log(str.length); // 13
    3. 문자열 결합(concatenation)
    4. let str1 = "Hello, "; let str2 = "world!"; let result = str1.concat(str2); console.log(result); // "Hello, world!"
    5. 문자열 자르기(substr, slice)
    6. let str = "Hello, world!"; console.log(str.substr(7, 5)); // "world" 시작지점부터 글자수 5개 console.log(str.slice(7, 12)); // "world" 시작지점부터 출력할 지점까지 인덱스7부터 인덱스 12까지
    7. 문자열 검색(search)
    8. let str = "Hello, world!"; console.log(str.search("world")); // 7
    9. 문자열 대체(replace)
    10. let str = "Hello, world!"; let result = str.replace("world", "JavaScript"); console.log(result); // "Hello, JavaScript!"
    11. 문자열 분할(split)
    12. let str = "apple, banana, kiwi"; let result = str.split(","); console.log(result); // ["apple", " banana", " kiwi"]

    불리언(boolean)

    불리언은 참(true)과 거짓(false)을 나타내는 데이터 타입이다.

    let bool1 = true;
    console.log(bool1); // true
    console.log(typeof bool1); // "boolean"
    

    불리언 데이터 타입은 조건문(if, else, switch 등)과 논리 연산자(&&, ||, !)와 함께 많이 사용된다.

    1. undefined undefined는 값이 할당되지 않은 변수를 의미합니다.
    2. let x; console.log(x); // undefined
    3. null null은 값이 존재하지 않음을 의미합니다. undefined와는 다릅니다.
    4. let y = null;
    5. 객체(Object) 자바스크립트에서는 객체가 매우 중요한 역할. 객체는 속성과 메소드를 가지는 컨테이너. 중괄호({})를 사용하여 객체를 생성한다.
    6. let person = { name: 'Alice', age: 20 }; person.name // 'Alice' person.age // 20
    7. 배열(Array) 배열은 여러 개의 데이터를 순서대로 저장하는 데이터 타입입니다. 대괄호([])를 사용하여 배열을 생성한다.
    let numbers = [1, 2, 3, 4, 5];
    let fruits = ['apple', 'banana', 'orange'];
    

    형 변환

    암시적 형 변환(implicit coercion)

    암시적 형 변환은 자바스크립트에서 자동으로 수행되는 형 변환이며, 일반적으로 연산자를 사용할 때 발생한다.

    문자열 변환

    console.log(1 + "2");   // "12"
    console.log("1" + true);   // "1true"
    console.log("1" + {});   // "1[object Object]"
    console.log("1" + null);   // "1null"
    console.log("1" + undefined);   // "1undefined"
    

    자바스크립트는 다른 자료형을 문자열로 변환한 후 연산을 수행한다.

    숫자 변환

    console.log(1 - "2");   // -1
    console.log("2" * "3");   // 6
    console.log(4 + +"5");   // 9
    

    연산자를 사용할 때, 문자열을 숫자로 변환한다.. 이때, 빈 문자열("")이나 공백 문자열(" ")은 0으로 변환된다.

    명시적 형 변환

    명시적 형 변환은 개발자가 직접 자료형을 변환하는 것을 말합니다.

    불리언 변환

    console.log(Boolean(0));   // false
    console.log(Boolean(""));   // false
    console.log(Boolean(null));   // false
    console.log(Boolean(undefined));   // false
    console.log(Boolean(NaN));   // false
    console.log(Boolean("false"));   // true
    console.log(Boolean({}));   // true
    

    Boolean() 함수를 사용하여 불리언 값으로 변환한다.. 이때, 0, 빈 문자열(""), null, undefined, NaN은 false로 변환된다. 그 외의 값은 true로 변환된다.

    문자열 변환

    console.log(String(123));       // "123"
    console.log(String(true));      // "true"
    console.log(String(false));     // "false"
    console.log(String(null));      // "null"
    console.log(String(undefined)); // "undefined"
    console.log(String({}));        // "[object Object]"
    

    위의 예제에서는 String() 함수를 사용하여 다른 자료형을 문자열로 변환된다.

    console.log(typeof(true)); //string
    

    숫자 변환

    console.log(Number("123"));   // 123
    console.log(Number(""));      // 0
    console.log(Number("  "));    // 0
    console.log(Number(true));    // 1
    console.log(Number(false));   // 0
    

    연산자

    더하기 연산자는 우선순위가 문자열에 있다.

    할당 연산자****(assignment operators)****

    let x = 10
    console.log(x) // 10
    x += 5
    console.log(x) // 15
    x -= 5
    console.log(x) // 10
    x -= 20
    console.log(x) // -10
    x = x + 9
    console.log(x) // -1
    x *= 3
    console.log(x) // -3
    

    나누기 등호 연산자(/=)

    let x = 10;
    console.log(x);   // 10
    
    x /= 5;
    console.log(x);   // 2
    

    위의 예제에서는 나누기 등호 연산자를 사용하여 변수에서 값을 나눌 수 있습니다.

    나머지 등호 연산자(%=)

    let x = 10;
    console.log(x);   // 10
    
    x %= 3;
    console.log(x);   // 1
    

    위의 예제에서는 나머지 등호 연산자를 사용하여 변수에서 값을 나눈 나머지를 구할 수 있습니다.

    논리 연산자

    논리곱(&&) 연산자(and)

    • 두 값이 모두 true일 경우에만 true를 반환

    논리합(||) 연산자(or)

    • 리합 연산자는 두 값 중 하나라도 true일 경우 true를 반환

    논리부정(!)연산자

    • 논리부정 연산자는 true를 false로, false를 true로 바꾼가.
    console.log(!true);   // false
    console.log(!false);   // true
    console.log(!(2 > 1));   // false
    

    삼항 연산자

    let x = 10;
    let result = (x > 5) ? "크다" : "작다";
    console.log(result);   // "크다"
    
    • 삼항 연산자는 조건식 ? true일 때의 값 : false일 때의 값 형태로 사용

    타입 연산자

    console.log(typeof 123);   // "number"
    console.log(typeof "123");   // "string"
    console.log(typeof true);   // "boolean"
    console.log(typeof undefined);   // "undefined"
    console.log(typeof null);   // "object"
    console.log(typeof {});   // "object"
    console.log(typeof []);   // "object"
    console.log(typeof function(){});   // "function"
    

    객체나 함수의 경우, "object" 또는 "function"을 반환합니다. typeof null의 경우 "object"를 반환하는 버그가 있다.

    함수

    함수 선언문

    function add(매개변수){
    // 함수 내부에서 실행할 로직
    }
    

    함수 표현식

    let add = f(매개변수){
    }
    

    함수 호출하기

    function add(x, y) {
      return x + y;
    }
    
    console.log(add(2, 3));   // 5
    

    input : 함수의 input → 매개변수(매개체가 되는 변수)

    output : return문 뒤에 오는 값 : 반환값

    함수 스코프

    전역 스코프

    • 전역 스코프에서 선언된 변수는 어디에서든지 참조할 수 있다.
    let x = 10;
    
    function printX() {
      console.log(x);
    }
    
    printX();   // 10
    

    지역 스코프

    • 지역 스코프에서 선언된 변수는 해당 함수 내에서만 참조할 수 있다.

    화살표 함수

    기본적인 화살표 함수

    let add = (x, y) => {
      return x + y;
    }
    
    console.log(add(2, 3));   // 5
    

    한 줄로 된 화살표 함수

    let add = (x, y) => x + y;
    
    console.log(add(2, 3));   // 5
    

    함수 내부에 return문이 한 줄로 작성될 경우, 중괄호와 return 키워드를 생략할 수 있다.

    매개변수가 하나인 화살표 함수

    let square = x => x * x;
    
    console.log(square(3));   // 9
    

    매개변수가 하나일 경우에는 괄호를 생략할 수 있다.

    조건문

    if문

    let x = 10;
    
    if (x > 0) {
      console.log("x는 양수입니다.");
    }
    

    if-else문

    let x = -10;
    
    if (x > 0) {
      console.log("x는 양수입니다.");
    } else {
      console.log("x는 음수입니다.");
    }
    

    if-else if-else문

    let x = 0;
    
    if (x > 0) {
      console.log("x는 양수입니다.");
    } else if (x < 0) {
      console.log("x는 음수입니다.");
    } else {
      console.log("x는 0입니다.");
    }
    

    switch문

    let fruit = "사과";
    
    switch (fruit) {
      case "사과":
        console.log("사과는 빨간색입니다.");
        break;
      case "바나나":
        console.log("바나나는 노란색입니다.");
        break;
      case "오렌지":
        console.log("오렌지는 주황색입니다.");
        break;
      default:
        console.log("해당하는 과일이 없습니다.");
        break;
    }
    

    조건부 실행

    let x = 10;
    
    (x > 0) && console.log("x는 양수입니다.");
    

    && 연산자를 사용하여 조건부 실행

    삼항 연산자와 단축 평가

    let x;
    let y = x || 10;
    
    console.log(y);   // 10
    

    삼항 연산자를 사용하여 변수 x가 존재하지 않는 경우 기본값으로 10을 사용합니다. || 연산자를 사용하여 단축 평가(short-circuit evaluation)를 할 수 있습니다. 변수 x가 존재하지 않는 경우, || 연산자는 false 값을 반환하고, 기본값으로 지정한 10을 반환합니다.

    falsy한 값과 truthy한 값

    if (0) {
      console.log("이 코드는 실행되지 않습니다.");
    }
    
    if ("") {
      console.log("이 코드는 실행되지 않습니다.");
    }
    
    if (null) {
      console.log("이 코드는 실행되지 않습니다.");
    }
    
    if (undefined) {
      console.log("이 코드는 실행되지 않습니다.");
    }
    
    if (NaN) {
      console.log("이 코드는 실행되지 않습니다.");
    }
    
    if (false) {
      console.log("이 코드는 실행되지 않습니다.");
    }
    

    falsy한 값들을 사용하여 if문의 조건을 만족시키지 못하도록 한다. 0, 빈 문자열, null, undefined, NaN, false는 falsy한 값으로, if문의 조건을 만족시키지 못한다. 그 외의 값들은 모두 truthy한 값으로, if문의 조건을 만족시킨다.

    배열, 객체 기초

    하나의 변수에 여러개의 값을 넣을 수 있다.

    객체 속성 접근

    let person = {
      name: "홍길동",
      age: 30,
      gender: "남자"
    };
    
    console.log(person.name);   // "홍길동"
    console.log(person.age);    // 30
    console.log(person.gender); // "남자"
    

    Object.keys() 메소드

    let person = {
      name: "홍길동",
      age: 30,
      gender: "남자"
    };
    
    let keys = Object.keys(person);
    
    console.log(keys);   // ["name", "age", "gender"]
    

    객체 person의 속성 이름을 배열로 반환

    Object.values() 메소드

    let person = {
      name: "홍길동",
      age: 30,
      gender: "남자"
    };
    
    let values = Object.values(person);
    
    console.log(values);   // ["홍길동", 30, "남자"]
    

    객체 person의 속성 값들을 배열

    Object.entries() 메소드

    key와 value를 묶어서 배열로 만든 배열(2차원배열)

    let person = {
      name: "홍길동",
      age: 30,
      gender: "남자"
    };
    
    let entries = Object.entries(person);
    
    console.log(entries);
    //[ [ 'name', '홍길동' ], [ 'age', 30 ], [ 'gender', '남자' ] ]
    

    객체 person의 속성 이름과 속성 값들을 2차원 배열로 반환

    Object.assign() 메소드

    객체를 복사한다.

    let person = {
      name: "홍길동",
      age: 30,
      gender: "남자"
    };
    
    let newPerson = {}
    Object.assign(newPerson, person);
    
    console.log(newPerson);   // { name: "홍길동", age: 30, gender: "남자" }
    
    let person = {
      name: "홍길동",
      age: 30,
      gender: "남자"
    };
    
    let newPerson = Object.assign({}, person, { age: 35 });
    
    console.log(newPerson);   // { name: "홍길동", age: 35, gender: "남자" }
    

    새로운 객체 newPerson을 만든다.

    객체 비교

    let person1 = {
      name: "홍길동",
      age: 30,
      gender: "남자"
    };
    
    let person2 = {
      name: "홍길동",
      age: 30,
      gender: "남자"
    };
    
    console.log(person1 === person2);   // false
    console.log(JSON.stringify(person1) === JSON.stringify(person2));   // true
    

    객체는 크기가 상당히 크기때문에 메모리에 저장할 때 별도의 공간에 저장한다.

    person1과 person2 는 저장경로가 다르기때문에

    객체를 비교할 때는 일반적으로 === 연산자를 사용할 수 없다.

    JSON.stringify ⇒ 객체를 문자열화 시킨다.

    JSON.stringify() 함수를 사용하여 객체를 문자열로 변환한 후, 문자열 비교한다.

    객체 병합

    let person1 = {
      name: "홍길동",
      age: 30
    };
    
    let person2 = {
      gender: "남자"
    };
    
    let mergedPerson = {...person1, ...person2};
    
    console.log(mergedPerson);   // { name: "홍길동", age: 30, gender: "남자" }
    

    … : spread operator

    배열의 크기 지정

    let numbers = new Array(5);
    

    크기가 5인 배열 numbers를 생성

    배열 요소 접근

    let fruits = ["사과", "바나나", "오렌지"];
    
    console.log(fruits[0]);   // "사과"
    console.log(fruits[1]);   // "바나나"
    console.log(fruits[2]);   // "오렌지"
    

    배열의 요소에 접근할 때는 대괄호([]) 안에 인덱스 값을 넣는다.

    배열 메소드

    push() 메소드

    let fruits = ["사과", "바나나"];
    
    fruits.push("오렌지");
    
    console.log(fruits);   // ["사과", "바나나", "오렌지"]
    

    push() 메소드는 배열의 끝에 요소를 추가

    pop() 메소드

    let fruits = ["사과", "바나나", "오렌지"];
    
    fruits.pop();
    
    console.log(fruits);   // ["사과", "바나나"]
    

    pop() 메소드는 배열의 마지막 요소를 삭제

    shift() 메소드

    javascriptCopy code
    let fruits = ["사과", "바나나", "오렌지"];
    
    fruits.shift();
    
    console.log(fruits);   // ["바나나", "오렌지"]
    

    shift() 메소드는 배열의 첫 번째 요소를 삭제

    unshift() 메소드

    let fruits = ["바나나", "오렌지"];
    
    fruits.unshift("사과");
    
    console.log(fruits);   // ["사과", "바나나", "오렌지"]
    

    unshift() 메소드는 배열의 맨 앞에 요소를 추가

    splice() 메소드

    let fruits = ["사과", "바나나", "오렌지"];
    
    fruits.splice(1, 1, "포도");
    
    console.log(fruits);   // ["사과", "포도", "오렌지"]
    

    splice() 메소드는 배열의 요소를 삭제하거나, 새로운 요소를 추가할 수 있다.

    slice() 메소드

    let fruits = ["사과", "바나나", "오렌지"];
    
    fruits.splice(1, 1, "포도");
    
    console.log(fruits);   // ["사과", "포도", "오렌지"]
    

    slice() 메소드는 배열의 일부분을 새로운 배열로 만든다.

    forEach() 메소드

    let numbers = [1, 2, 3, 4, 5];
    
    numbers.forEach(function (number) {
      console.log(number);
    });
    // 1
    // 2
    // 3
    // 4
    // 5
    

    배열의 각 요소에 대해 콜백 함수를 실행

    콜백함수 : 매개변수 자리에 함수를 넣는 것

    map() 메소드

    let numbers = [1, 2, 3, 4, 5];
    
    let squaredNumbers = numbers.map(function(number) {
      return number * number;
    });
    
    console.log(squaredNumbers);   // [1, 4, 9, 16, 25]
    

    map() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행하고, 그 결과를 새로운 배열로 반환한다.

    map메소드는 return을 꼭 써줘야하고 반드시 새로운 배열을 빼낸다.

    항상 원본 배열의 길이만큼이 return된다.

    filter() 메소드

    let numbers = [1, 2, 3, 4, 5];
    
    let evenNumbers = numbers.filter(function(number) {
      return number % 2 === 0;
    });
    
    console.log(evenNumbers);   // [2, 4]
    

    filter() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행하고, 그 결과가 true인 요소만 새로운 배열로 반환한다.

    find() 메소드

    let numbers = [1, 2, 3, 4, 5];
    
    let foundNumber = numbers.find(function(number) {
      return number > 3;
    });
    
    console.log(foundNumber);   // 4
    

    find() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행하고, 그 결과가 true인 첫 번째 요소를 반환한다.

    some() 메소드

    let numbers = [1, 2, 3, 4, 5];
    
    let hasEvenNumber = numbers.some(function(number) {
      return number % 2 === 0;
    });
    
    console.log(hasEvenNumber);   // true
    

    some() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행하고, 그 결과가 true인 요소가 하나라도 있는지 확인한다.

    every() 메소드

    let numbers = [2, 4, 6, 8, 10];
    
    let isAllEvenNumbers = numbers.every(function(number) {
      return number % 2 === 0;
    });
    
    console.log(isAllEvenNumbers);   // true
    

    every() 메소드는 배열의 각 요소에 대해 콜백 함수를 실행하고, 그 결과가 true인 요소가 모든 요소인지 확인한다.

    reverse() 메소드

    let numbers = [1, 2, 3, 4, 5];
    
    numbers.reverse();
    
    console.log(numbers);   // [5, 4, 3, 2, 1]
    

    reverse() 메소드는 배열의 요소를 역순으로 정렬(순서 뒤집기)

    반복문

    for문

    기본적인 for문

    for (let i = 0; i < 10; i++) {
      console.log(i);
    }
    // 0
    // 1
    // 2
    // 3
    // 4
    // 5
    // 6
    // 7
    // 8
    // 9
    

    배열과 함께 사용하는 for문

    let numbers = [1, 2, 3, 4, 5];
    
    for (let i = 0; i < numbers.length; i++) {
      console.log(numbers[i]);
    }
    

    배열의 요소를 출력한다. 배열의 요소 개수만큼 반복하여 실행한다.

    for...in문

    let person = { name: "John", age: 30, gender: "male" };
    
    for (let key in person) {
      console.log(key + ": " + person[key]);
    }
    

    객체 person의 프로퍼티를 출력, 객체의 프로퍼티를 순서대로 접근할 수 있다.

    while문

    let i = 0;
    
    while (i < 10) {
      console.log(i);
      i++;
    }
    

    while문은 조건식이 참인 경우에만 코드를 반복해서 실행한다.

    do...while문

    let i = 0;
    
    do {
      console.log(i);
      i++;
    } while (i < 10);
    

    do...while문은 일단 한 번은 코드를 실행하고, 그 후에 조건식을 체크하여 반복 여부를 결정

     

    '항해99(진짜시작)' 카테고리의 다른 글

    항해99 2일차 (ES6)  (0) 2023.04.04
Designed by Tistory.