요소 가져오기

클래스 이름으로 가져오기 .getElementsByClassName("클래스 네임")
아이디 이름으로 가져오기 .getElementById ("아이디 이름")
태그 하나 가져오기 .querySelector("#id") or (태그)
태그 여러개 가져오 .querySelectorAll ( 태그 여러개 )

 


1. 클래스 이름을 이용한 선택

<!-- 
    DOM(Document Object Model)

    HTML 태그들을 하나씩 객체화한 것.
    HTML 페이지의 내용과 모양을 제어하기 위해서 사용되는 객체이다.
    HTML 태그 당 DOM 객체가 하나씩 생성된다.
    HTML 태그의 포함관계에 따라서 부모, 자식, 형제자매 관계로 구성된다.
 -->
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>클래스 이름 선택</title>
    </head>
    <body>
        <h1>클래스 이름을 이용한 선택</h1>
        <ul>
            <li class="odd item">첫 번째 아이템이에요!</li>
            <li class="even item">두 번째 아이템이에요!</li>
            <li class="odd item">세 번째 아이템이에요!</li>
            <li class="even item">네 번째 아이템이에요!</li>
            <li class="odd item">다섯 번째 아이템이에요!</li>
        </ul>
    </body>
    <script>
        HTMLCollection.prototype.forEach = Array.prototype.forEach;

        // odd 글자색을 빨간색으로 변경
        document.getElementsByClassName("odd").forEach((li) => {
            li.style.color = "red";
        });

        // even은 글자색을 녹색으로 변경

        document.getElementsByClassName("even").forEach((li) => {
            li.style.color = "green";
        });

        // 위 코드를 한 줄로 작성

        document.getElementsByClassName("item").forEach((li) => {
            li.className.includes("odd")
                ? (li.style.color = "red")
                : (li.style.color = "green");
        });

        document.getElementsByClassName("item").forEach((li) => {
            li.style.color = li.className.includes("odd") ? "red" : "green";
        });
    </script>
</html>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>클래스 이름 선택 실습</title>
    </head>
    <body>
        <ul>
            <li class="car ferrari">페라리</li>
            <li class="car">람보르기니</li>
            <li class="car">벤츠</li>
        </ul>
    </body>
    <script>
        // 자동차 중 ferrari만 빨간색 글자로 설정,
        // 나머지 자동차는 글자 크기를 20xp로 설정(DOM객체.style.fontSize)

        HTMLCollection.prototype.forEach = Array.prototype.forEach;

        document.getElementsByClassName;

        document.getElementsByClassName("car").forEach((car) => {
            if (car.className.includes("ferrari")) {
                car.style.color = "red";
                return;
            }
            car.style.fontSize = "20px";
        });

        // 자동차 중 ferrari만 빨간색 글자로 설정,
        // 나머지 자동차는 글자 크기를 20xp로 설정(DOM객체.style.fontSize)
    </script>
</html>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>클래스 이름 선택 실습</title>
    </head>
    <body>
        <ul>
            <li class="car ferrari">페라리</li>
            <li class="car">람보르기니</li>
            <li class="car">벤츠</li>
        </ul>
    </body>
    <script>
        // 자동차 중 ferrari만 빨간색 글자로 설정,
        // 나머지 자동차는 글자 크기를 20xp로 설정(DOM객체.style.fontSize)

        HTMLCollection.prototype.forEach = Array.prototype.forEach;

        document.getElementsByClassName;

        document.getElementsByClassName("car").forEach((car) => {
            if (car.className.includes("ferrari")) {
                car.style.color = "red";
                return;
            }
            car.style.fontSize = "20px";
        });

        // 자동차 중 ferrari만 빨간색 글자로 설정,
        // 나머지 자동차는 글자 크기를 20xp로 설정(DOM객체.style.fontSize)
    </script>
</html>

 

 

 


2. name 속성 선택

 

  • name에 특수기호 '-'가 들어가면 [ ] 대괄호로 불러준다.
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>name 속성 선택</title>
    </head>
    <body>
        <form action="" name="join">
            <div>
                <input type="text" name="user-id" placeholder="아이디" />
            </div>
            <div>
                <input
                    type="password"
                    name="user-password"
                    placeholder="비밀번호"
                />
            </div>
            <div>
                <label> </label>
            </div>
        </form>
    </body>
    <script>
        // const [id] = document.getElementsByName("user-id");
        // const [password] = document.getElementsByName("user-password");
        if (!document.join["user-id"].value) {
            console.log("아이디 작성");
            // return;
        }

        console.log(document.join["user-id"]);

        // // 비밀번호 검사하기
        if (!document.join["user-password"].value) {
            console.log("비밀번호 작성");
        }
    </script>
</html>

 

3. 유효성 검사

 

  • 아이디에 값이 없을때 "아이디"를 콘솔에 출력
  • 비밀번호에 값이 없을 때 "패스워드" 출력
  • 아이디 저장을 처음부터 체크되도록 설정
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>name 속성 선택 실습</title>
    </head>
    <body>
        <form action="" name="login">
            <input type="text" name="email" />
            <input type="password" name="password" />
            <div>
                <label>
                    <input type="checkbox" name="save-id" value="" /> 아이디
                    저장
                </label>
            </div>
        </form>
    </body>
    <script>
        // 이메일과 비밀번호를 유효성 검사진행
        if (!document.login.email.value) {
            console.log("아이디");
        }
        if (!document.login.password.value) {
            console.log("패스워드");
        }

        // 아이디 저장을 처음부터 체크되도록 설정

        document.login["save-id"].checked = true;
    </script>
</html>

 


