본문 바로가기

프로그래밍 언어/Javascript14

자바스크립트 jump mainloop: while (token !== null) { // -- snip -- continue mainloop; // -- snip -- } 2021. 7. 23.
자바스크립트 first-defined ?? ES2020에서 정의되었다. ??는 nullish coalescing 연산자라고 부른다. ??의 왼쪽 피연산자가 null이 아니고 undefined도 아니면 해당 값을 그대로 반환하고, 아니면 오른쪽에 있는 피연산자를 반환한다. a ?? b // 아래와 같음 (a !== null && a !== undefined) ? a : b 아래 코드 처럼 ??는 첫 번째 피연산자가 false 값이더라도 그 값을 반환한다. let max = maxWidth || 500; // maxWidth가 숫자 0이나 empty string이면 false이므로 500이 반환 let max = maxWidth ?? 500; // maxWidth가 숫자 0이면 그대로 0이 반환된다 2021. 7. 23.
자바스크립트 클로저 JavaScript Closures를 이용해 private variable을 구현할 수 있다. const add = (function () { let counter = 0; return function () {counter += 1; return counter} })(); add(); add(); add(); // the counter is now 3 self-invoking function은 한 번만 호출되며, counter 값을 0으로 설정하고 function expression을 반환해 add에 저장한다. add는 함수가 되며, 부모 scope에 있는 counter 값에 접근할 수 있다. 이를 closure라 부른다. counter는 익명함수에 의해 protect되며, add 함수만을 이용해 변경될.. 2021. 7. 14.
자바스크립트 string 자바스크립트는 UTF-16 인코딩을 사용한다. 따라서 문자열은 16 bit 값의 시퀀스로 본다. 대부분의 문자는 하나의 유니코드로 나타낼 수 있지만, 두 개의 16 bit 값으로 나타내야 하는 경우도 있다. let euro = "€"; let love = "❤"; euro.length // => 1: 하나의 16-bit 요소 love.length // => 2: ❤의 UTF-16 인코딩은 "\ud83d\udc99" 대부분의 문자열 메소드는 문자에 대해서가 아니라 16 bit 값으로 동작한다. ES6 이후에는, 문자는 iterable하고, for loop에서는 16 bit 값이 아닌 문자에 따라 연산을 할 수 있다. 문자열 여러 줄에 걸쳐서 나타내기 "two\nlines" /* ES5 */ // 끝에 ba.. 2021. 7. 5.
자바스크립트 BigInt BigInt는 ES2020에서 정의되었다. 64비트 정수 표현을 위해 추가되었다. 숫자 뒤에 소문자 n을 써서 BigInt를 정의한다. 123n 0b1111111n 0o567n 0x8000000000000000n // 2n**64n BigInt()를 함수로 사용해 숫자나 문자열을 BigInt 값으로 변환할 수 있다. BigInt(Number.MAX_SAFE_INTEGER) let string = "1" + "0".repeat(10); BigInt(string) 사칙 연산에서는 BigInt와 number type을 같이 쓸 수 없다. 하지만 비교 연산에서는 같이 쓸 수 있다. 1000n + 2000n // 3000n 1 1n // true 0 == 0n // true 0 ==.. 2021. 7. 5.
자바스크립트 Math 객체 Math 객체(object)를 이용해 아래와 같은 연산을 할 수 있다. Math.pow(2,10) // 1024, 2의 10승 Math.round(.6) // 1.0, 가까운 수로 반올림 Math.ceil(.6) // 1.0, 가까운 수로 올림 Math.floor(.6) // 0.0, 가까운 수로 내림 Math.abs(-1) // 1, 절댓값 Math.max(x,y,z) // 최댓값 반환 Math.min(x,y,z) // 최솟값 반환 Math.random() // 0이상 1.0미만의 랜덤 숫자 Math.PI // 파이 Math.E // 자연로그의 밑수 Math.sqrt(4) // 4**0.5, 루트 4 Math.pow(4, 1/3) // 4**(1/3), 4의 3제곱근 Math.sin(10) // 삼각함.. 2021. 7. 5.
자바스크립트 Numbers 자바스크립트의 숫자는 64비트 부동소수점 형식(floating-point)을 따른다. 하지만 배열 인덱스나 비트 연산에서는 32비트 정수를 이용한다. 정수(integer literals) 255 /* 16진수 */ 0xff 0xFF 0Xff /*** ES6 ***/ 0b11111111 // 2진수 0o377 // 8진수 실수(floating-point literals) 3.14 .333 6.02e23 // 6.02 x 10^23 3.14E-1 // 3.14 x 10^(-1) 자바스크립트는 arithmetic overflow, underflow, division by zero에 대해 에러를 발생시키지 않는다. arithmetic overflow가 발생하면 값은 Infinity가 된다. 반대로 음수쪽으로 o.. 2021. 7. 5.