[자바스크립트 비기너] 8. Boolean 오브젝트, 자바스크립트 특징, Object 오브젝트(ES5 기준), JSON 오브젝트, Date 오브젝트, Math 오브젝트

Speedwell🍀·2022년 1월 31일
0

Boolean 오브젝트

  • 빌트인 오브젝트

    • true와 false 처리
  • 값이 있으면 true로 인식

  • false 인식 기준

    • undefined, null, NaN
    • 빈 문자열, 숫자 타입의 0
  • 숫자 값 변환 기준

    • true를 1로, false를 0으로 변환

new Boolean()

  • Boolean 인스턴스 생성

  • 파라미터 값을 true 또는 false로 변환하여 프리미티브에 설정

//value의 모든 값이 false로 변환되며 생성한 Boolean 인스턴스의 프리미티브 값으로 설정
var value = [undefined, null, NaN, 0, ""];
for (var k = 0; k < value.length; k++){
	var obj = new Boolean(value[k]);
    log(obj + 1);
};

// 1
// 1
// 1
// 1
// 1
  • 문자열이면서 값이 있으면 true로 변환
var value = [12, "1", "0", "false"]; // value의 모든 값이 true로 변환
for (var k = 0; k < value.length; k++){
	var obj = new Boolean(value[k]);
    log(obj + 1);
};
// 2
// 2
// 2
// 2

Boolean()

  • Boolean 값으로 변환

  • 인스턴스를 생성하지 않고 true 또는 false로 변환

var value = [12, "1", "0", "false"];
for (var k = 0; k < value.length; k++){
	log(Boolean(value[k]) + 1);
};

// 2
// 2
// 2
// 2

toString()

  • data 위치의 true, false를 문자열로 변환
    • 즉, "ture", "false"로 변환
var result = true.toString();
log(result);
log(typeof result);

// true
// string

valueOf()

  • Boolean 인스턴스의 프리미티브 값 반환
    • 즉, true 또는 false 반환
var obj = new Boolean(3);
log(obj.valueOf());

// true

자바스크립트 특징

  • 자바스크립트는 스크립팅(Scripting)언어

  • 스크립팅 언어 특징

    • 소스 파일의 코드를 사전에 컴파일하여 실행 파일을 만들어 놓지 않고
    • 사용하는 시점에 컴파일하고 실행
    • 장점을 활용하는 지혜 필요
var value = 123;
var book = function(){
	var point = 456;
    var getPoint = function(){
    	return point;
	};
    getPoint();
};
book();
  • 컴파일 순서
    • 소스 파일의 위에서부터 아래로 컴파일
    • function 키워드를 만나면 function 오브젝트를 생성
    • 이때, 함수 안의 코드는 컴파일하지 않음. 함수가 호출되었을 때, 위의 방법으로 컴파일

JS와 객체지향

  • 객체 지향 프로그래밍 언어 ➡ OOP(Object Oriented Programming)

  • 자바스크립트는 객체 지향 언어

  • 자바스크립트 OOP 구현

    • 다른 언어의 OOP 구현과 차이가 있으므로 비교하는 것은 의미 없음
    • JS 특징이 반영된 OOP 구현

OOP의 객체

  • 객체

    • 개념적 접근
    • 행위(Behavior)와 속성(Attribute)로 구성
      • 행위: 먹다, 마시다
      • 속성: 밥, 사이다
  • 객체를 형상화하면

    • 행위가 메소드가 됨
    • 속성이 프로퍼티가 됨
    • 객체가 클래스로 됨
  • 클래스(Class)

    • 행위와 속성을 정의한 것으로
    • 인스턴스로 생성하여 프로그램에서 사용

JS 객체 형태

  • Object 오브젝트 형태
    • 인스턴스를 생성할 수 없음
var book = {
	read: function(param){코드}
};
  • Function 오브젝트 형태
    • function readBook(param){코드};
    • 객체이지만, OOP의 객체라고 하기에는 부족
    • 객체에 메소드가 하나 있는 모습