4. innerText / innerHTML

 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>아이디 속성 선택</title>
    </head>
    <body>
        <h1>아이디 속성 선택</h1>
        <div id="first">
            <strong> 첫 번째 DIV 입니다. </strong>
        </div>
        <div id="second">두 번째 DIV 입니다.</div>
        <textarea id="third">세 번째 DIV 입니다.</textarea>
        <button id="btn">완료</button>
    </body>
    <script>
        const first = document.getElementById("first");
        const second = document.getElementById("second");
        console.log(first.innerHTML);
        console.log(first.innerText);

        second.innerHTML = `<strong>${second.innerText}</strong>`;
        second.innerText = `<strong>${second.innerText}</strong>`;

        const third = document.getElementById("third");

        // value: 사용자가 새롭게 입력한 값을 포함해서 가져오기
        console.log(third.value);

        // innerHTML: 기존에 작성되었던 내용만 가져오기
        console.log(third.innerHTML);
    </script>
</html>


 

5. CSS 선택자로 선택

 

  • 두 코드의 결과는 같음
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>CSS 선택자로 선택</title>
    </head>
    <body>
        <h1>CSS 선택자로 선택</h1>
        <p>갖고 싶은 위시 리스트</p>
        <ul>
            <li>집</li>
            <li>맥북</li>
            <li>땅</li>
            <li>건물</li>
            <li>아이폰14</li>
            <li>아이폰12</li>
        </ul>
    </body>
    <script>
        // 내용에 아이폰이 들어간 태그의 스타일 중,
        // fontSize를 30px, color: pink로 변경
        const items = document.querySelectorAll("ul li");
        console.log(items);

        items.forEach((item) => {
            if (item.innerText.includes("아이폰")) {
                with (item.style) {
                    fontSize = "30px";
                    color = "pink";
                }
            }
        });   
        
        </script>
</html>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>CSS 선택자로 선택</title>
    </head>
    <body>
        <h1>CSS 선택자로 선택</h1>
        <p>갖고 싶은 위시 리스트</p>
        <ul>
            <li>집</li>
            <li>맥북</li>
            <li>땅</li>
            <li>건물</li>
            <li>아이폰14</li>
            <li>아이폰12</li>
        </ul>
    </body>
    <script>
        // 내용에 아이폰이 들어간 태그의 스타일 중,
        // fontSize를 30px, color: pink로 변경
 
        const items = document.querySelectorAll("ul li");
        console.log(items);

        items.forEach((item) => {
            if (item.innerText.includes("아이폰")) {
                item.style.fontSize = "30px";
                item.style.color = "pink";
            }
        });

        items.forEach((item) => {
            if (item.innerText.includes("아이폰")) {
                with (item.style) {
                    fontSize = "30px";
                    color = "pink";
                }
            }
        });
        // 내용에 아이폰이 들어간 태그의 스타일 중,
        // fontSize를 30px, color: pink로 변경
    </script>
</html>

 


6. 객체를 동적으로 생성, 삽입, 삭제

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>객체를 동적으로 생성, 삽입, 삭제</title>
    </head>
    <body>
        <p>DOM 트리에 동적으로 객체를 삽입할 수 있다.</p>
        <p>
            createElement("태그명"), appendChild("태그객체"),
            removeChild("태그객체")
        </p>
        <p>위 3개의 메소드를 이용해서 새로운 객체를 생성, 삽입, 삭제한다.</p>
        <a id="create" href="">DIV 생성</a>
    </body>
    <script>
        const a = document.querySelector("#create");
        // 색은 규칙성이 없으므로 리스트에 담음
        const colors = new Array(
            "yellow",
            "red",
            "blue",
            "green",
            "skyblue",
            "orange",
            "pink"
        );

        globalThis.number = 0;
        a.onclick = (e) => {
            // a태그의 디폴트 이벤트를 막음 (이동을 막음)
            e.preventDefault();
            const i = Math.floor(Math.random() * colors.length);
            // 새롭게 생성한 div개체 (비어있는 div)
            const newDiv = document.createElement("div");

            //++을 앞에 쓰면1부터 뒤에쓰면 0부터
            newDiv.innerText = `새로 생성된 div${++number} 태그`;
            newDiv.style.backgroundColor = colors[i];
            newDiv.onclick = (e) => {
                // e.target: 이벤트 객체를 통해 이벤트를 발생시킨 객체를 가져올 수 있다.
                // 부모를 찾아가서 아이를 지움
                e.target.parentElement.removeChild(e.target);
            };

            // 바디에 newDiv생성
            document.body.appendChild(newDiv);
        };
    </script>
</html>

 

div를 클릭하면 삭제

 

 

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

자바스크립트 date  (0) 2024.02.07
fetch  (0) 2024.01.30
object, spread, rest , 비구조화 할당  (0) 2024.01.29
callback  (0) 2024.01.29
function  (0) 2024.01.29
// Date객체
// let 객체명 = new Date();

// Date객체의 주요 메소드
// getFullYear(): 4자리 년도
// getMonth(): 0~11사이의 정수(0: 1월, 1: 2월, ..., 11: 12월)
// getDate(): 한 달 내의 날짜(28~31)
// getDay(): 한 주 내 요일(0: 일요일, 1: 월요일, ..., 6: 토요일)
// getHours(): 0~23사이의 정수
// getMinutes(): 0~59사이의 정수
// getSeconds(): 0~59사이의 정수
// getMilliseconds(): 0~999사이의 정수
// getTime(): 1970년 1월 1일 0시 0분 0초 기준 현재까지의 밀리초
// setFullYear(year): 년도 저장
// setMonth(month): 월 저장
// setDate(date): 한 달 내의 날짜 값 지정
// setHours(hour): 시간 저장
// setMinutes(minute): 분 저장
// setSeconds(second): 초 저장
// setMilliseconds(ms): 밀리초 저장
// setTime(t): 밀리초 단위인 t값으로 시간 저장

