Number, Boolean, 단락회로 평가
📚 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
null과 undefined 는 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를 반환하겠지만
undefined 는 NaN 을 반환하기 때문에 비교가 불가능하다
🔎 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
댓글남기기