자바스크립트 요약

자바스크립트 요약

자바스크립트 기초


자바스크립트 입출력

import * as readline from "readline"

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
    
  console.log("input: ", line);
  rl.close();
});

rl.on("close", () => {
  process.exit();
});

자바스크립트 자료형과 선언

//선언후에도 파이썬 처럼 자료형 변경이 자유로움
let id=10 //변수
const name="이름" //상수
console.log(id+name) //문자열과 연산하면 자동으로 형변환

//형변환1
parseInt(name) //문자를 숫자로 변환 "10"=>10, "이름"=>nan
        //그외 parseFloat 도 있다

//형변환2
String(id) //입력값을 문자로
Number(id) //문자형을 숫자로 변환
  • 대입 연산시(=) 값이 복사되는것(불변형)
Number숫자
Boolean참거짓
String문자열
null, undefined명시적인 무 와 아직 할당 안한 무를 의미
  • 대입 연산시(=) 주소가 복사되는것(복사시 같은 것을 가르키게 됨)(가변형)
class같은 인스턴스를 가르킴
{ }객체
[]배열

자바스크립트 배열과 객체

//배열
let arr=[0,1,2,3]
arr.push(4)//0을 뒤에 삽입
arr.unshift(-1)//-1을 맨 앞에 삽입
console.log("배열: ",arr, "길이: ",arr.length)
console.log(arr.pop())//맨뒤의 값을 추출 후 삭제
console.log(arr.shift())//맨앞의 값을 추출 후 삭제(dequene)
console.log(arr[1])//임의위치 접근
console.log(arr)

//객체
const obj={
    name:"익명",
    func: function(){
        console.log("함수1")
    },
    get fullName(){
        return this.name+""+"is Name"
    },
    set fullName(value){
        this.name=value //객체 내부 함수에서 객체값에 접근할떈 무조건 this가 필요
    }
}
ref={}
name="유저" //값형식은 복제
ref.func=()=>console.log("함수2")//주소형식은 주소를 전달
ref["name"]=obj.name //두가지 방식으로 객체 사용가능
console.log(obj) 
obj.func()
obj["fullName"]="객체 is Name"

//스프레드
let a=[0,1,2]
let b=[...a] //펼쳐서 복사

let { c, d, e=3}= { c: 1, d: 2 } //키 값이 같은 것에 맵핑. 없으면 무시

const object = { f: 1, g: 2, h:3 }
let {f, ...rest}=object //f 빼고 나머지는 rest로 간다 
  • 자바스크립트는 왠만하면 에러가 안난다.
  • 길이 4짜리 배열에 [4]을 연산해도 undefined가 뜰뿐
  • 배열이 아닌 자료형에도 [ ] 연산해도 undefined가 뜬다.
  • 객체는 파이썬의 딕셔너리와 비슷

자바스크립트 연산

let a=10
let b=4
let result=0

//가감승제
result=a + b // 14
result=a - b // 6 
result=a * b // 40 
result=a / b // 2.5 (자료형 변환)
result++ // 3.5 단항 연산

//나머지 제곱
result=a%b # 2
result=a**b # 10^4

//문자열 연산
a="가"
b="나"
c=1
print(a+b) # 가나 (c는 자료형이 다르므로 안됨)
print(a,b,c)# 가나1

//널 연산
1+nan #nan 
1+undefined #nan
1+null #1

//비트 연산 (&,|,^,~) 왠만해선 사용하지 말것
result= a&b # 0b1010 0b100 0

//연산하고 대입
b+=a # b=b+a 와 동일 

  • 숫자형 끼리는 자동 형변환을 해줌
  • 숫자형을 문자열로 자동으로 바꿔주진 못함

파이썬 조건문

//비교
a=1
b=1.0
c="1"
d=[1]
e=[1]//같은 값을 가져도 주소가 다르므로 다른 취급
console.log(
        "==는 자료형을 따지지 않는다\n", //!=
        "비교 예: ",a==b, " ",
        "비교 예: ",a==c, " ",
        "비교 예: ",a==d, " ",
        "비교 예: ",d==e, " ")//모두 True, 마지막만 false 
console.log(
        "===는 자료형을 엄격하게 따진다\n", //!==
        "비교 예: ",a===b, " ", 
        "비교 예: ",a===c, " ", 
        "비교 예: ",d===e, " ")첫번째만 True

//switch 문
let value="5"

switch (value) {
    case '1':
      console.log('1번');
      break;
    case '2':
        console.log('2번');
      break;
    default:
        console.log('3번');
}

//if문
let a=10
let b=11