let now = new Date();
console.log(now);

// 월은 0부터 시작한다.
let date1 = new Date(2023, 0, 1, 12, 0, 0);
console.log(date1);

let date2 = new Date("fmdslkmfklsdmflksdmkl 2023-01-01");
console.log(date2);

const format = `${now.getHours()}시 ${now.getMinutes()}분`;
console.log(format);
// 기본 Date는 UTC 시간이다.
console.log(now.toUTCString());

// 운영체제에 등록된 로컬 시간을 가져오는 것이 일반적이다.
console.log(now.toLocaleString());

 

 

function timeForToday(datetime) {
    const today = new Date();
    const date = new Date(datetime);

    let gap = Math.floor((today.getTime() - date.getTime()) / 1000 / 60);

    if (gap < 1) {
        return "방금 전";
    }

    if (gap < 60) {
        return `${gap}분 전`;
    }

    gap = Math.floor(gap / 60);

    if (gap < 24) {
        return `${gap}시간 전`;
    }

    gap = Math.floor(gap / 24);

    if (gap < 31) {
        return `${gap}일 전`;
    }

    gap = Math.floor(gap / 31);

    if (gap < 12) {
        return `${gap}개월 전`;
    }

    gap = Math.floor(gap / 12);

    return `${gap}년 전`;
}

console.log(timeForToday("2024-01-29T11:35:00"));

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

자바스크립트 dom  (0) 2024.02.07
fetch  (0) 2024.01.30
object, spread, rest , 비구조화 할당  (0) 2024.01.29
callback  (0) 2024.01.29
function  (0) 2024.01.29

promise

// https://jsonplaceholder.typicode.com/users
// zipcode만 추출하기

fetch("https://jsonplaceholder.typicode.com/users")
    .then((response) => response.json())
    .then((users) => {
        users.forEach((user) => {
            console.log(user.address.zipcode);
        });
    });

// https://jsonplaceholder.typicode.com/users
// zipcode만 추출하기

fetch("https://jsonplaceholder.typicode.com/users")
    .then((response) => response.json())
    .then((users) => {
        users.forEach((user) => {
            const { zipcode } = user.address; // 추출한 zipcode 값을 새로운 변수 zipcode에 할당합니다
            test(zipcode);
        });
    });

function test(zipcode) {
    console.log(zipcode);
}

 

 

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

자바스크립트 dom  (0) 2024.02.07
자바스크립트 date  (0) 2024.02.07
object, spread, rest , 비구조화 할당  (0) 2024.01.29
callback  (0) 2024.01.29
function  (0) 2024.01.29

프로퍼티

  1. js에서는 객체 내부의 필드를 프로퍼티라고 부른다.
  2. 일반적으로 . 을 사용해서 프로퍼티에 접근한다.
  3. 만약 프로퍼티 이름에 "-"와 같은 특수문자가 들어가 있거나 프로퍼티의 이름에 규칙성이 있어서 한 번에 가져와야 할 때에는  []를 사용해서 접근한다.
// JS에서는 객체 내부의 필드를 프로퍼티라고 부른다.
let user = {
    name: "이정륜",
    age: 20,
    address: "경기도",
    introduce: () => {
        console.log("Hi😍");
    },
};
console.log(typeof user);
user.introduce();

// 일반적으로 .를 사용해서 프로퍼티에 접근한다.
console.log(user.name);
// 만약 프로퍼티 이름에 "-"와 같은 특수문자가 들어가 있거나
// 프로퍼티 이름에 규칙성이 있어서 한 번에 가져와야 할 때에는
// []를 사용해서 프로퍼티에 접근한다.
console.log(user["name"]);
object
Hi😍
(2)이정륜

 

 

 

let lunch = new Object();

lunch.name = "김밥";
lunch.price = "3000";

console.log(lunch);

lunch.pay = () => {
    console.log("결제 완료");
};

lunch.pay();
{name: '김밥', price: '3000'}
결제 완료

 

 

 

 

// 마트에 등록되지 않은 고객이 3명이다.
// 고객별 정보는 다음과 같다.

// 1)
// 이름: 홍길동
// 나이: 30
// 포인트: 3500

// 2)
// 이름: 이순신
// 나이: 22
// 포인트: 0

// 3)
// 이름: 장보고
// 나이: 66
// 포인트: 9500

// 3명을 모두 마트에 등록 시킨다.
// 마트 객체를 만들고 각 고객을 프로퍼티로 선언한다.




// 빈 객체를 생성하여 market 변수에 할당
const market = new Object();

// 사용자 객체들을 생성
const user1 = { name: "홍길동", age: 30, point: 3500 };
const user2 = { name: "이순신", age: 22, point: 0 };
const user3 = { name: "장보고", age: 66, point: 9500 };

// market 객체에 사용자 객체들을 프로퍼티로 추가
market.user1 = user1;
market.user2 = user2;
market.user3 = user3;

// 반복문을 통해 market 객체의 각 사용자 정보를 출력
for (let i = 0; i < 3; i++) {                  // 0부터 시작해서 2까지 반복하는 반복문입니다. i 변수가 0에서 2까지 변합니다.
    console.log(market[`user${i + 1}`]); 
}
{name: '홍길동', age: 30, point: 3500}
{name: '이순신', age: 22, point: 0}
{name: '장보고', age: 66, point: 9500}

 


for의 구조

for (initialization; condition; increment/decrement) {
    // 실행할 코드 블록
}
  • initialization: 반복문이 시작될 때 한 번만 실행되며, 주로 반복 변수의 초기화에 사용됩니다.
  • condition: 각 반복마다 평가되는 조건입니다. 조건이 true인 동안 반복이 계속됩니다.
  • increment/decrement: 각 반복이 끝난 후 실행되는 코드로, 주로 반복 변수를 증가시키거나 감소시키는 역할을 합니다.
  • 코드 블록 { ... }: 반복될 코드를 포함하는 블록으로, 조건이 true인 동안 실행됩니다.
