const 변수, 상수명 = {
키 : 값,
키 : '값',
'키 키' : 값
// 키는 공백이 없어야하며 있어야 할 경우 따옴표로 감싸 문자열로 넣어준다
}
객체를 선언할 때에는 { } 문자 안에 원하는 값을 넣어줌
하나의 이름에 여러 종류의 값을 넣을 수 있음
const dust = {
name : 'dust',
color : 'black',
shape : 'circle',
};
console.log(dust.name);
// dust
console.log(dust.color);
// black
function print(info){
const text = '${info.name}는 ${info.color},${info.shape}'
console.log(text);
}
객체 비구조화 할당
위에서 객체의 값을 조회할 때 마다 info.를 입력했는데 객체 비구조화 할당 문법을 사용하면 더욱 짧고 가독성을 높일 수 있다
const dust = { name: 'dust', color : 'black', shape : 'circle'};
const { name, color, shape } = dust;
console.log(name); // dust
console.log(color); // black
console.log(shape); // circle
// 또는
const dust = { name: 'dust', color : 'black', shape : 'circle'};
const { name : a, color : b, shape : c } = dust;
// 객체의 속성명과는 다른 이름의 변수에 할당 할 수 있다
console.log(a) // dust
console.log(b) // black
console.log(c) // circle
const dust = {
name : 'dust',
color : 'black',
shape : 'circle',
}
function print(info){
const { name, color, shape } = info;
// ✔객체에서 값을 추출하여 새로운 상수로 선언✔
console.log(name + '는 ' + color, shape);
}
print(dust);
// dust는 black, circle
let { x = 5, y = 2 } = { 1 };
// 1이 x에 대입, y에는 들어갈 값이 없기 때문에 그대로 나옴
// x = 1, y = 2
let { x = 5, y = 2 } = { 10, 20 };
// x = 10, y = 20
let number = { x: 10, y: 20 };
let { x, y } = number;
function print({ x, y, z }){
console.log(x);
console.log(y);
console.log(z);
}
print(number);
// 10
// 20
// undefined
// ---------------------------------------
// z에 기본값을 주고 싶을 때
function print({ x, y, z = 30 }){
console.log(x);
console.log(y);
console.log(z);
}
print(number);
// 10
// 20
// 30
객체안에 함수 넣기
const dust = {
name : 'dust',
active : '팔랑팔랑',
move : function move(){
// 함수가 객체 안에 들어가게 되면 this는 자신이 속한 객체를 가르킨다
// 함수를 선언 할 때 함수명은 필수가 아님
// ex) move : function() { ~
// 객체 안에 화살표 함수는 x ==> this는 자신이 속한 객체를 가르키지만 화살표 함수는 그렇지 않기 때문
console.log(this.name + "는 " + this.active);
}
};
dust.move();
// dust는 팔랑팔랑
const animal = ["강아지", "고양이", "햄스터"];
const [dog, cat, ham, rabbit = "토끼"] = animal;
// 위에 예시는 되는데 왜 얘는 안될까
// 확인하기
// 배열에 변수와 값을 추가하고 싶을 때
animal[3] = "토끼";
const animal = ["고양이", "강아지", "햄스터", "다람쥐"];
const [ a, b, ...rest ] = animal;
// 여기서 rest 는 원하는 텍스트를 입력해주면 됨
// 객체 안에 있는 값을 추출하여 변수 or 상수로 바로 선언
// ... 지시자 사용 시 분해하고 남은 변수들을 따로 배열로 담을 수 있다
console.log(a); // 고양이
console.log(b); // 강아지
console.log(rest) // ['햄스터', '다람쥐'];
function Array(){
return { 1, 2, 3, 4, 5 };
}
{ a, , , , e } = Array();
console.log(a); // 1
console.log(e); // 5
var click = document.querySelector('.click');
click.onclick = function(){
// 원하는 내용
// ex) 글꼴 색상 변경시
click.style.color = 'red';
}
document.onclick = clickEvent;
function clickEvent(){
// 원하는 내용
}
alert
메세지를 지정할 수 있는 모달창을 띄움
window.alert('alert를 클릭했습니다.');
alert('alert를 클릭했습니다.');
// 둘 다 같은 내용으로 window 창을 켰을 때 확인할 수 있음
prompt
텍스트 입력 가능한 모달창을 띄움
사용자가입력한문자열을반환, 취소또는 Esc 클릭시 null을반환함
window.prompt('prompt를 클릭했나요?', '네');
var name = prompt('당신의 이름은?','');
window.alert('당신의 이름은 ' + name + ' 입니다.');
// 당신의 이름은 ㅇㅇㅇ 입니다.
classList.add
// 클래스 값 추가, 추가하려는 클래스가 class 속성에 존재한다면 무시
classList.remove
// 클래스 값 제거, 존재하지 않는 클래스 제거 시 에러발생하지 않음
classList.item(number);
// 콜렉션의 인덱스를 이용하여 클래스 값 반환
classList.toggle(String)
// 클래스 값을 토글(클래스 값이 존재한다면 제거 후 false 반환, 존재하지 않으면 추가하고 true를 반환한다)
// 두번째 인수가 있을 때 - 두번째 인수가 true로 평가되면 지정한 클래스 값을 추가하고 false로 평가되면 제거
classList.contains(String)
// 지정한 클래스 값이 element의 class 속성에 존재하는지 확인
classList.replace(oldClass, newClass);
// 존재하는 클래스를 새로운 클래스로 교체한다
const div = document.createElement('div');
div.className = 'foo';
// our starting state: <div class="foo"></div>
console.log(div.outerHTML);
// use the classList API to remove and add classes
div.classList.remove("foo");
div.classList.add("anotherclass");
// <div class="anotherclass"></div>
console.log(div.outerHTML);
// if visible is set remove it, otherwise add it
div.classList.toggle("visible");
// add/remove visible, depending on test conditional, i less than 10
div.classList.toggle("visible", i < 10 );
console.log(div.classList.contains("foo"));
// add or remove multiple classes
div.classList.add("foo", "bar", "baz");
div.classList.remove("foo", "bar", "baz");
// add or remove multiple classes using spread syntax
const cls = ["foo", "bar"];
div.classList.add(...cls);
div.classList.remove(...cls);
// replace class "foo" with class "bar"
div.classList.replace("foo", "bar");
비슷하게 Element.className로 대체할 수 있음
클래스명을 변경할 수 있음
var el = document.getElementById('item');
if (el.className === 'active'){
el.className = 'inactive';
} else {
el.className = 'active';
}
var id = document.querySelector('#id');
var class = document.querySelector('.class');
선택자를 만족하는 첫번째 element 반환, 일치하는 요소가 없을경우 null을 반환 id 선택자인데 문서내에 같은 아이디를 여러번 사용한 경우 첫번째 id 값을 가진 element 반환
var classList = document.querySelectorAll('.class');
선택자를 만족하는 모든 요소의 리스트 반환, 결과가 없을경우 빈 리스트를 반환
var classMany = document.querySelectorAll('.class1, .class2');
위와 같지만 !여러개!를 반환
var divInnerClass = document.querySelector('div.class.class input[name=class]')
복잡한 선택자도 선택 가능 - css에서 선택할때랑 비슷함
아이디로 찾기
var id = document.getElementById('id');
//ex) 매개변수 대소문자 구분
<div class="Main"></div>
var id = document.getElementById('main');
// null
var id = document.getElementById('Main');
// <div class="Main"></div> 반환
문자열과 일치하는 id 속성을 가진 요소를 찾아 element 객체를 반환함, 결과가 없을경우 null을 반환
id의 대소문자가 정확해야함 ID로 입력할 경우 유효하지 않은 이름이기때문에 사용 불가능함
var class = document.getElementByClassName('class');
// ex) 클래스명 모두 포함하고 있는 요소 탐색 가능
<div class="class class2"></div>
var class_class2 = document.getElementByClassName('class class2');
// ex) 다중 선택은 불가
<div class="class"></div>
<div class="class2"></div>
결과가 없을경우 뭘 반환하는거지 - HTMLCollection ?
위와 마찬가지로 id의 대소문자가 정확해야함(매개변수, 메소드명)
var id_class = document.getElementById('id').getElementsByClassName('class');
문자열과 일치하는 id 속성 내 class라는 클래스를 가진 모든 요소 탐색
var class_class = document.getElementsByClassName('class').getElementsByClassName('class');
// 요거는 왜 안될까
var class_id = document.getElementsByClassName('class').getElementById('id');
// 이것도 안됨
// document.getElementsByClassName 이 배열 함수기때문