📚 What is TIL?

✅ var의 주의점
✅ Math 메서드
✅ BigInt
✅ 형변환
✅ 일치연산자 사용주의점
✅ 단락회로 평가와 병합연산자
✅ isNaN 함수
✅ 드모르간 법칙

var을 쓰지 않는 이유

let, const 와 같은 Block-level scope 를 따르지 않는 var
두 개의 다른 script 태그가 있다고 하더라도 변수를 공유하게되면…

🔎 var로 선언할 경우 기존에 var로 선언된 것이 덮어쓰는 불상사로
 견고한 코드를 작성하는데 방해가 될 수 있다 따라서 let, const를 사용하자!


내장객체 Math 메서드

더보기
Math.abs(-10)
 절댓값

Math.ceil(10.3)
 올림

Math.floor(10.3)
 내림

Math.round(10.4)
 반올림

Math.sqrt(100)
 제곱근

Math.pow(2,3)
 거듭제곱

Math.PI

Math.min(...values)

Math.max(...values)

🔎 내장 객체란? 브라우저의 자바스크립트 엔진에 내장된 객체를 말한다


부동소수점의 문제

모든 프로그래밍 언어에 대항되는 사항으로
컴퓨터는 숫자를 계산할 때 2진법으로 계산하기 때문에
몇몇 소수는 우리가 사용하는 10진법에서 2진법으로 변환하는 과정에서 무한 소수가 된다

console.log(0.1 + 0.1 + 0.1); 
// 0.30000000000000004

🔎 저장공간의 한계가 있는 컴퓨터는 무한 소수를 유한 소수로 바꾸게 된다
🔎 이 과정에서 미세한 오차가 발생하면서 값들이 손실되거나 초과하는 정밀도 문제가 발생한다

BigInt

BigInt는 Number의 안전한 한계를 넘어서는 큰 정수도 안전하게 저장하고 연산할 수 있다
정수 끝에 n을 추가하거나 생성자(BigInt)를 호출하여 사용할 수 있다

💡 그렇다면 안전하게 저장한다는 것은 무엇일까?

🔎 MAX_SAFE_INTEGER 상수는 JavaScript에서 안전한 최대 정수값인데 이 이상보다 더 큰 연산을 하게될 경우
 정확한 연산이 안된다. 이것을 보고 안전하지 않은 숫자라고 표현할 수 있다

const x = Number.MAX_SAFE_INTEGER + 1;
const y = Number.MAX_SAFE_INTEGER + 2;
console.log(x===y) // ?

💡 그렇다면 Number와의 차이점은 무엇일까?

🔎 BigInt는 내장 객체 Math 메서드와 함께 사용할 수 없다
🔎 Number과 같이 연산할 수 없다 따라서, 같은 자료형으로 변환해서 사용해야 한다


형변환

number

nullundefined 는 number형으로 변환 시 결과가 다르다
null은 이 되고
undefined는 이 된다

전달받은 값 형 변환 후
undefined NaN
null 0
true / false 1 / 0
string 전달받은 문자열을 “그대로” 읽되, 처음과 끝의 공백을 무시합니다. 문자열이 비어있다면 0이 되고, 오류 발생 시 NaN

boolean

전달받은 값 형 변환 후
0, null, undefined, NaN, “” false
그 외의 값 true
console.log(Boolean([1,2,3])) // t
console.log(Boolean([])) // 말도 안되게 t
console.log(Boolean({})) // t
console.log(Boolean({'one':10, 'two':20})) // t
console.log(Boolean(-1)) // t 0외 다른숫자는 t
// -----------------
console.log(!!undefined); // false
console.log(!!null); // false
console.log(!!NaN); // false
console.log(!!0); // false
console.log(!!""); // false
console.log(!!1); // true
console.log(!!"hello"); // true
console.log(!!{}); // true
console.log(!![]); // true

🔎 !! 는 Boolean과 같은 기능을 한다


일치 연산자

console.log(null == undefined);
console.log(null == 0);
console.log(undefined == 0);
console.log(NaN == NaN);

🔎 undefined나 null일 때 형 변환을 하지 않는다
🔎 undefined가 NaN으로 변환되는데, NaN 이 형변환이 이루어졌을 때는 false를 반환하겠지만
undefinedNaN 을 반환하기 때문에 비교가 불가능하다
🔎 NaN은 자기 자신과도 비교할 수 없다 따라서 NaN은 모든 숫자와 다른 값으로 간주된다

⚠️ 일치 연산자 ===를 제외한 비교 연산자의 피연산자에 undefined나 null이 오지 않도록 특별히 주의하자


단락회로 평가와 병합연산자의 차이

||는 첫 번째 truthy 값을 반환한다 ??는 첫 번째 정의된 값을 반환 한다

let height = 0;
console.log(height || 100);
console.log(height ?? 100); 
let height2
console.log(height2 || 100); 
console.log(height2 ?? 100);

let height3 = '';
console.log(height3 || 'hello');
console.log(height3 ?? 'world');




🔗 TIP

isNaN 함수

숫자가 아닌 대상은 true, 숫자면 false를 반환한다

console.log(isNaN(456)) // false
console.log(isNaN('456')) // false
console.log(isNaN('가나다')) // true
console.log(isNaN(4.56)) // false
console.log(isNaN('4.56')) // false
console.log(isNaN(4 * 5)) // false
console.log(isNaN('4 * 5')) // true
console.log(isNaN('')) // false
console.log(isNaN(' ')) // false
console.log(isNaN(true)) // false
console.log(isNaN(false)) // false
// ES6에서 추가 도입
console.log(isNaN(undefined)); // true
console.log(isNaN(null)); // false
console.log(isNaN(NaN)); // true
// -----------------
console.log(Number.isNaN(undefined)); // false
console.log(Number.isNaN(null)); // false
console.log(Number.isNaN(NaN)); // true


드모르간 법칙

무조건 true가 되는 곳이나 무조건 false 가 되는 구간을 발견하거나 조건을 단순화 할 수 있다

const x = 0;
const y = 1;
console.log(!(x || y) === (!x && !y)) // true
console.log(!(x && y) === (!x || !y)) // true

// 코드가 무조건 false가 되는경우 => 코드 전체 삭제
if(!(x || y)){
    console.log('hello')
}

// 코드가 무조건 true가 되는경우 => if문을 제거
if(!(x || y)){
    console.log('hello')
}
// 변경후
console.log('hello')


Reference

댓글남기기