for (let i = 0; i < 3; i++) {
    // 반복되는 코드 블록
    console.log(market[`user${i + 1}`]);
}
  • let i = 0: 초기화 단계에서 i라는 반복 변수를 0으로 초기화합니다.
  • i < 3: 조건이 true인 동안에만 반복합니다. i가 3보다 작을 때만 실행됩니다.
  • i++: 각 반복이 끝날 때마다 i를 1씩 증가시킵니다.
  • for 반복문에서 i++를 사용했지만, 콘솔에 출력할 때 market[user${i + 1}]에서 i + 1을 사용하는 이유는 인덱스가 0부터 시작하기 때문입니다.이렇게 반복문에서 사용되는 인덱스 i가 0부터 시작하는 경우, 출력할 때 사용하는 인덱스를 1씩 더해주면 실제 사용자 정보에 접근할 수 있습니다. 따라서 user${i + 1}은 user1, user2, user3과 같은 문자열을 생성하게 되어 market 객체의 해당 프로퍼티에 접근하게 됩니다.
  • 일반적으로 프로그래밍에서 배열이나 리스트의 인덱스는 0부터 시작합니다. 그래서 for 반복문에서 i를 0부터 시작하여 1씩 증가시키면서 반복하는 경우가 많습니다.

따라서 이 for 문은 market 객체에서 user1, user2, user3의 정보를 차례로 콘솔에 출력하는 반복 작업을 수행합니다.


프로토타입

new 뒤에 나오는 생성자를 자바스크립트에서는 프로토타입이라고 부른다.

프로토타입은 함수로 선언하며, 반드시 대문자로 시작한다.

this는 해당 객체를 의미한다.

 

function User(id, pw, name, age) {
    this.id = id;
    this.pw = pw;
    this.name = name;
    this.age = age;
}

han = new User("hds1234", "1234", "이정륜", 20);

console.log(han);
User {id: 'hds1234', pw: '1234', name: '이정륜', age: 20}

 

 

비구조화 할당 ( 구조 분해 )

const user = {
    id: 1,
    name: "ryun",
};

// 비구조화 할당(구조 분해)
const { id, name } = user;
console.log(id, name);
1 ryun

 

 

 

const user = {
    id: 1,
    name: "ryun",
};


const { id: number, name, age = 10 } = user; 
console.log(number, name, age);
1 ryun 10

 

 

 

 

객체 스프레드

 

전개 연산자를 사용하여 객체를 복제

// 기존의 사용자 객체
const user = {
    id: 1,
    name: "ryun",
};

// 전개 연산자(...)를 사용하여 객체를 복제
let userUpdated = { ...user };

// 복제된 객체 출력
console.log(userUpdated);
{id: 1, name: 'ryun'}

 

 

전개 연산자를 사용하여 객체를 복제하고 새로운 속성 추가

// 기존의 사용자 객체
const user = {
    id: 1,
    name: "ryun",
};

// 전개 연산자를 사용하여 객체를 복제하고 새로운 속성 추가
let userUpdated = { ...user, age: 20 };

// 복제된 객체에 새로운 속성이 추가된 것을 출력
console.log(userUpdated);
{id: 1, name: 'ryun', age: 20}

 

 

// 이미 해당 프로퍼티가 존재하면 수정된다.

const user = {
    id: 1,
    name: "ryun",
};

let userUpdated = { ...user, name: "ro" };

console.log(userUpdated);
{id: 1, name: 'ro'}

 

 

 

// rest
const user = {
    id: 1,
    name: "ryun",
};

const userUpdated = { ...user, age: 20 };

const { age, ...rest } = userUpdated;
console.log(age, rest);
20 {id: 1, name: 'ryun'}

 

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

자바스크립트 date  (0) 2024.02.07
fetch  (0) 2024.01.30
callback  (0) 2024.01.29
function  (0) 2024.01.29
oper , switch  (0) 2024.01.29
// 함수 표현식
const printName = function (name) {
    console.log(name);
};

// 화살표 함수 표현식
const printNameArrow = (name) => {
    console.log(name);
};

// 함수 호출
printName("John"); // 함수 표현식 호출
printNameArrow("Jane"); // 화살표 함수 표현식 호출
  1. 함수 표현식:
    • const printName = function (name) { console.log(name); };: printName이라는 변수에 함수를 할당하는 함수 표현식입니다.
    • 이 함수는 name 매개변수를 받아 콘솔에 출력하는 기능을 수행합니다.
  2. 화살표 함수 표현식:
    • const printNameArrow = (name) => { console.log(name); };: 화살표 함수 표현식입니다. 화살표 함수는 간결하게 함수를 표현할 수 있습니다.
    • 역시 name 매개변수를 받아 콘솔에 출력하는 기능을 수행합니다.
  3. 함수 호출:
    • printName("John");: 함수 표현식을 호출하고, "John"이라는 인자를 전달하여 실행합니다.
    • printNameArrow("Jane");: 화살표 함수 표현식을 호출하고, "Jane"이라는 인자를 전달하여 실행합니다.

 


두 정수의 덧셈 결과 출력

// 두 정수의 덧셈 결과 출력

const add = (number1, number2, callback) => {
    if (callback) {
        callback(number1 + number2);
    }
    return number1 + number2;
};

add(1, 4, (result) => {
    console.log(result);
});

 

두 정수의 곱셈을 구한 뒤 결과에 2를 곱해서 출력

// 두 정수의 곱셈을 구한 뒤 결과에 2를 곱해서 출력
const multply = (number1, number2, callback) => {
    if (callback) {
        callback(number1 * number2);
    }
    return number1 * number2;
};

