목차
객체
# 객체 리스트
- DB의 ROW를 하나씩 읽어서 리스트에 담아놓은것을 의미
객체에 함수를 하나하나 넣는 것은 비효율적, AND 함수를 따로 만든것은 효율적이긴 하나 객체지향적은 아님
따라서 아래와 같이 생성
- 자바와 다른점은 THIS.NAME = NAME 하면 필드에 값이 들어감. (왜냐면 어차피 값이 없으면 UNDEFINED이니까 CONSTRUCTOR 밑에 적는)
- 클래스 내부 메소드에서도 THIS. 하면 사용가능함
- 클래스에 함수를 만들어놓으면 프로토타입영역에 따로 생성되기 때문에, 초기에 모든 멤버에 하나하나 함수를 만든것과는 다름 (밑에 : 나쁜 예시)
존재하지 않는 값 찾기 (== 사용! )
- UNDEFINED 찾을 때도 NULL로 찾는다
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
class Product
{
constructor(name, price)
{
this.name = name;
this.price = price;
}
print()
{
document.write(`${this.name}의 가격은 ${this.price}원 입니다 `)
// 동적바인딩 가능
//document.write(`<p>제조사 : ${this.company}</p>`);
this.aaa(); // JS는 자식에게만 있어도 호출이 된다
}
}
class Car extends Product // 상속된다
{
constructor(name, price, company)
{
super(name,price);
this.company = company;
}
//오버라이딩
print()
{
super.print();
document.write(`<p>제조사 : ${this.company}입니다 `)
}
aaa()
{
document.write("<p>car의 ㅁㅁㅁ 메소드</p>");
}
}
let car = new Car('그랜져',5000,"현대");
car.print();
</script>
</body>
</html>
하지만, JS는 변수 선언하면 모든 객체를 다 받을 수 있기 떄문에 굳이 상속하고 할 필요가 있나,,, (사족이 될 수도 있음)
표준 내장객체
firefox가 원래 모질라엿음. 따라서 상용화된 세계 최초 브라우져는 모질라임
브라우져 특허는 모질라에 있는데 (돈주고 샀는데) 마소에서 걍 공짜로 배포해버려서 소송 했었음
자료형 종류(기본, 객체)
기본자료형
let String "삐용삐용";
❗ 객체가 아니므로 속성 & 메소드 추가 불가능 ❗
let num = 35;
//num.method = function(){}; // X 불가능
// 따라서 프로토타입으로 추가한다
//num.prototype.method = function(){}; // X 불가능
Number.prototype.method = function()
{
return this.valueOf();
}
console.log(num.method());
//35 반환
객체 자료형
let String = new String("삐용삐용");
기본 자료형의 속성 또는 메소드를 사용할 떄 자동으로 객체로 변환된다!
이걸 응용해서 CRUD
Number 객체
- toFixed()
let num = 3.141592; console.log(num.toFixed(1)) // 3.1 console.log(num.toFixed(4)) // 3.1415
- 숫자를 해당소숫점까지 나타낸 문자열 리턴
String 객체
String은 변경된 값을 리턴한다 (재할당 필요)
- 메소드
- indexOf()
let String = "안녕 좋은아침!"; if (String.indexOF("아침") >=0 ) { console.log("굿모닝!" ); }
- 특정 문자열이 있는지 확인 ( 문자열 없으면 -1 반환)
Date 객체
Month(월) 은 0부터 시작한다
- 메소드 활용FullYear, Month, Day, Hour, Minutes, Seconds ,,
- 시간끼리 빼서 시간 간격을 구할 수 있음
let now = new Date(); // 현재 시간 lst point = new Date('December 9 1999'); let interval = now.getTime() - point.getTime(); interval = Math.floor(interval / (1000*60*60*24) ); console.log(`태어나고 ${interval}일 지났습니다`) // 태어나고 10886일 지났습니댜
- get__() , set__ () 메소드 사용
Array 객체
*표시된 메소드는 자기 자신을 변화시킴
- 정렬역방향 : reverse()
- 객체 내부의 숫자로 정렬하고 출력하기
- 내부 문자로 정렬하고 출력하기
- 정방향 : sort()
- forEach()
let array = [11,22,33,44,55]; array.forEach(item,idx) => { console.log(`${idx}번째 요소는 ${item}입니다`);}
- 배열의 요소를 하나씩 뽑아 반복 돌림 ( for문과 비슷)
- map()
- 콜백 함수에서의 리턴값 기반으로 새로운 배열 생성
- filter()
- 콜백함수에서 리턴값이 true인것만으로 새로운 배열 생성
- 배열의 요소를 삭제
- pop() : 함수 배열의 마지막 요소 삭제 & 삭제된 요소 값 반환
var arr = ['A', 'B', 'C', 'D']; var popResult = arr.pop(); console.log(popResult); // D
- 빈배열을 삭제하는 경우는 undefined 반환
- shift() : 첫번쩨 요소 삭제 & 삭제된 요소값 반환
- var arr = ['A', 'B', 'C', 'D']; var shifhtResult = arr.shift(); console.log(shifhtResult); // A
- splice( 제거할 요소 인덱스 , 제거할 개수 ) :첫번쨰 인자를 0, 두번째 인자 생략하면 모든 배열의 모든 요소 삭제가능
var arr = ['A', 'B', 'C', 'D']; var splicetResult = arr.splice(1, 2); console.log(splicetResult); // ["B", "C"]
- 반환값은 삭제한 배열의 요소를 담은 ‘배열’
- filter () :조건에 일치하는 새 배열 생성 (기존 배열 변경x)
- var arr = [1, 2, 3, 4, 5]; var filterArr = arr.filter(function(data) { return data < 3; }); console.log(filterArr); // [1, 2]
- delete () : 특정 배열요소 삭제, but 배열 길이는 그대로 (빈값으로 변경하기 떄문)
var arr = [1, 2, 3, 4, 5]; delete arr[0]; console.log(arr); // [empty, 2, 3, 4, 5] console.log(arr.length);// 5 console.log(arr[0]); // undefined