prototype

  • JS의 OOP 구현 방법

    • prototype에 메소드 연결
  • prototype에 연결하여 작성

var Book = function(){};

Book.prototype.getBook = function(){ //prototype이 오브젝트이므로 {이름: 메소드} 형태로 연결
	return "JS북";
};
  • 다른 언어는 class 안에

    • 메소드와 프로퍼티를 작성하지만
  • 자바스크립트는 prototype에

    • 메소드를 연결하여 작성
    • ES6에서 class에 메소드를 작성
    • 하지만, 내부에서 prototype에 연결
class Book {
	constructor(title) {
    		this.title = title;
	}
    getBook(){
    	return this.title;
        }
}

인스턴스

  • Instance

    • Class를 new 연산자로 생성한 것
  • 인스턴스 목적

    • Class에 작성된 메소드 사용
    • 인스턴스마다 프로퍼티 값을 유지
    • 예: 축구 경기에서 각 팀에 적용되는 규칙은 같지만 팀마다 점수는 다르다.

new 연산자

  • 인스턴스를 생성하여 반환

    • new Book("JS책");
    • 인스턴스를 생성하므로 Book()을 생성자 함수라고 부름
    • 코딩 관례로 첫 문자를 대문자로 작성
  • 파라미터

    • 생성자 함수로 넘겨 줄 값을 소괄호()에 작성
var Book = function(point){
	this.point = point;
};
Book.prototype.getPoint = function(){
	return this.point + 100;
};
var oneInstance = new Book(200);

log(oneInstance.getPoint());

// 300

instanceof

  • 오브젝트로 생성한 인스턴스 여부 반환

    • instance instanceof object
    • instance 위치에 인스턴스 작성
    • object 위치에 비교 기준 오브젝트 작성
  • instance가 object로 생성한 인스턴스이면 true, 아니면 false 반환

var Book = function(point){
	this.point = point;
};
Book.prototype.getPoint = function(){
	return this.point + 100;
};
var oneInstance = new Book(200);

log(oneInstance instanceof Book);

// true

메소드 호출 형태

  • 데이터 형태

    • 배열: ["book", "책", 123]
  • OOP의 일반적인 형태

var data = ["book", "책", 123];
var obj = new Array();
var result = obj.concat(data);
log(result);

// [book, 책, 123]
  • 자바스크립트 형태

1) 데이터로 메소드 호출

var data = ["book", "책", 123];
var result = data.concat();
log(result);

// [book, 책, 123]

2) 오브젝트의 함수 호출

var data = ["book", "책", 123];
var bookObj = {
	concat: function(data){
    	return data.concat();
    }
};
log(bookObj.concat(data));

// [book, 책, 123]

3) 인스턴스의 메소드 호출

var data = ["book", "책", 123];
var Book = function(data){
	this.data = data;
};
Book.prototype.concat = function(){
	return this.data.concat();
};
var oneInstance = new Book(data);
log(oneInstance.concat());

// [book, 책, 123]
  • Object 확장
    • 네임스페이스(NameSpace)로 사용
    • Book = {};
    • Book.Javascript = {}; Book.Html = {};

메소드 사용 팁

  • 메소드를 알 수 없을 때

    • MDN 활용
    • MDN에서 "오브젝트 이름"으로 검색
    • 왼쪽의 리스트에서 메소드 이름을 찾는다.
    • 메소드 이름이 시맨틱을 갖고 있으므로 메소드 이름으로 기능 예측 가능
  • 메소드를 알고 있을 때

    • 기능을 정확하게 사용하기 위해 사용

Object 오브젝트(ES5)

ES5 Object 특징

  • ES5 Object에 함수가 추가됨

    • 메소드는 하나도 없음
  • 빌트인 Object의 모든 메소드는

    • 대부분의 빌트인 오브젝트에 첨부됨
    • 빌트인으로 오브젝트를 생성하므로 연결이 많이 발생
  • 함수는 첨부되지 않으므로 연결 부하를 줄일 수 있음


Object에 프로퍼티 추가