const total = multply(2, 5, (result) => {
    console.log(result * 2);
});

 

성과 이름을 전달받아서 풀네임을 만든 뒤 "000님" 출력

// 성과 이름을 전달받아서 풀네임을 만든 뒤 "000님" 출력
const fullname = (firstname, lastname, callback) => {
    if (callback) {
        callback(firstname + lastname);
    }
    return firstname + lastname;
};

const welcome = fullname("김", "정륜", (named) => {
    console.log(named + "님");
});

 

 

상품 1개 가격과 총 합을 입력받고 개수를 알아낸 뒤
개수가 5개 이하라면 true 아니면 false

// // 상품 1개 가격과 총 합을 입력받고 개수를 알아낸 뒤
// // 개수가 5개 이하라면 true 아니면 false
const product_price = (price, allcost, callback) => {
    if (callback) {
        callback(allcost / price);
    }
    return allcost / price;
};

const boolean = product_price(1000, 10000, (count) => {
    console.log(count < 5);
});

 

결제 상품 가격과 결제 상태를 전달받아서
결제 상태가 true일 때 결제 완료, false일 경우 결제 취소 출력
가상의 결제 정보

// 결제 상품 가격과 결제 상태를 전달받아서
// 결제 상태가 true일 때 결제 완료, false일 경우 결제 취소 출력
// 가상의 결제 정보

const product = (price, pdstatus, callback) => {
    if (callback) {
        callback(pdstatus ? `${price}원 결제완료` : `${price}:원 결제취소`);
    }
};

const cash = product(1000, true, (result) => {
    console.log(result);
});

 

두 수를 받고 몫과 나머지 1)

// 두 수를 받고 몫과 나머지 1)
const calc = (num1, num2) => {
    if (num2 === 0) {
        return console.log("0으로 나눌 수 없습니다.");
    }

    var share = num1 / num2;
    var rest = num1 % num2;

    return `몫:${share}, 나머지: ${rest}`;
};

var num1 = 10;
var num2 = 2;
result = calc(num1, num2);
console.log(result);

 

 

두 수를 받고 몫과 나머지 2)

const quotientAndRemainder = (number1, number2, callback) => {
    const result = {
        quotient: Math.floor(number1 / number2),
        remainder: number1 % number2,
    };

    if (callback) {
        callback(result.quotient, result.remainder);
    }

    return result;
};

const result = quotientAndRemainder(5, 0, (quotient, remainder) => {
    console.log("Quotient:", quotient);
    console.log("Remainder:", remainder);
});

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

fetch  (0) 2024.01.30
object, spread, rest , 비구조화 할당  (0) 2024.01.29
function  (0) 2024.01.29
oper , switch  (0) 2024.01.29
scope ( let , var, const )  (0) 2024.01.29

function

 

 

 

함수는 무조건 값으로 본다.

function add(number1, number2) {
    return number1 + number2;
}

 

 

 

디폴트 파라미터 :  값이 전달되지 않았을 경우, 초기값을 설정할 수 있다.

 

number3 = 0 으로 디폴트 파라미터를 줌

function add(number1, number2, number3 = 0) {
    return number1 + number2 + number3;
}

let result = add(1, 3); // 4
console.log(result);

 

 

아이디, 비밀번호, 닉네임을 전달받는다.
이 때 닉네임의 기본 값은 '없음'으로 설정한다.

function getInfo(id, password, nickname = "없음") {
    console.log(id, password, nickname);
}

getInfo("이해영1234", "1234");

 

 

가변인자 :

함수가 임의의 개수의 인자를 받을 수 있는 기능을 말합니다.

JavaScript에서는 나머지 매개변수(rest parameters)를 사용하여 가변 인자를 처리할 수 있습니다.

 

나머지 매개변수는 함수 정의에서 세 개의 점(...)으로 표시되는 매개변수입니다. 이를 통해 함수는 전달된 모든 인자들을 배열로 수집할 수 있습니다. 가변 인자는 배열로 처리되므로 배열의 다양한 메서드나 반복문을 사용하여 요소에 접근할 수 있습니다.

 

function exampleFunction(...args) {
    // args는 전달된 모든 인자를 배열로 저장
    for (let arg of args) {
        console.log(arg);
    }
}

exampleFunction(1, 2, 3, 4, 5);

 

위의 예제에서 exampleFunction은 가변 인자를 사용하여 어떤 수의 인자도 받을 수 있습니다. 호출할 때 전달된 인자들은 args라는 배열에 저장되고, 이 배열을 반복문을 통해 출력할 수 있습니다.

 

 

// 가변 인자
function add(...args) {
    for (let i in args) {
        console.log(`index: ${i}`);
    }

    for (let i of args) {
        console.log(`value: ${i}`);
    }
}

add(1, 2, 3, 4, 5);
index: 0
index: 1
index: 2
index: 3
index: 4
value: 1
value: 2
value: 3
value: 4
value: 5

 

 

 

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

object, spread, rest , 비구조화 할당  (0) 2024.01.29
callback  (0) 2024.01.29
oper , switch  (0) 2024.01.29
scope ( let , var, const )  (0) 2024.01.29
javascript 메소드 정리  (0) 2024.01.28
let data1 = 1;
let data2 = "1";
console.log(data1 == data2); // true
console.log(data1 === data2); // false

 

1. == (동등 연산자):

  • 두 값이 같으면 true를 반환합니다.
  • 타입이 다르면 JavaScript는 암묵적으로 형 변환을 시도하여 동등성을 확인합니다.
  • 예를 들어, 문자열 "5"와 숫자 5를 ==로 비교하면 JavaScript는 문자열을 숫자로 변환하여 비교합니다.

 

