forEach

 

for문 사용

const array = [ '강아지', '고양이', '토끼', '햄스터'];

for (let i = 0; i < array.lenght; i++){
  console.log(array[i]);
};

 

forEach문 사용

const array = [ '강아지', '고양이', '토끼', '햄스터'];

array.forEach(ani => {
  console.log(ani);
};

 

 

 

map

 

제곱일경우 forEach 예시

const array = [1, 2, 3, 4, 5, 6, 7];

const squared = [];

array.forEach(number => {
  squared.push( number * number );
});

 

map 사용

const array = [1, 2, 3, 4, 5, 6, 7];

const square = n => n * n;
//             n => 1 * 1;
//             n => 2 * 2;
//             n => 3 * 3;  ... 

const squared = array.map(square);
console.log(squared);



// 또는 이런식으로 작성 가능
const squared = array.map(n => n * n);

- 변화를 주는 함수를 전달(변화함수)

- 배열을 순회하면서 element의 값을 변경하여 새로운 배열을 만듬

- return 되는 값을 배열로 만듬

 

 

 

indexOf

const array = [ '강아지', '고양이', '토끼', '햄스터'];

const index = array.indexOf('햄스터');
console.log(index);
// 3

원하는 값을 찾아 몇 번째 원소인지 반환

findIndex

const todos = [
  {
    id: 1,
    name: 'text1'
  },
  {
    id: 2,
    name: 'text2'
  },
  {
    id: 3,
    name: 'text3'
  },
  {
    id: 4,
    name: 'text4'
  },
  {
    id: 5,
    name: 'text5'
  }
];

const index = todos.findIndex(todo => todo.id === 4);
console.log(index);
// 3

id 값이 4인 객체가 몇 번째인지 찾아야 할 경우

find

const todo = todos.find(todo => todos.id === 4);
console.log(index);

// { id: 4, text: 'text4' }

id 값이 4인 객체 값을 반환

 

 

 

 

 

 

 

 

참고

https://learnjs.vlpt.us/basics/09-array-functions.html#map

 

09. 배열 내장함수 · GitBook

09. 배열 내장함수 이번에는 배열을 다룰 때 알고있으면 너무나 유용한 다양한 내장 함수들에 대하여 알아보겠습니다. forEach forEach 는 가장 쉬운 배열 내장함수입니다. 기존에 우리가 배웠던 for

learnjs.vlpt.us

 

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

  const dust = {
    name: "dust",
    color: "black",
    shape: "circle",
    active: "팔랑팔랑",
    move: function move() {
      console.log(this.name + "는 " + this.active);
    },
  };
  
  
  dust.name = "dust2";
  console.log(dust.name);
  // dust2

우짜다 보니 콘솔에 dust.name 을 수정하고 봤는데 값이 변경되길래 const인데.. . 상수인데 왜 값이 바뀌지 .. .? 

해서 찾아봄

 

상수로 변수를 선언할 때 사용,

const는 할당된 값의 바인딩 변경을 못하게 막는 것이지 바인딩 된 값의 변경을 막는 것이 아니다

 

...? 뭔말일까..

const dust = {
  name: 'dust'
};

dust.name = 'test';
// dust --> test
// 이런식으로 변경은 가능

// ------------------------------------------------

const dust = {
  name : 'dust'
};

dust = {
  name : 'test'
};
// dust --> ! 오류 !

이런 속성이라고 한다

 

참고

https://velog.io/@hemtory/JSConstLetIIFE

 

JS - const, let, 즉시 실행 함수

JS const, let, 즉시 실행 함수

velog.io

 

 

 

 

배열 비구조화 할당 

 

기존

const animal = ["고양이", "강아지", "햄스터", "다람쥐"];

// 변수에 담기
const cat = animal[0];
const dog = animal[1];
const ham = animal[2];
const squirrel = animal[3];

값을 꺼내려면 귀찮고, 가독성이 좋지않음

 

 

비구조화 할당

const [cat, dog, ham] = ["고양이", "강아지", "햄스터"];

// 기본값 지정
const [cat, dog, ham, rabbit = "토끼" ] = ["고양이", "강아지", "햄스터"];
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

원하는 배열 요소만 가져올 수 있다

onclick

onclick 요소를 클릭할 때 이벤트 발생

 

확인하기

 

 

alert prompt confirm

 

<div onclick="alert('안녕하세요')">클릭</div>
<div onclick="myFunction();" class="click">클릭</div>
<!-- myFunction() 메소드를 불러옴 -->
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 + ' 입니다.');
// 당신의 이름은 ㅇㅇㅇ 입니다.

 

confirm

확인, 취소 버튼이 있는 모달창을 띄움

사용자가 확인 버튼을 누르면 true, 취소 또는 Esc 클릭시 false 반환함

window.confirm('취소, 확인을 확인해보세요.');
// ex)
if(window.confirm('카테고리로 이동하시겠습니까?')){
    window.open('https://min-ji07.tistory.com');
}

 

 

모달창이 떠있는 경우 스크립트의 실행이 일시 중단되며 창을 닫기 전까진 상호작용이 불가능함

모달창의 위치는 브라우저가 결정하며 모양은 브라우저마다 다름

 

 