defineProperty()

  • 대상 오브젝트에 프로퍼티 추가 또는 프로퍼티 속성 변경

  • 프로퍼티마다 상태를 갖고 있음

    • 상태란? 변경/삭제/열거 가능 여부
    • 상태가 가능일 때만 처리할 수 있음
    • 프로퍼티를 추가할 때 상태 결정
var obj = {};
Object.defineProperty(obj, "book", {
	value: "JS북",
        enumerable: true
});
log(obj);

// {book: JS북}

defineProperties()

  • 다수의 프로퍼티를 추가하거나 속성 변경
    • 함수 기능은 defineProperty()와 같음
var obj = {};
Object.defineProperties(obj, {
	soccer: {
    	value: "축구", enumerable: true
    },
    basketball: {
    	value: "농구", enumerable: true
    }
});
for (var name in obj){
	log(name + ":" + obj[name]);
};

// soccer:축구
// basketball:농구

프로퍼티 디스크립터

  • 프로퍼티의 속성 이름과 속성 값을 정의

  • 디스크립터 타입 분류

    • 데이터 프로퍼티 디스크립터
    • 악세스(Access) 프로퍼티 디스크립터
    • 공용 프로퍼티 디스크립터
    • 디스크립터 타입에 속한 속성만 같이 사용 가능

디스크립터 타입 인식 기준

  • 먼저 value 또는 writable 작성 체크

  • 작성되어 있으면

    • 데이터 프로퍼티 디스크립터 타입으로 인식
  • 작성되어 있지 않으면

    • 악세스 프로퍼티 디스크립터 타입으로 인식
  • 데이터와 악세스 프로퍼티 디스크립터를 함께 작성할 수 없으므로 구분 가능


value/writable/enumerable/configurable 속성

value 속성

  • 프로퍼티 값을
    • {value: "JS북"} 형태로 작성
    • for~in에서 "JS북"이 프로퍼티 값이 됨
var obj = {};
Object.defineProperty(obj, "book", {
	value: "JS북",
    enumerable: true
});
for (var name in obj){
	log(name);
    log(obj[name]);
}

// book
// JS북
  • value 속성을 get/set 속성과 같이 작성 불가
var obj = {};
Object.defineProperty(obj, "book", {
	value: "JS북",
    // get: function(){}
});

//

writable 속성

  • 프로퍼티 값 변경 가능, 불가

  • writable: true

    • 프로퍼티 변경 가능
var obj = {};
Object.defineProperty(obj, "book", {
	value: "JS책",
    writable: true
});
obj.book = "변경 가능";
log(obj.book);

// 변경 가능
  • writable: false
    • 디폴트 값: false
    • 프로퍼티 변경 불가. 에러가 발생하지 않지만, 값이 변경되지 않음
var obj = {};
Object.defineProperty(obj, "book", {
	value: "JS책",
    writable: false
});
obj.book = "변경 불가";
log(obj.book);

// JS책

enumerable 속성

  • for~in으로 열거 가능 여부

  • enumerable: true

    • 프로퍼티 열거 가능
var obj = {};
Object.defineProperty(obj, "book", {
	value: "JS책",
    enumerable: true
});
for (var name in obj){
	log(name, ":" + obj[name]);
};

// book:JS북
  • enumerable: false
    • 디폴트 값: false
    • 프로퍼티 열거 불가
var obj = {};
Object.defineProperty(obj, "book", {
	value: "JS책",
    enumerable: false
});
for (var name in obj){
	log(name, ":" + obj[name]);
};

//

configurable 속성

  • 프로퍼티 삭제 가능, 불가

  • configurable: true

    • 프로퍼티 삭제 가능
    • value 이외 속성 변경 가능
var obj = {};
Object.defineProperty(obj, "book", {
	value: "JS책",
    configurable: true
});
delete obj.book;
log(obj.book);

// undefined
  • configurable: false
    • 디폴트 값: false
    • 프로퍼티 삭제 불가
    • value 이외 속성 변경 불가