2. === (일치 연산자):

  • 두 값이 정확하게 같아야만 true를 반환합니다.
  • 타입도 비교하며, 타입이 다르면 ===는 false를 반환합니다.
  • 예를 들어, 문자열 "5"와 숫자 5를 ===로 비교하면 false가 반환됩니다.

 

일반적으로 ===를 사용하는 것이 권장되며, 타입 변환으로 인한 예기치 못한 동작을 방지할 수 있습니다. 엄격한 동등성을 검사하므로 코드를 더 명확하게 만들어주고 버그를 줄이는 데 도움이 됩니다.

 


||

 

  • || : 앞에 있는 값이 false 값이라면, 뒤에 있는 값으로 사용된다.
  • false로 취급되는 값 : "", null, 0, undefined
// : 앞에 있는 값이 false 값이라면, 뒤에 있는 값으로 사용된다.
// false로 취급되는 값 : "", null, 0, undefined

let value;
console.log(typeof value); //undefined

let data = value || 10;
console.log(data);

 

 

&&

  • && : 앞의 조건식이 false라면, false이고,  앞의 조건식이 true라면 뒤에 적은 값으로 대체된다.
// && : 앞의 조건식이 false라면, false이고
// 앞의 조건식이 true라면 뒤에 적은 값으로 대체된다.

let check = false;
console.log(check && 10); // false

// 삼항 연산자
let check = 10 > 11;
console.log(check ? 10 : 11); // 11

 


switch

// switch
// 하나의 변수에 여러 개의 값이 담길 수 있다면,
// 매번 ==으로 비교하는 if문 보다 switch문을 사용하면 더 간결해진다.

let choice = 1;

switch (choice) {
    case 1:
        console.log("choice는 1입니다.");
        break;
    case 2:
        console.log("choice는 2입니다.");
        break;
    case 3:
        console.log("choice는 3입니다.");
        break;
    default:
        console.log("다시 시도해주세요");
        break;
}

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

callback  (0) 2024.01.29
function  (0) 2024.01.29
scope ( let , var, const )  (0) 2024.01.29
javascript 메소드 정리  (0) 2024.01.28
queue.js  (0) 2024.01.28

let 

 

let을 사용한 경우: 

  1. let으로 선언된 변수 i는 블록 스코프를 갖기 때문에 for 루프 안에서만 유효합니다.
  2. 루프 외부에서 console.log(i);를 호출하면 "Error: i is not defined"가 발생합니다.
  3. let은 블록 스코프를 갖기 때문에 블록 외부에서는 변수에 접근할 수 없습니다.
// // 지역 변수
for (let i = 0; i < 10; i = i + 1) {
    console.log(i);
}

console.log(i);  // Error: i is not defined 에러 발생

 

 

var

 

var를 사용한 경우:

  1. var로 선언된 변수 i는 함수 스코프를 갖기 때문에 블록 내에서 선언되었더라도 루프 외부에서도 유효합니다.
  2. 따라서 console.log(i);는 루프 외부에서도 동작하며, 결과적으로 마지막으로 할당된 값인 10을 출력합니다.
  3. var는 함수 스코프를 갖기 때문에 블록 스코프를 가지지 않아서 블록 내부에서 선언된 변수도 함수 내에서 유효합니다.
for (var i = 0; i < 10; i = i + 1) {
    console.log(i);
}

console.log(i);
0
1
2
3
4
5
6
7
8
9
10

 

function example() {
    if (true) {
        var x = 10; // 블록 내부에서 선언된 변수
    }
    console.log(x); // 함수 내에서 유효하므로 출력 가능
}

example(); // 10

 

 

  • 위의 코드에서 var x는 if 블록 내에서 선언되었지만, 함수 example 내에서는 어디에서든 접근 가능합니다.
  • 이것은 var가 함수 스코프를 가지기 때문에 발생하는 특징입니다.

 

 

요약

  • let은 블록 스코프를 가지므로 블록 외부에서 변수에 접근할 수 없지만,
  • var는 함수 스코프를 가지므로 블록 외부에서도 변수에 접근할 수 있습니다.

 

 

Node.js에서는 전역변수들을 모두 global 객체에서 관리한다.
브라우저(b_scope.html)에서는 window 객체에서 전역변수를 관리한다.
따라서 어디에서 사용될 지 모를 때에는 globalThis 객체를 사용하면 된다.

// 전역 변수: globalThis 객체를 사용하여 전역 변수 x를 설정
globalThis.x = 10;

// 전역 변수: 외부 블록에서 선언된 전역 변수 y
let y = 10;

function f() {
    // 지역 변수: 함수 내에서만 유효한 지역 변수 x
    let x = 20;
    console.log("globalThis.x:", `${globalThis.x}`, " x :", x);
}

// 함수 f 호출
f();

// 전역 변수 y 출력
console.log("y:", `${y}`);

// 전역 변수 x 출력
console.log("globalThis.x:", `${globalThis.x}`);
globalThis.x: 10  x : 20
y: 10
globalThis.x: 10

 

 

const

  1. const는 상수를 선언할 때 사용되는 키워드로, 한 번 값을 할당하면 재할당이 불가능합니다.
  2. 상수는 프로그램에서 항상 고정된 값을 가지며 변경되지 않아야 하는 경우에 사용됩니다.

 

const ERROR_CODE = 403;
// ERROR_CODE = 404; // Error: Assignment to constant variable.
console.log(ERROR_CODE);
403

 

 

 

  1. const ERROR_CODE = 403;: ERROR_CODE라는 상수를 선언하고, 초기값으로 403을 할당합니다.
  2. 주석 처리된 ERROR_CODE = 404;: const로 선언된 상수는 재할당이 불가능하기 때문에 이 줄의 코드를 주석 처리하지 않으면 에러가 발생합니다. 에러 메시지는 "Assignment to constant variable."로 나타납니다.
  3. console.log(ERROR_CODE);: 상수 ERROR_CODE의 값을 출력합니다. 이 경우에는 403이 됩니다.

 

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