if (a > b) {
  console.log('a 가 b보다 큽니다.');
} else if(a == b){
    console.log('a 가 b와 같습니다.');
} else{
    consolo.log("a 가 b보다 작습니다"
}
  • 문자형도 숫자형으로 자동 형변환 해줌
  • 단일원소 배열도 같은 취급 해버림(다만 배열끼리는 안됨)
  • 객체는 같은 원소가 들어있어도 키 때문에 다른 취급(객체끼린 안됨)
  • null, undefined, 0, NaN은 false 취급
  • 삼항연산자도 사용가능

자바스크립트 반복문

//쉬운 사용법
let value=[]
for(let i=0;i<10;i++){
  value.push(i)
}
for(i in value)
{
  console.log(i)
}

value="0" 
//이런 말도 안되는게 허용된다. 심하게 자유로운 구조
while(value<10){
  console.log(value)
  value++
}
console.log(typeof(value))//자료형이 변환되있다

//반복 함수
const array = [1, 2, 3, 4, 5, 6, 7, 8];
//모두 결과가 같다
array.forEach(n => {
  console.log(n)  
});//원소를 각각 반복

array.map(n => console.log(n))// 원소를 각각 반복

console.log("인덱스 찾기",array.indexOf("1")) //없는 값은 -1로, 있는 값은 인덱스로 반환

filteringArr=array.filter(n=>n%2===0)//조건에 맞는 배열(객체)를 반환가능   
console.log("짝수로 필터링: ",filteringArr)

자바스크립트 심화


파이썬 메서드

//방법1
function method(first=1, second=2){
    console.log("변수값: ",first, second)
    return first+second
}
result=method(1,10)
console.log(result)

//방법2
method=(first=1, second=2)=>{
    console.log("변수값: ",first, second)
    return first+second
}
result=method(11,10)
console.log(result)

자바스크립트 클래스

class instanceClassParent{
    constructor(name){
        this.name=name //this로 인스턴스 변수 선언
        console.log(name)
    }//생성자
}//c#처럼 생성가능. 생성자를 constructor로 하기로 약속

class instanceClass extends instanceClassParent{
    constructor(name="기본파라메터"){
        super(name)//부모 생성자 명시적으로 호출 해야함
    }//생성자

    func() {
        console.log(this.name)
    }
}//extends로 상속 가능

new instanceClass().func() //c#처럼 new 로 선언
  • 다중 상속 불가
  • 자바처럼 extends로 상속

자바스크립트 익스포트 임포트

//익스포트 a.js
function sayHi(user) {
    console.log(`Hello, ${user}!`);
}
  
function sayBye(user) {
    console.log(`Bye, ${user}!`);
}
  
export {sayHi, sayBye}; // 두 함수를 내보냄

//익스포트 b.js
function sayGood(){
    console.log(`Good`);
}
export default sayGood; //하나만 내보냄

//익스포트 c.js
function sayBad(){
    console.log(`Bad`);
}
export.sayBad = sayBad;

//임포트 main.js
import * as say  from './a.js';// 여러개를 따로 받으므로 따로 따로 호출
import good from './b.js'; //하나만 받으므로 그 자체 취급

say.sayHi('John');
good();
say.sayBye('John');

//임포트 main2.js
const bad = require("./c.js")
bad.sayBad()
  • import 구문은 es6부터 지원되므로 package.json에 "type": "module” 를 추가
  • c.js에서 export 그 자체를 require("./c.js")로 불러오는 구조

자바스크립트 초중요 비동기


//옛날 방법1. 프로미스를 변수처럼 생성
//프로미스 생성만으로 실행된다. resolve는 성공, reject는 에러시에 사용
const myPromise = new Promise((resolve, reject) => {
    setTimeout(() => {
        console.log("myPromise Call")
        resolve(1)
    }
       , 500) //0.5초 뒤에 결과값을 반환
})

myPromise.then(n => {
    console.log(n);
}).catch(error => {
    console.log(error);
})//결과값을 반환 받고 함수를 실행. 에러가 나면 캐치가 해결
//myPromise call->1

//옛날방법2. 함수로 생성
function promiseRecursion(n){
    return new Promise((resolve, reject) => {
       console.log("지금값은 ",n)
       resolve(++n)
       return n
    });
}
promiseRecursion(0).then(
    promiseRecursion
).then(
    promiseRecursion
).then(
    promiseRecursion
).catch(e=>{
    console.error(e)
})//반환값을 연속 비동기사용. 호출시 자동 사용
//지금값은 0->1->2->3 (1초간격으로)

//추천 async await방법
async function asyAwait(){
    console.log('안녕하세요!')
    await new Promise(resolve=> setTimeout(resolve, 1000))
    console.log('반갑습니다!')
    
}
async function useAsync(name){
    try {
        await asyAwait(); //await 로 기다릴수 있다. 함수밖 루프는 속행
                        //(함수밖도 await로 기다리지 않을때)
      } catch (e) {
        console.error(e);
      }finally{
        console.log(name,"종료")
        return name
        
      }
}

await useAsync("유저") //안녕하세요->1초후->반갑습니다
//await가 있으면 종료까지 기다리고. 없으면 실행시키도 멈추면 다음으로
  • 자바스크립트를 쓰는 대표적인 이유
  • async await만은 꼭 알아둘것
  • await Promise.all([a,b,c]) //비동기 세개의 배열반환
  • await Promise.race([a,b,c]) //입력값중 하나 먼저온것만 반환. 셋다 실행은 됨

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.