TIL 20211005

e·2021년 10월 5일
0

TIL : js

목록 보기
5/7
post-thumbnail

자료구조와 자료형

원시값의 메서드

원시값을 객체처럼 다룰 수 있게해주지만, 객체는 아님!

원시값 : 문자string, 숫자number, bigint, 불린boolean, 심볼symbol, null, undefined 총 7가지

객채 : 프로퍼티에 다양한 종류의 값을 저장할 수 있으며 중괄호 {}를 사용함. 함수도 객체의 일종..
객체의 장점 중 하나는 함수를 프로퍼티로 저장할 수 있다는 것...

let 9ing = {
	name: "guhee",
    sayHi: function() {
    	alert("쟈스 빠이팅~");
    }
};

9ing.sayHi(); // 쟈스 빠이팅~

객체 9ing을 만들고, 메서드 sayHi를 정의했음.
자바스크립트는 날짜, 오류, HTML요소 등을 다룰 수 있게 해주는 다양한 내장객체 제공...이 객체들은 고유한 프로퍼티와 메서드를 가짐.
그러나 이걸 사용하면 시스템자원이 많이 소모됨..

객체는 원시값보다 "무겁고" 내부구조 유지를 위해 추가자원을 사용하기때문..

원시값을 객체처럼 사용하기

원시값에 원시래퍼객체 object wrapper를 만들어 주었다가 메서드를 유용하게 사용후 객체는 삭제!
하는 방식으로 원시값을 가볍게 유지하며 메서드를 호출

⚠︎ string, number, boolean 은 생성자로 쓰지말기
⚠︎ null, undefined 는 메서드가 없다

숫자형

숫자를 입력하는 다양한 방법

10억 입력

let billion = 1000000000;

10억billion 을 나타낼 땐 '1bn' 을 사용! 87억 => '8.7bn'

자바스크립트에서도 숫자 옆에 'e' 를 붙이고 0의 개수를 붙여주면...

let billion = 1e9; // 10억, 1과 9개의 0
alert( 8.7e9); // 87억 (8,7,00,000,000)

'e'는 왼쪽의 수에 오른쪽의 숫자만큼 10의 거듭제곱 곱하는 효과

1e3 = 1 * 1000
1.23e6 = 1.23 *1000000

1 마이크로초(백만분의 1초) 는...

let ms = 0.000001;
let ms = 1e-6; // 1에서 왼쪽으로 6번 소수점 이동

e의 오른쪽에 음수가 있으면, 음수의 절대값만큼 10을 거듭제곱한 수로 나누는 것

1e-3 = 1 / 1000 (=0.001)

1.23e-6 = 1.23 / 1000000 (=0.00000123)

16진수, 2진수, 8진수

16진수는 색을 나타내거나 문자를 인코딩할 때 등.. 두루쓰임.
16진수는 0x를 사용해 표현할 수 있음.

alert( 0xff ); // 255
alert( 0xFF ); // 255 (대소문자 가리지 않아 같은 값을 나타냄)

2진수와 8진수는 아주 드물게 쓰이지만,
접두사로 0b 와 0o를 사용해 간단히 나타낼수있다..

let a = 0b11111111; // 255의 2진수
let b - 0o377; // 255의 8진수

alert( a == b); // true, 진법은 다르지만, a와 b는 같은 수임.

toString(base)

num.toString(base) 메서드는 base진법으로 num을 표현한 후, 이를
문자형으로 변환해 반환함.

let num = 255;

alert(num.toString(16) ); // ff
alert(num.toString(2) ); // 11111111

base는 2 에서 36 까지 쓸 수 있는데 기본값은 10.

  • base=16 16진수 색, 문자 인코딩 등을 표현할 때. 숫자는 0~9, 10이상의 수는 A~F를 사용해서 나타냄.
  • base=2 비트 연산 디버깅에 주로 쓰임.. 숫자는 0 또는 1이 될 수 있다.
  • base=36 사용할 수 있는 base중 최대값으로, 0..9와 A..Z를 사용해 숫자를 표현.
    36base는 url을 줄이는 것과 같이 숫자로 된 긴 식별자를 짧게 줄일때 유용..
alert (123456..toString(36)); // 2n9c

⚠︎ 점 두 개와 메서드 호출
123456..toStriong(36) 에 점 두개는 오타가 아님. 숫자를 대상으로 메서드 직접 호출하고싶다면 점 두개 써야함.. 한개만 쓰면 첫번째 점 이후 소수부로 인식해 에러발생.
(123456).toString(36) 도 가능.

어림수 구하기

어림수를 구하는 것 rounding 은 숫자를 다룰 때 가장 많이 사용하는 연산 중 하나
Math.floor
Math.ceil
math.round
math.trunc(IE 에서는 지원안함)

1.2345 가 있는데 1.23을 만들고 싶은 경우

  1. 곱하기와 나누기
let num = 1.23456;
alert(Math.floor(num*100) / 100 ); // 1.23456 -> 123.456 -> 123 -> 1.23
  1. 소수점 n번째 수까지의 어림수를 구한 후 이를 문자형으로 반환해주는 메서드 사용
    toFixed(n)
let num = 12.34;
alert(num.toFixed(1)); // "12.3"

toFixed 는 Math.round와 유사하게 가장 가까운 값으로 올림 혹은 버림 해줌.

let num = 12.36;
alert(num.toFixed(1)); // "12.4"

toFixed를 사용할 때 주의점은 메서드의 반환값이 문자열이라는 것!

부정확한 계산

숫자는 내부적으로 64비트 형식 IEEE-754으로 표현되기때문에 ...blahblah

숫자가 너무 커지면 64비트 공간이 넘쳐서 Infinity로 처리

alert( 1e500 ); // Infinity

정밀도 손실loss of percision ...

숫자는 0과 1로 이루어진 이진수로 변환되어 연속된 메모리 공간에 저장됨..
10진법을 사용하면 쉬운 0.1 이나 0.2 같은 분수는 이진법으로 표현하면 무한 소수가 됨...

문자형으로 바뀐 숫자를 다시 숫자형으로 강제 변환하려면 단항 덧셈 연산자를 사용!

*두종류의 0
자바스크립트에선 숫자의 부호가 단일 비트에 저장되는데 0을 포함한 모든 숫자에 부호를 설정할 수도, 설정하지 않을 수도 있기 때문.. 0 과 -0이 존재...

isNaN 과 isFinite

Infinity와 -Infinity 특수 숫자값
NaN 에러를 나타내는 값

isNaN(value) 인수를 숫자로 변환한 다음 NaN인지 테스트함

alert( isNaN(NaN)) ; // true
alert( isNaN("str")); // true

===NaN 비교를 하면되지 않나? 안됨 => NaN은 자기자신을 포함하여 그 어떤 값과도 같지 않다는 점에서 독특함

alert( NaNn === NaN ) ; // false

isFinite(value) 인수를 숫자로 변환하고 변환한 숫자가 NaN/Infinity/-Infinity가 아닌 일반 숫자인 경우 true를 반환함.

alert( isFinite("15")); // true
alert( isFinite("str")); // false, NaN이기 때문임
alert( isFinit(Infinity)); // false, Infinity이기 때문임

isFinite는 문자열이 일반숫자인지 검증하는데 사용되곤 함

parseInt 와 parseFloat

내장함수 parseInt 와 parseFloat는 불가능할 때까지 문자열에서 숫자를 읽음..
parseInt는 정수, pasrseFloat는 부동소수점 숫자를 반환.

profile
🌱 무럭무럭 자라자

0개의 댓글