<자바스크립트 완벽가이드> 3주차

이현정·2022년 5월 29일
0
post-thumbnail

🔖 읽은 범위: ~p.100 (4장 표현식과 연산자~p.111)

조금 정신 없는 상태에서 참가했던 3주차.
그래도 즐거웠다.
요즘 하트는 이렇게 하는 거라던데?

✨ 책갈피

  • 표현식(expression)이란:
    어떤 값으로 평가(evalutate)되는 구절
    상수나 변수명 역시 단순하지만 표현식이다.
    복잡한 표현식은 단순한 표현식의 조합으로 구성된다.
    단순한 표현식을 조합해 복잡한 표현식을 만들 떄는 대부분 연산자를 사용한다.

  • 표현식의 종류:
    1) 기본 표현식: 가장 단순한 표현식. 단독으로 존재. 자신보다 더 단순한 표현식 포함 x. 1) 리터럴 값 ex) 1, "hello", /pattern/ 2)일부 키워드 true, false, null, this 3) 변수 참조 i sum undefined
    2) 초기화 표현식(initializer): 객체 리터럴 또는 배열 리터럴이라고 부르기도 한다. 하지만 리터럴과 달리 프로퍼티와 요소 값을 지정하는 다양한 하위 표현식으로 구성되므로 기본 표현식은 아니다. 1) [], [1+2, 3+4], [1,,,5] (요소는 다섯갠데 그중 세개가 정의되지 않은 경우) 2) {}, {x:2, y:3}, {x:{a:1,b:2}, y:{a:2,b:3}}...
    3) 함수 정의 표현식: 함수 리터럴이라고도 부른다. function 키워드. es6부터는 화살표 함수 문법
    4) 프로퍼티 접근 표현식: 1) exrpession.indentifier 2) expression[identifier]
    둘 중 어느걸 쓰든 .나 [] 왼쪽의 표현식부터 평가되며, 그 값이 null or defined 라면 프로퍼티를 가질 수 없는 값이므로 => TypeError. / 오른쪽 프로퍼티가 존재하지 않는다면 프로퍼티 접근 표현식의 값 => undefined
    / 조건부 프로퍼티 접근(옵션체인) expression?.identifier
    5) 호출 표현식: 함수나 매서드 호출 문법.f(0), Math.max(x,y,z), a.sort() //=> .왼쪽이 프로퍼티 접근 표현식이라면 오른쪽 sort()는 메서드 호출이라고도 부른다.
    조건부 프로퍼티 접근 표현식과 마찬가지로 조건부 호출도 가능하다.
    6) 객체 생성 표현식: 객체를 생성하고 함수(생성자)를 호출해 객체 프로퍼티를 초기화 한다. 호출 표현식과 같지만 그 앞에 new 키워드를 붙인다는 점이 다르다.
    7) 산술 표현식: 산술 연산자를 이용해 피연산자의 숫자를 조작. 기본 산술연산자( **,*,/,%,+,-), 단항 산술 연산자(+,-,++,-- // ++,--는 위치관계에 따라 다르다), 비트 연산자(자주 안쓰임. 일단 건너뜀).
    8) 관계 표현식: 관계 연산자(1) 동등,일치 ==,===,!==,!=== 2) 비교 >,<,>=,<=, 3) in & instanceof 연산자), 를 이용하여 두 값 사이의 관계(동등하다, ~보다 크다,작다, ~의 프로퍼티)
    9) 논리 표현식: &&의 3가지 용도, || 용도 , !용도에 대해 알아보았다.
    10) 할당 표현식:
    11) 평가 표현식: eval() 어렵다. 일단 패스.

  • 연산자(Operator):
    서문: 연산자는 산술 표현식, 비교 표현식, 논리 표현식, 할당 표현식 등에 사용된다.
    종류: 부호 연산자키워드 연산자로 나뉜다. 키워드 연산자는 부호연산자와 같은 일반 연산자이고 단지 문법이 덜 간결할 뿐.
    연산자 우선순위:
    단항,이항,삼항: 피연산자 개수에따라 단항 연산자(-x의 -), 2항 연산자(2*3의 *), 3항 연산자(?:)까지 자스에 존재한다. 2항 연산자가 가장 보편적.
    부수효과(side effect)가 있는 연산자들: 1) 할당연산자 = 2) 증감연산자(++,--) 3) delete연산자
    연산자 결합성: 우선순위가 같은 동작을 수행할 때의 순서. 좌결합성, 우결합성
    평가 순서: 연산자 우선순위는 어떤 순서로 동작이 수행되는지 지정하지만 평가되는 순서는 지정하지 x. 자스는 언제나 표현식을 왼->오로 평가한다.
    기타 연산자:
    1) 조건연산자 ?:
    2) null 병합 연산자 ??: || 와의 차이점에 집중( || 연산자는 true 인 값을 반환, ?? 연산자는 정의된 값을 반환한다는 데서 차이가 있다.)

    	//maxWidth가 true 값이면 그걸 사용합니다. 그렇지 않다면
    	//preferences 객체에서 값을 찾습니다. 그 역시 true 같은 값이 아니라면 
    	//상수 리터럴을 사용합니다.
    	let max = maxWidth || prefernces.maxWidth || 500;
    	//maxWidth가 정의됐으면 그걸 사용합니다. 그렇지 않다면
    	//preferences 객체에서 값을 찾습니다. 그 역시 정의되지 않았다면 
    	//상수 리터럴을 사용합니다.
    	let max = maxWidth ?? prefernces.maxWidth ?? 500;

    3) typeof 연산자: typeof null = "object", typeof undefined = "undefined", typeof NaN = "number" 이다.
    4) delete 연산자: 배열의 경우 삭제하더라도 "구멍" 이 생길 뿐(즉, 요소가 사라질 뿐) 자리는 남아있다. 즉, 사라진 요소의 인덱스는 여전히 나온다.
    5) await 연산자: 13장에서
    6) void 연산자: 정확한 동작 방법은 아직 잘 모르겠다. 일단은 값을 평가 후 undefined 를 반환하는 이상한 연산자.
    7) 콤마 연산자(,): 거의 for 루프 안에서 루프 변수가 여러개일 때만 사용된다.

❓ 궁금점:

프로토타입 체인(p.95)
드 모르간의 법칙(p.99)
p.101
평가 표현식 eval()
문자열 비교 알고리즘(p.94)

0개의 댓글