var lastScrollTop = 0;
    var delta = 5;
    var fix = document.querySelector('.category-banner');
    var fixWrap = document.querySelector('.wraper');
    var fixHeight = fix.offsetHeight;
    var didScroll;

    window.onscroll = function(e){
        didScroll = true;
    }
    // 반복 0.25초마다 스크롤 여부 체크하여 scroll() 호출
    setInterval(function(){
        if(didScroll){
            scroll();
            didScroll = false;
        }
    }, 250);
    function scroll(){
        var nowScrollTop =  window.scrollY;
        console.log(nowScrollTop);
        if(Math.abs(lastScrollTop - nowScrollTop) <= delta){
            return;
            // 0 - 세로 높이가 크거나 같을경우 숫자 반환?
        }
        if(nowScrollTop > lastScrollTop && nowScrollTop > fixHeight){
            // 세로 높이 > 0 and 세로높이 > body 높이
            // 상단 고정 헤더 효과 주기
            fix.classList.add('active');
            fixWrap.classList.add('active');
        }else{
            if(nowScrollTop + window.innerHeight < document.body.offsetHeight){
            // 세로 높이 + 브라우저 창의 높이(창의 크기) < body 값(body의 컨텐츠가 많아지면 커짐)
                fix.classList.remove('active');
                fixWrap.classList.remove('active');
            }
        }
        lastScrollTop = nowScrollTop;
    }

 

HTMLElement.offsetHeight();

offsetHeight 의 속성은 읽기 전용

정수로서 수직 패딩 및 경계를 포함하는 요소의 높이를 반환

 

 

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight

 

HTMLElement.offsetHeight - Web APIs | MDN

The HTMLElement.offsetHeight read-only property returns the height of an element, including vertical padding and borders, as an integer.

developer.mozilla.org

브라우저 관련 

https://baeharam.github.io/posts/javascript/js-window/

 

[Javascript] 브라우저의 창에 대한 이해

개발을 기록하는 블로그 '[Javascript] 브라우저의 창에 대한 이해'을 한 번 살펴보세요.

baeharam.github.io

 

setInterval();

각 호출 사이에 고정된 시간 지연으로 함수를 반복적으로 호출하거나 코드 조각을 실행

나중에 호출하여 제거할 수 있음 - clearInterval();

 

 

https://developer.mozilla.org/en-US/docs/Web/API/setInterval

 

setInterval() - Web APIs | MDN

The setInterval() method, offered on the Window and Worker interfaces, repeatedly calls a function or executes a code snippet, with a fixed time delay between each call.

developer.mozilla.org

 

 

window.scrollY

window 문서가 세로로 된 픽셀 수 반환

window.scrollW

가로로 된 픽셀 수 반환

 

 

math.abs()

함수 수치의 절대 값을 반환 - 반환 값(주어진 숫자의 절대값)

math.abs(x)

Math.abs('-1');     // 1
Math.abs(-2);       // 2
Math.abs(null);     // 0
Math.abs('');       // 0
Math.abs([]);       // 0
Math.abs([2]);      // 2
Math.abs([1,2]);    // NaN
Math.abs({});       // NaN
Math.abs('string'); // NaN
Math.abs();         // NaN

function test(a,b){
  return Math.abs(a, -b);
}

console.log(test(3,5));
// 2
console.log(test(5,3));
// 2
console.log(test(1.23456, 7.89012));
// 6.655555~

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs

 

Math.abs() - JavaScript | MDN

The Math.abs() function returns the absolute value of a number. That is, it returns x if x is positive or zero, and the negation of x if x is negative.

developer.mozilla.org

 

 

Element.classList

읽기 전용 속성

클래스 목록을 조작하는데 사용

var elementClass = element.classList;

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';
}

빈속성이 있는 경우 가반환 됨 ?

 

아이디로 찾기 클래스로 찾기 태그명으로로 찾기

 

css 선택자로 찾기

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로 입력할 경우 유효하지 않은 이름이기때문에 사용 불가능함

id가 없는 요소에 접근 하려면 document.querySelector()로 찾기

특정 요소를 빠르게 찾을 때 유용하다

 

 

클래스로 찾기

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 이 배열 함수기때문

 

 

http://daplus.net/javascript-%EC%97%AC%EB%9F%AC-%ED%81%B4%EB%9E%98%EC%8A%A4%EA%B0%80%EC%9E%88%EB%8A%94-%EC%9A%94%EC%86%8C%EB%A5%BC-%EA%B0%80%EC%A0%B8-%EC%98%A4%EB%8A%94-%EB%B0%A9%EB%B2%95/

 

[javascript] 여러 클래스가있는 요소를 가져 오는 방법 - 리뷰나라

내가 이것을 가지고 있다고 말하십시오. <div class="class1 class2"></div> 이 div요소를 어떻게 선택 합니까? document.getElementsByClassName('class1')[0].getElementsByClassName('class2')[0] 작동하지 않습니다. jQuery에서는

daplus.net

 

태그명으로 찾기

var tag = document.getElementsByTagName('tag');

element가 호출되면 소문자로 변환함 - 카멜케이스로 이루어진 element를 호출하려면 getElementsByTagNameNs() 사용해야함

 

 

+ Recent posts