본문 바로가기
Frontend/Javascript

자바스크립트

by 새벽물망초 2021. 12. 2.

*소수점 연산이 항상 정확하지 않음

ex) let x = 0.2 + 0.1;

document.getElementById("demo1").innerHTML = "0.2 + 0.1 = " + x;

-> 0.30000000000000004

 

그래서 it helps to multiply and divide:

let y = (0.2*10 + 0.1*10) / 10;

document.getElementById("demo2").innerHTML = "0.2 + 0.1 = " + y;

-> 0.3

 

*숫자 계산

let x = 10;
let y = 20;
let z = x + y;

-> 30 ( 숫자 계산 ) 

 

*문자 계산

let x = "10";
let y = "20";
let z = x + y;

-> 1020 ( 문자 그대로 출력 )

 

*숫자와 문자 계산

let x = 10;
let y = "20";
let z = x + y;

-> 1020 ( 숫자10 더하는게 없어서 그대로 나오고 문자20 출력 )

 

*숫자 계산에서 주로 하는 실수

var x = 10;
var y = 20;
document.getElementById("demo").innerHTML =
"The result is: " + x + y;

-> The result is: 1020

이유) 30이안나옴 왜냐하면 결과식에 + x + y 에 맨 앞에 + 때문에?

 

let x = 10;
let y = 20;
let z = "30";
let result = x + y + z;

document.getElementById("demo").innerHTML = result;

-> 3030 ( 숫자 x+y 계산되고, 문자 30 그대로 출력됨 )

 

 

*자바스크립트 문자열은 숫자 콘텐츠를 가질 수 있다.

let x = 100;         // x is a number
let y = "100";      // y is a string

 

*JavaScript는 모든 숫자 연산에서 문자열을 숫자로 변환하려고 시도합니다.

let x = "100";
let y = "10";
let z = x / y;   

-> 10 , 나눗셈. 곱하기. 빼기도 마찬가지

 

*NaN은 숫자가 합법적인 숫자가 아님을 나타내는 자바스크립트 예약어이다.
숫자가 아닌 문자열로 연산을 시도하면 NaN(Not a Number):

let x = 100 / "Apple";

-> NaN 이라고 뜸

 

그러나 문자열에 숫자 값이 포함되어 있는 경우 결과는 다음과 같습니다.

let x = 100 / "10";

-> 10 (왜냐하면 js는 모든 숫자 연산에서 문자열을 숫자로 변환하려고 시도하기 때문)

 

You can use the global JavaScript function isNaN() to find out if a value is a not a number:

let x = 100 / "Apple";
isNaN(x);

-> true

 

*수학연산에서 nan을 쓸 경우

let x = NaN;
let y = 5;
document.getElementById("demo").innerHTML = x + y;

-> NaN

 

let x = NaN;
document.getElementById("demo").innerHTML = typeof x;

-> number (typeof NaN 은 number 을 반환한다)

 

Infinity(또는 -Infinity)는 가능한 가장 큰 숫자를 계산할 때 JavaScript가 반환하는 값입니다.

let myNumber = 2;
// Execute until Infinity
while (myNumber != Infinity) {

  myNumber = myNumber * myNumber;
}

->4
16
256
65536
4294967296
18446744073709552000
3.402823669209385e+38
1.157920892373162e+77
1.3407807929942597e+154
Infinity

 

*0으로 나눠도 인피니티

let x =  2 / 0;
let y = -2 / 0;

-> Infinity
-Infinity

 

*JavaScript는 숫자 상수가 0x 앞에 오는 경우 16진수로 해석합니다.

let x = 0xFF;
document.getElementById("demo").innerHTML = "0xFF = " + x;

-> 0xFF = 255

 

기본적으로 JavaScript는 숫자를 10진수로 표시합니다.
그러나 toString() 메소드를 사용하여 2부터 36까지의 숫자를 출력할 수 있습니다.
16진수는 16진법, 소수점은 10진법, 옥탈은 베이스 8,이진수는 기본 2

let myNumber = 32;
myNumber.toString(32);
myNumber.toString(16);
myNumber.toString(8);
myNumber.toString(2);

->Decimal 32
Hexadecimal 20
Octal 40
Binary 100000

 

*일반적으로 자바스크립트 숫자는 리터럴로부터 만들어진 원시적인 값이다.

그러나 숫자는 new 키워드를 가진 개체로 정의할 수도 있다.

let y = new Number(123);

 

// x is a number
let x = 123;

// y is a Number object
let y = new Number(123);

document.getElementById("demo").innerHTML = typeof x + "<br>" + typeof y;

->number

object

(x는 타입이 숫자라서 넘버가 나오고, y는 객체라서 오브젝트로 나옴, 타입이 뭔지 출력하게 함)

 

*(x==y)와 (x===y) 사이의 차이

== -> 값만 같으면 됌
=== -> 타입, 값 둘다 같아야 함

 

(x == y) true or false?

let x = new Number(500);
let y = new Number(500); -> true

 

(x === y) true or false?

let x = new Number(500);
let y = new Number(500); -> false

 

 

=================================================================

 

 

*toString() 메서드는 숫자를 문자열로 반환합니다.
모든 숫자 방법은 모든 종류의 숫자(literals, variables, 식)에 사용할 수 있다.

let x = 123;
x.toString();
(123).toString();
(100 + 23).toString();

-> 각각 123으로 출력됨

 

*toExponential()은 숫자를 반올림하고 지수 표기법을 사용하여 쓰는 문자열을 반환합니다.
파라미터는 소수점 뒤의 문자 수를 정의합니다.

