생성자 함수
new 연산자를 붙여 실행
이름 첫 글자는 대문자
생성자 함수를 만드는 이유 -> 객체를 쉽게 만들기 위해 생성자 함수를 만든다.
찍어내는 용도로 사용
let newBook = {};
newBook['책이름'] = 'JavaScript';
newBook['책가격'] = 1000000;
function Book(책이름, 책가격, 저자, 출판일) {
this.책이름 = 책이름;
this.책가격 = 책가격;
this.저자 = 저자;
this.출판일 = 출판일;
}
let data = new Book('CSS', 10, 'lee', '22.12.30');
콜백함수
파라미터로 함수를 전달받아서 함수 내부에서 실행
함수이름을 아규먼트로 전달하여 코드 어딘가에서 언젠간 실행을 함
function sum(x,y,콜백함수) {
콜백함수(x + y);
return x+y;
}
sum(2,5,console.log);
arr.map(callback(currentValue[, index[, array]])[, thisArg])
let arr = [10, 20, 30, 40, 50];
function 제곱(x) {
return x ** 2;
}
arr.map(제곱);
arr.map(x => x ** 2);
function 두배(x) {
console.log(x*2);
}
let arr = [10, 20, 30, 40,50];
arr.forEach(두배);
let arr = [10, 20, 30, 40,50];
arr.map(x => x ** 2);
let arr = [10, 20, 30, 40, 50];
let result = [];
arr.forEach( e => {
result.push(e**2);
});
console.log(result);
Map
map 객체는 key-value 쌍을 가지는 객체 자료형 중 하나
let m = new Map();
m
.set('하나', 1)
.set('듈', 2)
.set('셋', 3)
.set('넷', 4)
.set(true, '트루')
.set([1,2], '리얼리?');
console.log(m.get('하나'));
console.log(m.has('하나'));
console.log(m.delete('하나'));
console.log(m.size);
.set('name','lee')
.set('age', 10)
.set('height', 180)
let data = {'one':1, 'two': 2};
let data = new Map([['one',1],['two',2]]);
let data = new Map(Object.entries({'one':1, 'two':2}));
let m = new Map();
m
.set('하나', 1)
.set('듈', 2)
.set('셋', 3)
.set('넷', 4)
.set(true, '트루')
.set([1,2], '리얼리?');
for (const [i,j] of m) {
console.log(i);
}
m.keys();
m.values();
m.entries();
Object의 키는 "문자열" 타입으로만 지정 가능
Map의 키는 모든 값 지정 가능
Object 크기는 수동으로 알아야하지만
Map 크기는 size를 통해 쉽게 가능
Set
모든 타입 값을 저장하는 객체자료형의 한 종류
중복 허락 안함!!!
let s = new Set ('abcdeeeee');
console.log(s);
console.log(s.size);
let s = new Set("abcdeeeeee");
console.log(s.size);
console.log(s.add('f'));
console.log(s.size);
for (let variable of s) {
console.log(variable);
}
console.log(s.delete('f'));
console.log(s.has('e'));
console.log(s.clear);
let a = new Set('abc');
let b = new Set('cde');
let cro = [...a].filter(value => b.has(value));
let union = new Set([...a].concat(...b));
let dif = [...a].filter(x => !b.has(x));
this
엄격모드
비엄격모드
호출한 방법에 의해 결정됨
-> 어떻게 호출하였는지 상관없이 this 값 설정하는 bind 메서드 도입
-> 스스로의 this 바인딩을 제공하지 않는 화살표 함수
function a(){ console.log(this) }
a();
let test = {
val1: 100,
three: function () {
console.log(this);
}
}
test.three();
let test2 = test.three();
function myName() {
console.log(this.name);
}
var name = 'hero';
sayName();
let peter = {
name : 'Peter Parker',
say : sayName
}
let bruce = {
name : 'Bruce Wayne',
say : sayName
}
peter.say();
bruce.say();
. 멤버접근연산자로 가리켜야 나를 호출한 위를 가리킴
(. 앞에꺼를 ...this로)
일반 함수로 호출되면 전역객체 window를 가리킴
메소드로 호출되면 호출한 객에체 바인딩
만들어질 때가 아닌 실행될 때 값 결정
this 값을 사용자의 의도대로 조작
apply(), call(), bind()
apply() -> 인자 값이 두개
call() -> 인자 값이 한개
bind() -> 고정
var peter = {
name : 'Peter Parker',
sayName : function(){
console.log(this.name);
}
}
var bruce = {
name : 'Bruce Wayne',
}
peter.sayName.call(bruce);
peter.sayName()
var peter = {
name : 'Peter Parker',
sayName : function(감탄사){
console.log(this.name + 감탄사);
}
}
var bruce = {
name : 'Bruce Wayne',
}
peter.sayName.call(bruce, '!');
var peter = {
name : 'Peter Parker',
sayName : function(is, is2){
console.log(this.name+ ' is '+ is + ' or ' + is2);
}
}
var bruce = {
name : 'Bruce Wayne',
}
peter.sayName.apply(bruce, ['batman', 'richman']);
JSON
JavaScript Object Notation 자바 스크립트에서 객체를 표현하는 형식으로 데이터를 표현
텍스트로 표현된 정보의 덩어리