카테고리 없음

JavaScript 공부하기)Symbol, method(number, math)

DevOhwa 2022. 10. 5. 01:11
반응형

유트브 코딩앙마 강의를 보고 작성한 글입니다.

 

 

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