function  (0) 2024.01.29
oper , switch  (0) 2024.01.29
javascript 메소드 정리  (0) 2024.01.28
queue.js  (0) 2024.01.28
자바스크립트  (0) 2024.01.28

push() : 가장 마지막에 값 추가

let datas = [10, 8, 20, 3, 2];

datas.push(100);
console.log(datas);
[10, 8, 20, 3, 2, 100]

 

 

join() :전달한 값으로 구분한 뒤 문자열로 리턴

let datas = [10, 8, 20, 3, 2];

console.log(datas.join(", "));
10, 8, 20, 3, 2

 

 

slice(begin, end): 원하는 부분을 추출하기 위해 시작 인덱스와 마지막 인덱스를 전달한다.
slice(begin): 시작 인덱스부터 마지막까지 추출한다.

let datas = [10, 8, 20, 3, 2];

console.log(datas.slice(1, 3));
console.log(datas.slice(1));
(2) [8, 20]
(4) [8, 20, 3, 2]

 

 

splice(index, count) : 삭제
splice(index, count, ...args) : 교체

let datas = [10, 8, 20, 3, 2];

datas.splice(1, 1);
console.log(datas);

datas.splice(1, 1, 200);
console.log(datas);
(4) [10, 20, 3, 2]
(4) [10, 200, 3, 2]

 

 

pop() : 마지막 요소 삭제

let datas = [10, 8, 20, 3, 2];

const dataRemoved = datas.pop();
console.log(`${dataRemoved} 삭제`);
console.log(datas);
2 삭제
(4) [10, 8, 20, 3]

 

 

shift() : 첫 번째 요소 삭제

let datas = [10, 8, 20, 3, 2];

const dataRemoved = datas.shift();
console.log(`${dataRemoved} 삭제`);
console.log(datas);
10 삭제
(4) [8, 20, 3, 2]

 

 

 

indexOf(value) : value를 해당 Array객체에서 찾은 뒤 인덱스 번호를 리턴한다. 못찾으면 -1을 리턴한다.

 

(1) Array객체에서 해당 value를 찾았을 때

let datas = [10, 8, 20, 3, 2];

const i = datas.indexOf(3);
console.log(i);
3

 

 

(2) Array객체에서 해당 value를 못 찾았을 때

let datas = [10, 8, 20, 3, 2];

const i = datas.indexOf(90);
console.log(i);

 

-1

 

 

spread operation 

 

  • 배열이나 객체를 펼쳐서 각 요소 또는 속성을 개별적으로 처리할 수 있게 해주는 문법
  • 주로 배열이나 객체를 복사하거나, 함수의 인자로 전달할 때 사용
let datas = [10, 8, 20, 3, 2];

const numbers = [...datas];
console.log(numbers);
(5) [10, 8, 20, 3, 2]

 

 

spread operation 예시)

 

배열에서의 사용

const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];

console.log(arr2); // [1, 2, 3, 4, 5]

 

 

객체에서의 사용

const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 };

console.log(obj2); // { a: 1, b: 2, c: 3 }

 

 

함수의 인자로 사용

function myFunction(...args) {
  console.log(args);
}

myFunction(1, 2, 3, 4); // [1, 2, 3, 4]

 

 

비구조화 할당

let datas = [10, 8, 20, 3, 2];

const [number1, number2, number3, number4, number5, number6 = 5] = datas;
console.log(number1, number2, number3, number4, number5, number6);
10 8 20 3 2 5

 

 

forEach(callback) 

  • 배열의 각 요소에 대해 주어진 콜백 함수를 한 번씩 실행하는 역할
  • 이 메서드는 각 요소의 값뿐만 아니라 인덱스와 배열 자체도 콜백 함수에 전달할 수 있습니다.
let datas = [10, 8, 20, 3, 2];

datas.forEach((data, i, datas) => {
    console.log(data, i);
    datas[i] = i + 1;
});

console.log(datas);
10 0
8 1
20 2
3 3
2 4
(5) [1, 2, 3, 4, 5]

 

 

map(callback)

  • 배열의 각 요소에 대해 주어진 콜백 함수를 호출하고, 각 요소에 대한 변환된 값을 새로운 배열로 반환
  • map은 원본 배열을 변경하지 않고 새로운 배열을 생성
let datas = [10, 8, 20, 3, 2];

const result = datas.map((data) => data * 2);
console.log(result);
[20, 16, 40, 6, 4]

 

 

filter(callback)

  • 주어진 콜백 함수의 조건을 만족하는 요소만을 필터링하여 새로운 배열로 반환합
  • filter 메서드는 원본 배열을 변경하지 않고 새로운 배열을 생성
as = [10, 8, 20, 3, 2];

const result = datas.filter((data) => data % 5 == 0); //5로 나누었을때 나머지가 0인 수만 출력
console.log(result);
 [10, 20]

 

 

reduce(callback)

  • 초기값을 설정하면 data에 0번째부터 들어온다.
  • 초기값을 설정하지 않으면 data에 1번째부터 들어온다. 이 때, 0번째 값이 variable로 들어온다.
let datas = [10, 8, 20, 3, 2];

const result = datas.reduce((variable, data, i) => {
    console.log(variable);
});
10
(3)undefined

 

 

let datas = [10, 8, 20, 3, 2];

const result = datas.reduce((variable, data, i) => {
    console.log(variable);
}, 0);
0
(4)undefined

 

 

 

let datas = [10, 8, 20, 3, 2];