let x = 9.656;
x.toExponential(2);
x.toExponential(4);
x.toExponential(6);

-> 9.66e+0
9.6560e+0
9.656000e+0

 

*toFixed()는 지정된 소수점 수로 쓰여진 문자열을 반환합니다.

let x = 9.656;
x.toFixed(0);
x.toFixed(2);
x.toFixed(4);
x.toFixed(6);

->10
9.66
9.6560
9.656000

 

*toPrecision()은 지정된 길이의 숫자로 작성된 문자열을 반환합니다.

let x = 9.656;
x.toPrecision();
x.toPrecision(2);
x.toPrecision(4);
x.toPrecision(6);

-> 9.656
9.7
9.656
9.65600

 

*valueOf()는 숫자로 숫자를 반환합니다.

let x = 123;
x.valueOf();
(123).valueOf();
(100 + 23).valueOf();

->123

123

123

JavaScript에서 숫자는 원시 값(typeof = number) 또는 개체(typeof = object)일 수 있습니다.
valueOf() 메소드는 Number 객체를 원시 값으로 변환하기 위해 JavaScript에서 내부적으로 사용됩니다.
당신의 코드에 그것을 사용할 이유가 없습니다.

=>모든 JavaScript 데이터 유형은 valueOf() 및 toString() 메서드를 가집니다.

 

 

*변수를 숫자로 변환하는 데 사용할 수 있는 자바스크립트 방법에는 3가지가 있다.

  • The Number() method
  • The parseInt() method
  • The parseFloat() method

이러한 메소드는 숫자 메서드가 아니라 전역 JavaScript 메서드입니다.

 

 

*JavaScript 전역 메소드는 모든 JavaScript 데이터 유형에 사용할 수 있습니다.
숫자로 작업할 때 가장 관련성이 높은 방법은 다음과 같습니다.

Number() 인수에서 변환된 숫자를 반환합니다.
parseFloat() 인수를 구문 분석하고 부동 소수점 숫자를 반환합니다.
parseInt() 인수를 구문 분석하고 정수를 반환합니다.

 

*Number() 는 JavaScript 변수를 숫자로 변환하는 데 사용할 수 있습니다.

  Number(true) + "<br>" +
  Number(false) + "<br>" +
  Number("10") + "<br>" + 
  Number("  10") + "<br>" +
  Number("10  ") + "<br>" +
  Number(" 10  ") + "<br>" +
  Number("10.33") + "<br>" + 
  Number("10,33") + "<br>" +
  Number("10 33") + "<br>" +
  Number("John");

->1
0
10
10
10
10
10.33
NaN
NaN
NaN

(숫자를 변환할 수 없는 경우 NaN이 반환됩니다.)

 

*Number()는 날짜를 숫자로 변환할 수도 있습니다.

Number(new Date("1970-01-01"))

->0

 

*parseInt()는 문자열을 구문 분석하고 정수를 반환합니다. 공백이 허용됩니다. 첫 번째 숫자만 반환됩니다.

  parseInt("-10") + "<br>" +
  parseInt("-10.33") + "<br>" +
  parseInt("10") + "<br>" +
  parseInt("10.33") + "<br>" +
  parseInt("10 6") + "<br>" +  
  parseInt("10 years") + "<br>" +  
  parseInt("years 10"); 

-> -10
-10
10
10
10
10
NaN

(If the number cannot be converted, NaN (Not a Number) is returned.)

 

*parseFloat()는 문자열을 구문 분석하고 숫자를 반환합니다. 공백이 허용됩니다. 첫 번째 숫자만 반환됩니다.

parseFloat("10");
parseFloat("10.33");
parseFloat("10 20 30");
parseFloat("10 years");
parseFloat("years 10");

-> 10
10.33
10
10
NaN

(If the number cannot be converted, NaN (Not a Number) is returned.)

 

Number Properties

MAX_VALUE JavaScript에서 가능한 최대 수를 반환합니다.
MIN_VALUE JavaScript에서 가능한 최소 숫자를 반환합니다.
POSITIVE_INFINITY는 무한대를 나타냅니다(오버플로에 반환됨).
Negative_INFINITY 음의 무한대를 나타냅니다(오버플로에 반환됨).
NaN은 "Not-a-Number" 값을 나타냅니다.

 

*MAX_VALUE는 JavaScript에서 가능한 가장 큰 숫자를 반환합니다.

let x = Number.MAX_VALUE;

->1.7976931348623157e+308

 

*MIN_VALUE returns the lowest possible number in JavaScript.

let x = Number.MIN_VALUE;

->5e-324

 

let x = Number.POSITIVE_INFINITY;

->Infinity

*POSITIVE_INFINITY is returned on overflow:

 

let x = Number.NEGATIVE_INFINITY;

->-Infinity

*NEGATIVE_INFINITY is returned on overflow:

 

*NaN은 숫자가 합법적인 숫자가 아님을 나타내는 자바스크립트 예약어이다.
숫자가 아닌 문자열로 연산을 시도하면 NaN(Not a Number)

let x = 100 / "Apple";

-> NaN

 

*Number 속성은 Number라는 자바스크립트의 Number 객체 wrapper에 속합니다.
이러한 속성은 Number.MAX_VALUE.로만 액세스할 수 있습니다.
MyNumber 사용.여기서 myNumber는 변수, 식 또는 값인 MAX_VALUE는 정의되지 않은 값을 반환합니다.

let x = 6;
x.MAX_VALUE

-> undefined

 

 

댓글