var obj = {};
Object.defineProperty(obj, "book", {
	value: "JS책",
    configurable: false
});
delete obj.book;
log(obj.book);

// JS북

getter와 setter

get 속성

  • getter

    • OOP 용어
  • var result = obj.book; 코드를 만나면

    • obj.book의 get 함수가 호출되며
    • get 함수에서 "JS책"을 반환
    • 반환된 "JS책"을 result 변수에 할당
var obj = {};
Object.defineProperty(obj, "book", {
	get: function(){
    	return "JS책";
	}
});
var result = obj.book;
log(result);

// JS책
  • obj.book.get()처럼 함수로 호출하면 에러 발생

set 속성

  • setter

    • OOP 용어
  • obj.book = "JS책"; 코드를 만나면

    • obj.book의 set 함수를 호출하면서
    • "JS책"을 파라미터 값으로 넘겨 줌
    • data의 title 프로퍼티에 "JS책"을 설정
  • obj.book; 코드를 만나면

    • obj.book의 get 함수가 호출되며
    • get 함수에서 data.title 값을 반환
    • setter에서 설정한 "JS책"이 반환됨
var obj = {}, data = {};
Object.defineProperty(obj, "book", {
	set: function(param){
    	data.title = param;
	},
    get: function(){
    	return data.title;
	}
});
obj.book = "JS책";
log(obj.book);

// JS책

프로퍼티 추출

getPrototypeOf()

  • 파라미터의 prototype에 연결된 프로퍼티 반환
function Book(point){
	this.point = point;
};
Book.prototype.getPoint = function(){};
Book.prototype.setPoint = function(){};
var obj = new Book(100);

var result = Object.getPrototypeOf(obj);
for (var key in result){
	log(key + ":" + result[key]);
};

// getPoint:function(){}
// setPoint:function(){}
  • 참고
    • setPrototypeOf()가 ES5 스펙에 없고 ES6에 있음

getOwnPropertyNames()

  • 오브젝트의 프로퍼티 이름을 배열로 반환

  • 열거 가능 여부를 체크하지 않음

  • 자신이 만든 프로퍼티가 대상

    • 다른 오브젝트에서 받은 프로퍼티는 제외
var obj = {};
Object.defineProperties(obj, {
	book: {value: "책"},
    point: {value: 123}
});
var names = Object.getOwnPropertyNames(obj);
for (var k = 0; k < names.length; k++){
	log(names[k]);
};

// book
// point

keys()

  • 열거 가능 프로퍼티 이름 반환
    • {enumerable: true}
var obj = {};
Object.defineProperties(obj, {
	book: {
    	value: "책", enumerable: true
	},
    point: {value: 123} // enumerable: false이므로 반환하지 않음
});
var names = Object.keys(obj);
for (var k = 0; k < names.length; k++){
	log(names[k]);
};

// book

프로퍼티 디스크립터 함수

getOwnPropertyDescriptor()

  • 프로퍼티 디스크립터의 속성 이름, 값 반환
    • 다른 오브젝트에서 받은 프로퍼티는 제외
var obj = {};
Object.defineProperty(obj, "book", {
	value: "책",
    writable: true, enumerable: true
});
var desc = Object.getOwnPropertyDescriptor(obj, "book");
for (var key in desc){
	log(key + ":" + desc[key]);
};

// value:책
// writable:true
// enumerable:true
// configurable:false

preventExtensions()

  • 오브젝트에 프로퍼티 추가 금지 설정

  • 프로퍼티 삭제, 변경은 가능

  • 추가 금지를 설정한 후에는 추가 가능으로 변경 불가

var obj = {};
Object.preventExtensions(obj);
try {
	Object.defineProperty(obj, "book", {
    	value: "책"
	});
} catch (e) {
	log("추가 불가");
};

// 추가 불가

isExtensible()

  • 오브젝트에 프로퍼티 추가 금지 여부 반환
    • true: 추가 가능, false: 추가 불가
var obj = {};
Object.defineProperty(obj, "book", {
	value: "책",
});
log(Object.isExtensible(obj));

