유트브 코딩앙마 강의를 보고 작성한 글입니다.
Symbol
const a = Symbol(); //new를 붙이지 않는다.
객체 property key는 문자형과 symbol형으로 나타내는것이 가능하다.
심볼은 유일한 식별자를 만들때 사용한다.
const a = Symbol();
const b = Symbol();
console.log(a) //Symbol()
console.log(b) //Symbol()
둘다 같은 Symbol()로 보이지만 일치연산자(a === b; false, a == b; false)를 했을때 다르게 나온다.
Symbol은 '유일성'을 보장한다.
property key 심볼형
const id = Symbol('id');
const user = {
name : 'Mike',
age : 30,
[id] : 'myid'
}
user[id] //'myid'
user 를 찍어보면 {name: "Mike", age: 30, Symbol(id): "myid"} 로 심볼을 가진 프로퍼티가 나온다.
참고로 저번에 배운Object.keys, values, entries는 key가 Symbol형인 property는 건너뛴다.
마찬가지로 for(let a in user){} 를 써도 건너뛴다.
이런 심볼은 어디서 쓸까.
특정 객체에 원본데이터는 건드리지 않고 속성을 추가할 수 있다.
Symbol.for() : 전역심볼
하나의 심볼만 보장 받을 수 있다. 없으면 만들고 있으면 가져오기 때문이다. Symbol 함수는 매번 다른 Symbol 값을 생성하지만 Symbol.for method는 하나 생성후 키를 통해서 값은 Symbol을 공유한다.
const id1 = Symbol.for('id');
const id2 = Symbol.for('id');
id1 === id2; //true
전역심볼은 코드 어디에서든 사용할 수 있다.
Symbol.keyFor(id1) //'id'
keyFor 로 변수를 넣어주면 생성할때 적어주었던 이름을 알려준다.
전역심볼이 아닌 심볼은 keyFor를 사용할 수 없다. 대신 description을 사용한다. description으로 이름을 알 수 있다.
const id = Symbol('id 입니다.');
id.description; //'id 입니다.'
Number, Math
10진수를 2진수나 16진수로 바꾸기
let num = 10;
num.toString(); //'10'
num.toString(2); //'1010'
//괄호안에 숫자를 쓰면 그 숫자의 진법으로 변환된다.
Math.ceil() : 올림
let num1 = 5.1;
let num2 = 5.7;
Math.ceil(num1); //6
Math.ceil(mum2); //6
Math.floor() : 내림 Math.round():반올림 등이이다.
소수점 자리수
let userRate = 30.1234;
//만일 소수점 둘째자리까지 표현해야한다면(셋째자리에서 반올림)
userRate * 100 //3012.34
Math.round(userRate * 100)/100 //100곱하고, 올림하고 100으로 나눠주거나
toFixed()를 사용한다.
userRate.toFixed(2); //'30.12'
userRate.toFixed(0); //'30'
userRate.toFixed(6); //'30.123400'
toFixed()주의! 문자열을 반환한다! 그래서 반환후에 number로 변환후 숫자로 이용하는 경우가 많다.
userRate.toFixed(2);//'30.12'
Number(userRate.toFixed(2));//30.12
isNaN() : nan인지 아닌지 판단
let x = Number('x'); //NaN
x == NaN //false
x === NaN //false
NaN == NaN //false
isNaN(x) //true
isNaN(3) //false
parseInt() : 문자열을 숫자로 반환. 넘버는 문자가 혼용되어있으면 nan이지만 parseInt는 읽을수있는 곳까지 읽고 반환해준다.
let redColor = 'f3';
parseInt(redColor); //NaN
let redColor = 'f3';
parseInt(redColor,16); //243
parseInt('11', 2) //3
parseFloat() : parseInt()와 동일한데, 소수점이하도 반환한다.
Math.random() : 0~1사이 무작위 숫자 생성
만일 1 ~ 100 사이 임의의 숫자 뽑고 싶다면 아래와 같은 코드를 사용한다.
Math.floor(Math.random()*100)+1
+1은 0.n이 나올시 버리면 0이니까 1을 구해주기위해서 1을 더해준다.
Math.max() / Math.min() : 괄호안에 있는 값중 가장 크거나, 작은 값을 출력한다.
Math.abs() : 절대값을 구해준다. (abs : absolute의 약자)
Math.pow(n, m) : 제곱 (pow : power의 약자)
Math.pow(2, 10) //1024
Math.sqrt() : 제곱근을 구해준다. (sqrt : square root)
Math.sqrt(16) //4