const result = datas.reduce((variable, data, i) => {
    console.log(data, i);
});
8 1
20 2
3 3
2 4

 

 

 

 

let datas = [10, 8, 20, 3, 2];

const result = datas.reduce((variable, data, i) => {
    console.log(data, i);
}, 0);
10 0
8 1
20 2
3 3
2 4

 

 

let datas = [10, 8, 20, 3, 2];

const result = datas.reduce((variable, data, i) => {
    variable.push(i + 1);
    return variable;
}, []);

console.log(result);
(5) [1, 2, 3, 4, 5]

 

 

 

let datas = [10, 8, 20, 3, 2];

const result = datas.reduce((variable, data, i) => {
    variable[`${i}`] = data;
    return variable;
}, {});

console.log(result);
{0: 10, 1: 8, 2: 20, 3: 3, 4: 2}

 

 

 


문자열

split() : 문자열을 Array 객체로 사용하고자 한다면, split()을 사용한다.

 

"월화수목금토일".split("").forEach((data) => {
    console.log(data);
});
월
화
수
목
금
토
일

 

 

 

includes(value) : value가 문자열에 포함되었는 지 검사

console.log("ABCD".includes("B"));
true

 

 

 

Array() 

  • JavaScript에서 배열을 생성하는 내장 생성자(constructor) 함수
  • Array() 생성자를 사용하여 배열을 만들 수 있습니다.
const datas = new Array(7).fill(0);
datas.forEach((data) => {
    console.log(data);
});
(7) 0

 

 

 

 

 

 


10~1까지 Array 객체에 담은 후 짝수만 출

// 10~1까지 Array 객체에 담은 후 짝수만 출력
const number = new Array(10).fill(0).map((_, i) => 10 - i);
const evens = number.filter((number) => number % 2 == 0);
console.log(evens);

 

한글을 숫자로

예) 삼사칠구->3479

const changeNumber = (...input) => {
    const hangul = [..."공일이삼사오육칠팔구"];
    return Number(input.map((c) => hangul.indexOf(c)).join(""));
};

const input = "공사칠구";
const result = changeNumber(...input);
console.log(result);

 

 

1~100까지 합 출력

const result = new Array(100)
    .fill(0)
    .reduce((variable, _, i) => variable + i + 1, 0);

console.log(result);

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

function  (0) 2024.01.29
oper , switch  (0) 2024.01.29
scope ( let , var, const )  (0) 2024.01.29
queue.js  (0) 2024.01.28
자바스크립트  (0) 2024.01.28
  • setTimeout 은 0초를 설정해도 1ms 후 실행되도록 설계되어 있다.
setTimeout(() => {
    console.log("timer");
}, 0);

setImmediate(() => {
    console.log("check");
});
const fs = require("fs");
fs.readFile("test.txt", (result) => {
    setTimeout(() => {
        // 1. 타이머 등록
        console.log("timer");
    });

    setImmediate(() => {
        //  2. 체크 등록
        console.log("check"); // 3. 폴에서는 setImmediate 실행이 우선
    });
});
check
timer
 
 
 
 
 
// tick이 모두 작업된 후 다음 절차로 넘어간다.
const setTick = () => {
    process.nextTick(setTick); 
    // setTick이라는 함수 안에서 setTick 호출
}; // nextTick(setTick)에 들어가는 setTick은 콜백함수 => 무한 루프

setTick();

setTimeout(() => {
    // 순서상 타이머가 가장 먼저 처리가 되어 타이머쪽에 setTimetout 설정
    console.log("timer"); 
    // setTick이 setTimeout보다 먼저 실행 되기때문에 timer는 실행될 수 없다.
}); // 실행하면 nextTick으로 계속 무한루프가 돌기 때문에 콘솔에 아무것도 출력되지 않는다.

 

 

 

 

1. 타이머 큐에 등록

2. 검사 큐에 등록

3. 틱 큐에 등록

 

1. 틱 큐 비우기

1-1. 틱 안에 타이머2를 처리하고자 타이머1도 처리

1-2. 1번 틱 안에 검사2를 처리하고자 검사1도 처리된다.

2. 2번 틱 처리

 

setTimeout(() => {
    console.log("timer1");
}, 0);
setImmediate(() => {
    console.log("check1");
});
process.nextTick(() => {                             // 1번째 틱
    setTimeout(() => console.log("timer2"), 0);
    setImmediate(() => {
        process.nextTick(() => console.log("tick2"));    // 2번째 틱
        console.log("check2");
    });
    console.log("tick1");                            // 콜 스택에서 처리하므로 1번째 틱에 들어왔는지 출력
});

 

tick1
timer1
timer2
check1
check2
tick2
 

 

 

( 이벤트 루프 절차 )

 

tick2 가 바로 처리 되지 않은 이유 :

  • tick1이 실행 되어야 tick2가 실행된다.
  • tick1 안에 setTimeout과 setImeediate가 들어가있다.

timer1, timer2가 tick1다음으로 나온 이유 :

  • 등록이 timer1, timer2가 되고 timer큐 작업이 끝나야 다음 절차로 넘어간다.
  • 풀 에서 통신이나 DB 등 처리할 것이 있는지 검사한다.
  • check1,2는 풀에서 작업 되는것이 아니기 때문에 순서상 타이머가 먼저 처리가 된다.
  • (정리) 풀에서 통신이나 DB를 처리할 것이 있는지 검사후 없으므로 check로 오고 등록된 check실행
  • tick1 처리 끝

마지막 tick2 실행 후 종료

'컴퓨터 비전 > Javascript' 카테고리의 다른 글

function  (0) 2024.01.29
oper , switch  (0) 2024.01.29
scope ( let , var, const )  (0) 2024.01.29
javascript 메소드 정리  (0) 2024.01.28
자바스크립트  (0) 2024.01.28