Object.preventExtensions(obj);
log(Object.isExtensible(obj));

// true
// false

seal()

  • 오브젝트에 프로퍼티 추가, 삭제 금지 설정

  • 추가 금지는 오브젝트 단위로 설정하고, 삭제 금지는 프로퍼티 단위로 설정

  • 추가 금지를 하더라도 변경은 가능

var obj = {};
OBject.defineProperty(obj, "book", {
	value: "책", writable: true
});

Object.seal(obj);
try {
	Object.defineProperty(obj, "sports", {
    	value: "스포츠"
	});
} catch(e) {
	log("추가 불가");
};

// 추가 불가

isSealed()

  • 오브젝트에 프로퍼티 추가, 삭제 금지 여부 반환
    • true: 불가, false: 가능
var obj = {};
Object.defineProperty(obj, "book", {
	value: "책", writable: true
});
log(Object.isSealed(obj));

Object.seal(obj);
log(Object.isSealed(obj));

// false
// true

freeze()

  • 오브젝트에 프로퍼티 추가, 삭제, 변경 그지 설정
var obj = {};
OBject.defineProperty(obj, "book", {
	value: "JS책", writable: true
});

Object.freeze(obj);
try {
	Object.defineProperty(obj, "book", {
    	value: "포인트"
	});
} catch(e) {
	log("변경 불가");
};
log(obj.book);

// 변경 불가
// JS책

isFrozen()

  • 오브젝트에 프로퍼티 추가, 삭제, 변경 금지 여부 반환
    • true: 불가, false: 가능
var obj = {};
Object.defineProperty(obj, "book", {
	value: "책", writable: true
});
log(Object.isFrozen(obj));

Object.freeze(obj);
log(Object.isFrozen(obj));

// false
// true

JSON 오브젝트

JSON 오브젝트 개요

  • JavaScript Object Notation

    • 빌트인 오브젝트
    • new 연산자로 인스턴스 생성 불가
  • JSON 주요 기능

    • 데이터 송수신의 변환 기준
    • 텍스트이므로 전송 속도가 빠름
    • 파일 확장자: json, txt도 사용 가능
  • JS 데이터 타입 지원

    • 다른 언어도 사용하지만, 완전하게 같지 않을 수도 있음

stringfy()

  • JS 타입을 JSON 타입의 문자열로 변환

    • JSON.stringfy() 형태로 호출
  • 첫 번째 파라미터

var value = {
	book: "책",
	title: 123
};
var result = JSON.stringfy(value);
log(result);

// {"book":"책", "title":123}
var value = ['book', '책', 123];
var result = JSON.stringfy(value);
log(result);

// ["book","책",123]
log(JSON.stringfy([Infinity, NaN, null]));
log(JSON.stringfy([true, false]));

