JS Day 6 옵셔널 체이닝,심볼,숫자형
21 Dec 2020 | JavascriptJS Day 6 옵셔널 체이닝,심볼,숫자형
-
옵셔널 체이닝
- ?. 문법을 사용하며 왼쪽 평가대상에 값이 없어도 괜찮은 경우 사용한다.
- ?. 왼쪽의 변수는 반드시 선언되어 있어야한다. (없으면 Error)
- ?.왼쪽 평가대상의 값이 null, undefined인 경우 short-circuit 현상 발생
- obj?.prop - obj에 값이 있으면 prop 반환, 아니면 undefined 반환
- obj?.method() - obj에 값이 있으면 method() 호출, 아니면 undefined 반환
- onj?.[prop] - obj에 값이 있으면 [prop] 반환, 아니면 undefined 반환
- delete obj?.prop - obj에 값이 있으면 prop 삭제
- 읽기와 삭제는 가능하지만 할당은 불가능하다.
let zoo = {}; console.log(zoo?.fox); // undefined 출력 let zoo = { fox() { console.log("안녕?"); }, rabbit: 8, }; zoo.fox?.(); // "안녕?" 출력 let key = "rabbit"; console.log(zoo?.[key]); // 8 출력
-
심볼
- 유일한 식별자를 만들때 사용
- 객체의 key값은 문자형, 심볼형만 가능
- 심볼은 문자형으로 자동 형 변환이 이루어지지 않는다.
//Symbol()로 심볼값을 만든다 let key = Symbol(); //Symbol(...) 괄호 안에 심볼 이름을 넣을 수 있다 let key = Symbol("myKey"); //심볼값은 이름이 같아도 동일하지 않다(유일성 보장) - 전역 심볼 제외 let key1 = Symbol("foo"); let key2 = Symbol("foo"); console.log(key1 == key2); // false 출력 //심볼을 출력 할 때는 .toString(), .description을 쓰자 console.log(key1.toString()); //Symbol(foo) 출력 console.log(key1.description); // foo 출력
- 심볼은 for-in 반복문에서 배제된다.
- Object.assign으로 객체를 복사하면 심볼도 같이 복사된다.
- Symbol.for(key)로 레지스트리 안에 심볼을 생성 할 경우 이름이 같으면 동일한 심볼로 취급된다.
- 전역심볼의 이름을 찾을때는 Symbol.keyfor(symbol)를 이용한다. 전역심볼이 아닐 경우 undifined 반환
-
숫자형
- 0 대신 e
let billion = 1e9; // 1000000000 let minus = 1e-6; // 0.000006
- number.toString(base) : base 진법으로 number를 바꿔서 문자형으로 반환
let num = 15; console.log(num.toString(16)); // f console.log(num.toString(8)); // 17 console.log(num.toString(2)); // 1111
- floor, ceil, round, trunc
//floor 내림 let num = Math.floor(3.6); // 3 let num = Math.floor(-2.1); // -3 //ceil 올림 let num = Math.ceil(3.6); // 4 let num = Math.ceil(-2.1); // -2 //round 반올림 let num = Math.round(3.6); // 4 let num = Math.round(-2.7); // -3 //trunc 무시 let num = Math.trunc(3.6); // 3 let num = Math.trunc(-2.7); // -2
- toFixed(n) : 소수점 반올림하여 n번째 자리까지 표기해서 문자형으로 반환
//toFixed() let num = 3.141592; console.log(num.toFixed(2)); // 3.14
- parseInt(), parseFloat() : 문자와 숫자가 섞여있어도 쓸 수 있고, 숫자만 반환한다
console.log(parseInt("100px")); // 100 console.log(parseFloat("4.5rem")); // 4.5
- isFinite() : 숫자면 true 반환, 숫자가 아니거나 ±Infinity면 false 반환
console.log(isFinite("foo")); // false console.log(isFinite(35)); // true