// [null, null, null]
// [true, false]
log(JSON.stringfy(undefined));
log(JSON.stringfy([undefined]));
log(JSON.stringfy({value: undefined));

// undefined
// [null]
// {}
  • 두 번째 파라미터
var data = {book: '책', point: 55};
function relpace(key, value){
	return key === "point" ? 11 : value;
};
var result = JSON.stringfy(data, replace);
log(result);

// {"book":"책","point":11}
 

var data = {book:'책', point: 11, amount: 90};
var result = JSON.stringfy(data, ['book', 'amount']);
log(result);

// {"book":"책","amount":90}
  • 세 번째 파라미터
var data = {sports:'soccer', time: 90};
var result = JSON.stringfy(data, "", '\n');
log(result);

/*
{
"sports":"soccer",
"time":90
}
*/
var data = {sports:'soccer', time: 90};
var result = JSON.stringfy(data, "", 4); // 4만큼 들여쓰기
log(result);

/*
{
    "sports":"soccer",
    "time":90
}
*/
var data = {sports:'soccer', time: 90};
var result = JSON.stringfy(data, "", "##");
log(result);

/*
{
##"sports":"soccer",
##"time":90
}
*/

JSON 타입 파싱

parse()

  • JSON 타입을 JS 타입으로 변환

  • 작성 주의

    • "123."을 "123.0"으로 작성
    • "0123"처럼 첫 자리에 0 사용 불가
    • 대문자 "NULL" 사용 불가, "null" 사용
    • 10진수 사용
/*
JSON 형태는 기본적으로 큰따옴표 사용
즉, String 타입이지만 JSON.parse()에서 JS 타입에 맞도록 변환
"123"은 문자열이지만 값이 숫자이므로 Number 타입의 숫자로 변환
파싱 대상이 서버에서 받은 데이터일 때, try-catch 사용 필수
*/
var value = "123";
try {
	var result = JSON.parse(value);
} catch(e){
	console.log("JSON 파싱 에러");
};
log(result);
log(typeof result);

// 123
// number
// try-catch 원래는 사용해야 함!
var value = "true";
var result = JSON.parse(value);
log(result);
log(typeof result);

// true
// boolean
var value = '["ABC", "가나", "12"]'; // 배열에 작성된 String 타입의 숫자는 숫자로 변환 안함
var result = JSON.parse(value); 
log(result);

// ["ABC", "가나", "12"]
var value = '{"point": "123"}'; 
var result = JSON.parse(value);
log(result);

// {point: "123"}
// JS는 프로퍼티 이름에 큰따옴표 사용하지 않으므로 큰따옴표 표시되지 않음
  • 두 번째 파라미터 작성
var data = '{"book": "책", "movie": "영화"}';
var check = function(key, value){
	return key === "book" ? "JS책" : value;
};
var result = JSON.parse(data, check);
log(result);

// {book: "JS책", movie: "영화"}
  • 첫 번째 파라미터의 JSON 문자열을 파싱하면

    • {book: "책", movie: "영화"} 형태가 됨
  • 파싱한 오브젝트를 하나씩 읽어가면서 두 번째 파라미터의 함수를 실행

  • 함수에서 값을 반환하면 파싱 결과인 result 변수에 반영

  • 값을 반환하지 않거나 undefined를 반환하면 프로퍼티가 제외되므로 반환해야 함


Date 오브젝트

Date 오브젝트 개요

  • 년월일, 시분초, 밀리초 제공

    • 시간값(Time Value)라고 부름
  • UTC(Universal Time Coordinated) 기준

    • 1970년 1월 1일 기준으로 밀리초를 제공. 남는 초는 무시
    • 1970.01.01 0시 기준으로 전후 100,000,000일 지원
  • UTC와 GMT(Greenwich Mean Time)
    JS는 UTC 기준


시간값 표시 기준

  • 월은 0부터 시작

    • 0: 1월, 1: 2월, 11: 12월
  • 일은 1에서 31일까지 정수로 표시

  • 요일은 0부터 시작

    • 0: 일요일, 1: 월요일, 6: 토요일
var obj = new Date(1970, 1, 1, 1, 1, 1, 1);
log(obj.toLocaleString());

// 1970. 2. 1. 오전 1:01:01

new Date()

  • Date 인스턴스 생성
    • 파라미터 값을 인스턴스의 프리미티 값으로 설정
var obj = new Date(2019, 02);
log(obj);

// Fri Mar 01 2019 00:00:00 GMT+0900 (한국 표준시)
// 값을 작성하지 않으면 0으로 간주
  • 파라미터를 작성하지 않으면
    • UTC 기준 현재 시간
log(new Date());

// Sun Jul 28 2019 04:40:45 GMT+0900 (한국 표준시)
  • 파라미터를 문자열로 작성하면
    • "2019-12-15T09:11:23.123"
    • 밀리초로 변환
log(new Date("2019-02"));

// Fri Feb 01 2019 09:00:00 GMT+0900 (한국 표준시)
/* 
문자열 작성의 차이
new Date(2019, 02)에서 02가 3월로 변환되지만
new Date("2019-02")는 2월로 변환됨
*/
  • 시간 자동 넘김
log(new Date(2019, 11, 34));

// Fri Jan 03 2020 00:00:00 GMT+0900 (한국 표준시)
/*
월일시분초 범위를 넘치면 상위 시간값에 반영됨
단, 문자열로 작성하면 에러
new Date(2019, 11, 34)에서 34가 31을 넘치므로 3을 남겨두고 11에 1을 더함
12는 13월이므로 1을 남겨두고 2019에 1을 더함
따라서 2020.01.03
*/

Date.now()

  • 현재 시간을 밀리초로 반환
log(Date.now());
log(new Date()); // 같은 시간값이지만 값 표시가 다름

// 1564256664242
// Sun Jul 28 2019 04:44:24 GMT+0900 (한국 표준시)

Date.parse()

  • 문자열 값을 밀리초로 변환
    • 1970.01.01부터 경과한 시간
log(Date.parse("2019-01-23T09:11:23.123"));

// 1548202283123

Date 오브젝트 함수 분류

시간을 반환하는 함수

  • getMonth(), getDate() 등
var obj = new Date(2019, 02, 15);
log(obj.getMonth());
log(obj.getDate());

// 2
// 15

시간을 설정하는 함수

  • setMonth(), setDate() 등
var obj = new Date();
log(obj.valueOf());
log(obj.setMonth(01));
log(obj.setDate(15));

// 1564256773401
// 1551296773401
// 1550173573401

주의사항

  • 클라이언트의 시간은 사용자가 변경 가능
  • 마감 시간처럼 시간이 중요할 때에는 서버 시간 사용

Math 오브젝트

Math 오브젝트 개요

  • 수학 계산용 오브젝트

    • 상수, 절댓값, 사인, 탄젠트 등
  • new 연산자로 인스턴스 생성 불가

    • Math, JSON, 글로벌 오브젝트
  • 메소드가 아니라 함수

    • Math.abs(값) 형태

abs

  • 음수를 양수로 변환한 절댓값 반환
log(Math.abs(-123));
log(Math.abs(-Infinity));

// 123
// Infinity

floor()

  • 소수 이하 버림, 정숫값 반환
  • 소수 이하 값이 있으면서 음수면 -1을 더해 반환
log(Math.floor(5, 3));
log(Math.floor(-1.7));
log(Math.floor(-1.0));

// 5
// -2
// -1

ceil()

  • 소수 이하 올림, 정숫값 반환
log(Math.ceil(5.1));
log(Math.ceil(-1.7));
log(Math.ceil(-0.3));

// 6
// -1
// 0

round()

  • 소수 이하 반올림, 정숫값 반환

  • 양수이면 반올림, 음수이면 반내림

log(Math.round(5.1));
log(Math.round(5.5));
log(Math.round(-1.6));
log(Math.round(-1.3));

// 5
// 6
// -2
// -1

max()

  • 파라미터 값 중에서 가장 큰 값을 반환

  • 파라미터 값을 전부 숫자로 변환하여 비교

    • NaN가 하나라도 있으면 NaN 반환
log(Math.max(5, 3, 9));
log(Math.max(5, 3, "AB"));

// 9
// NaN

min()

  • 파라미터 값 중에서 가장 작은 값을 반환

  • 파라미터 값을 전부 숫자로 변환하여 비교

    • NaN가 하나라도 있으면 NaN 반환
log(Math.min(5,3, 9));
log(Math.min(5, 3, "AB"));

// 3
// NaN

pow()

  • 파라미터가 x값의 y승 값을 반환

  • y가 0일 때 x가 NaN라도 1을 반환

  • y가 NaN이면 NaN 반환

  • 이처럼 경우의 수가 많으므로 사용하기 전에 테스트 필요

log(Math.pow(10, 2));
log(Math.pow(10, 0));
log(Math.pow("A", 1));
log(Math.pow(1, "A"));
log(Math.pow(1)); // 두 번째 파라미터 안 쓰면 NaN

// 100
// 1
// NaN
// NaN
// NaN

random()

  • 0에서 1미만 사이의 난수 반환
log(Math.random());
log(Math.random());

// 0.583434121236421
// 0.883472304023923

0개의 댓글