flex-item에 사용하는 속성
 

Ordering flex items - CSS: Cascading Style Sheets | MDN

New layout methods such as Flexbox and Grid bring with them the possibility of controlling the order of content. In this article, we will take a look at ways in which you can change the visual order of your content when using Flexbox. We will also consider

developer.mozilla.org

Grid

https://heropy.blog/2019/08/17/css-grid/

 

CSS Grid 완벽 가이드

CSS Grid(그리드)는 2차원(행과 열)의 레이아웃 시스템을 제공합니다.Flexible Box도 훌륭하지만 비교적 단순한 1차원 레이아웃을 위하며, 좀 더 복잡한 레이아 ...

heropy.blog

https://developer.mozilla.org/ko/docs/Web/CSS/grid

 

grid - CSS: Cascading Style Sheets | MDN

grid CSS 속성은 shorthand property 입니다. 외재적인 속성인 (grid-template-rows (en-US), grid-template-columns (en-US), grid-template-areas (en-US)), 값과 내재적인 속성인 (grid-auto-rows (en-US), grid-auto-columns (en-US), grid-auto-fl

developer.mozilla.org

https://studiomeal.com/archives/533

 

이번에야말로 CSS Grid를 익혀보자

이 포스트에는 실제 코드가 적용된 부분들이 있으므로, 해당 기능을 잘 지원하는 최신 웹 브라우저로 보시는게 좋습니다. (대충 인터넷 익스플로러로만 안보면 된다는 이야기) 이 튜토리얼은 “

studiomeal.com

https://codepen.io/search/pens?q=grid 

 

CodePen Search

 

codepen.io

fr: fraction 비율

 

repeat() 함수

 

auto-fill

auto-fit

 

grid-template-areas

grid-area

--

CSS transition, transform

translate VS position

  1. 파싱
  2. 스타일 계산
  3. 레이아웃
  4. 페인트
  5. 컴포지팅

면접 아주중요

리페인팅 리플로우

--

CSS Animation 애니메이션

keyframe

아 시간 진짜 빠르네 벌써 목요일이라니!!

CSS Selector 심화
출처 : 튜토리얼로 배우는 HTML & CSS / 맨 마지막에 있는 body>h1은 직계자식입니다. 위 이미지가 틀린 내용입니다.

1. 속성 선택자

  1. 태그[속성이름]
    a[href] {
     font-size:30px ;
    }
  2. 태그[속성이름="변수"]
    공백을 포함하지 않기 때문에 클래스(변수)하나만 가진 요소가 선택된다
    a[href="https://developmentbirdfoot.tistory.com/] {
     font-size: 50px;
    }
  3. 태그[속성이름~="변수"]
    공백을 포함해 변수를 선택한다
  4. 태그[속성^="변수"]
    변수로 시작하는 태그를 선택한다
  5. 태그[속성$="변수"]
    변수로 끝나는 요소를 선택한다
  6. 태그[속성*="변수"]
    *~= 과 다른 점은 ~은 단어를 기준으로 ~은 문자열을 기준으로 선택한다
    ex) [app] ~는app만 선택, *은 appple apps도 선택
  7. 태그[속성|="변수"]
    변수이거나 변수로 시작하면서 뒤에 바로 '-'하이픈 기호가 있는 태그를 선택한다

2. 가상 클래스 선택자(Pseudo class selector)

<ul>
 <li class="속성">1</li> <!--.foo:first-child-->
 <li class="속성">2</li>
 <li class="속성">3</li> <!--.foo:nth-child(3)-->
 <li class="속성">4</li>
 <li class="속성">5</li> <!--.foo:last-child-->
</ul>
  1. 속성:nth-child(odd)
    홀수번째 자식 엘리먼트
  2. 속성:nth-child(even)
    짝수번째 자식 엘리먼트
  3. 속성:nth-child(n)
    n번째 자식 엘리먼트 (0,1,2,3,4....)
  4. 속성:nth-child(3n)
    3번째 자식마다 (0,3,6,9,12....)
  5. 속성:nth-child(3n+1) (1,4,7,10,13)

a:visited 방문한 적이 있는 링크를 선택한다

(!!?? 사생활 침해의 우려로 브라우저에서 차단된다)

 

https://developer.mozilla.org/ko/docs/Web/CSS/:active

 

:active - CSS: Cascading Style Sheets | MDN

:active CSS 의사 클래스는 사용자가 활성화한 요소(버튼 등)를 나타냅니다. 마우스를 사용하는 경우, "활성"이란 보통 마우스 버튼을 누르는 순간부터 떼는 시점까지를 의미합니다.

developer.mozilla.org

https://developer.mozilla.org/ko/docs/Web/CSS/:enabled

 

:enabled - CSS: Cascading Style Sheets | MDN

CSS :enabled 의사 클래스는 모든 활성 요소를 나타냅니다. 활성 요소란 활성(선택, 클릭, 입력 등등)하거나 포커스를 받을 수 있는 요소를 말합니다. 반대 상태인 비활성 요소도 존재합니다.

developer.mozilla.org

상호작용을 위한 가상 클래스

:hover 요소에 마우스를 갖다대면 적용된다

:active 요소를 실행할 때(버튼,링크)

:focus 요소에 포커스가 있을 때

:checked 라디오, 체크박스, 옵션 요소 선택했을 때

 

3. 가상 요소 선택자

::before 요소의 첫번째 자식

::after 요소의 마지막 자식

::selection 사용자가 선택, 하이라이트 된 상태의 텍스트

 

가상 클래스 선택자와 가상요소 선택자의 차이

  • 가상클래스 선택자는 콜론이 하나 : 가상 요소 선택자는 콜론이 2개 ::
    간혹 가상 요소 선택자가 1개인 경우는 레거시 브라우저 호환을 위해
  • 가상 요소 선택자는 마크업 없는 요소를 삽입
    브라우저,OS 스크린리더에 따라 가상 요소 선택자를 읽을수도 있고 안 읽을수도 있다

https://flukeout.github.io/# level11부터

 

CSS Diner

A fun game to help you learn and practice CSS selectors.

flukeout.github.io

https://www.w3schools.com/cssref/css_selectors.asp

 

CSS Selectors Reference

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

CSS Combinator
  1. Descendant combinator 자손 콤비네이터
    공백으로 나타냄
  2. Child combinator 자식 콤비네이터
    > 를 사용
  3. Adjacent sibling combinator 인접 형제 콤비네이터
    +를 사용 전방 선택자 직후 나오는 후방 형제 선택자만 선택된다
  4. General sibling combinator 일반 형제 콤비네이터
    ~ 앞 요소 이후 나오는 모든 뒤 요소를 선택
Flex

만능의 플렉스

row: axis 주축 방향

row-reverse: 거꾸로

.container {
  display: flex;
  flex-direction : row;
}
.container {
  display: flex;
  flex-direction : row-reverse;
}

column: 열 방향

column-reverse: 열 방향 역으로

 

.container {
  display: flex;
  flex-direction : column;
}
.container {
  display: flex;
  flex-direction : column-reverse;
}

justify-content

Axis,Cross-Axis

align-items,align-content

flex-wrap

flex-flow

 

https://flexngrid.com/

 

flexngrid

flex, grid 코드 에디터 .container { display: flex; } .item1 { flex: 1; } .item2 { flex: 2; } .item3 { flex: 1; } .item4 { flex: 1; } .item5 { flex: 2; } .item7 { flex: 1; } .container { display: flex; } .container1 { justify-content: space-between; }

flexngrid.com

https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox

 

flexbox의 기본 개념 - CSS: Cascading Style Sheets | MDN

일명 flexbox라 불리는 Flexible Box module은 flexbox 인터페이스 내의 아이템 간 공간 배분과 강력한 정렬 기능을 제공하기 위한 1차원 레이아웃 모델 로 설계되었습니다. 이 글에서는 flexbox의 주요 기능

developer.mozilla.org

 

숙달의 기준은 최소 10번은 해보는 것

 

https://www.youtube.com/watch?v=C8t7eHIQ9fU&t=1s

text-align

 

inline block 요소만 적용된다

 

 

block level 요소

 

inline 요소

 

 

line height 는 한줄만 쓸 때 수직 정렬하기 좋다

(폰트에 따라 여백이 달라 수직정렬이 아닌것 처럼 보일 수도 있다)

 

유연하면서 레이아웃이 깨지지 않게!

 

container는 기본적으로 line height가 1이 들어가 있다

 

vertical-align

sub: 부모의 subscript baseline 을 기준으로 한다

text-top:부모의 subscript baseline 을 기준으로 한다

middle은 쓸모가..?

 

text-overflow

text-overflow :container에 overflow:hidden, white-space:nowrap 속성이 같이 사용되어야 합니다.

말줄임 코드는 언제쓰냐?

데이터가 없을 때

글자수가 많을 때

모바일에서 글씨가 잘릴 때

 

https://www.w3.org/TR/css-overflow-3/#propdef--webkit-line-clamp

 

CSS Overflow Module Level 3

Abstract This module contains the features of CSS relating to scrollable overflow handling in visual media. This level is focused on completing a precise specification for the existing overflow features, including the overflow property and its longhands; l

www.w3.org

-webkit-line-clamp의 두번째 속성을 none으로 하면 ellipsis가 풀립니다

 

relative 내가 기준

position : absolute

부모요소에 position이 없으면 최상단의 부모요소를 찾아 부모를 기준으로 움직인다

 

position : fixed

 

position : sticky

가까운 부모요소에 달라붙기 때문에 조상에 scroll이 있어야 한다

 

z-index

부모는 자식 앞으로 나올 수 없고 자식은 부모 뒤로 가는 게 가능하다

 

Float

inline요소들은 float 된 요소들을 알아본다

 

https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context

 

Block formatting context - Developer guides | MDN

A block formatting context (BFC) is a part of a visual CSS rendering of a web page. It's the region in which the layout of block boxes occurs and in which floats interact with other elements.

developer.mozilla.org

 

 

특강

 

typography

 

옛날 활자레서 줄사이의 간격을 띄울 때 사이에 납을 대고 활자를 찍었는데

납이 곧 Lead 그래서 leading area가 되었다

 

CSS에선 반을 나눠 위아래로 Half Lead가 된다

줄과 줄 사이가 만나 한줄이 된다

 

 

마진을 차지하는 공간이라고 생각해보자

마진을 마이너스로 주게되면 이미지는 그대로 보이지만

차지하고 있는 공간은 줄어 들어있다

 

https://www.youtube.com/watch?v=OVaKTdFe5Bk

https://youtu.be/8SJKAMWpe8Y

 

{ margin: 0;

padding: 0;

}

초기화 꼭 먼저 하기

 

와 미쳤다 오늘 너무 피곤하다 일단 일찍잔다

<오전,오후 class = "이호준 강사님 Reset CSS, 공백처리, 주석 및 벤더프리픽스, CSS Selector, 선택자 우선순위, Box Model">

 

Reset CSS

 

브라우저마다 설정이 다르기 때문에 모든 설정을 초기화 시켜주는 CSS이다

 

CSS Tools: Reset CSS

CSS Tools: Reset CSS The goal of a reset stylesheet is to reduce browser inconsistencies in things like default line heights, margins and font sizes of headings, and so on. The general reasoning behind this was discussed in a May 2007 post, if you're inter

meyerweb.com

 

Normalize.css: Make browsers render all elements more consistently.

Normalize.css makes browsers render all elements more consistently and in line with modern standards. It precisely targets only the styles that need normalizing.

necolas.github.io

 

1만 시간의 법칙 페이지 간단하게 마크업
적정시간은 10분인데 20분을 주셨다
  1. 문제점
    난 다 못했다
  2. 원인 파악
    손이 느렸다, 어떤 순서로 할지 조금 막막한 감이 있어서 생각하는데 시간이 소요된다
  3. 해결방안
    익숙해지도록 혼자 많이 연습해야한다
  • 모달은 맨 마지막쯤에 작성한다

공백처리, 주석 다행히 아는 내용

 

벤더프리픽스 Vendor-Prefix

크로스 브라우징을 위해 레거시 브라우저를 지원해야하는 점도 잊지말기

https://autoprefixer.github.io/

 

Autoprefixer CSS online

include comment with configuration to the result Select result You can also see which browsers you choose by filter string on browsersl.ist Autoprefixer online — web repl for original Autoprefixer. It parses your CSS and adds vendor prefixes to CSS rules

autoprefixer.github.io

 

CSS Selector

<--수정예정

캐스태이딩

타입선택자의 우선순위가 높아서

 

선택자 우선순위

 

style적용시 우선하는 것

id>class>tag

--->

 

https://flexboxfroggy.com/#ko

 

Flexbox Froggy

A game for learning CSS flexbox

flexboxfroggy.com

https://flexngrid.com/

 

flexngrid

flex, grid 코드 에디터 .container { display: flex; } .item1 { flex: 1; } .item2 { flex: 2; } .item3 { flex: 1; } .item4 { flex: 1; } .item5 { flex: 2; } .item7 { flex: 1; } .container { display: flex; } .container1 { justify-content: space-between; }

flexngrid.com

CSS Box Model

 

오늘 솔직히 집중 잘 못함

체력 탓일까?

 

연휴동안 할 것

  • 인프런 인프콘 보기
  • 일만시간의 법칙 페이지 과제_깃허브 주소와 깃허브 페이지 주소 공유
  • CSS 과제 확인
  • 30분 요약강좌 HTML, CSS, JS, SPA 까지 쭉 훑어보기
  • 종찬 강사님 유튜브 강의

 https://youtu.be/KYo62fhaR7M

https://youtu.be/-aOLzc7C3QU

https://youtu.be/syOzYMWy6TE

 

<오전 class = "이호준 강사님 Embedded content">

 

<iframe> 중요한 옵션! 크롬같은경우는 auto play가 막혀있어서 autoplay 옵션이랑 mute옵션을 같이 사용해야 자동재생이 된다

<audio>

<vidio>

https://semiconductor.samsung.com/kr/support/tools-resources/dictionary/bits-and-bytes-units-of-data/?awc=18739_1662510266_a84ccee6688a44f70015231caf7bed72&cid=at_pd_affiliate_none_none_none_none_none_online-shop_none

Forms

크게 세개로 나누는데, 서버가 더 많을 수도 있고 세개가 하나 일 수도 있다

  • Server :  서빙_24시간 돌아가는 컴퓨터, 대부분 IP 연결
  • Web Server : 정적 파일(잘 바뀌지 않는 메인 화면의 요소들)을 서빙_PHP와 같은 프로그래밍 언어도 처리하긴 합니다
  • App Server : 두뇌 역활
  • DB : 데이터 저장_이미지와 같은 경우에는 이미지 경로만 저장합니다 (빨리 불러오기 위해)
    이미지는 보통 스토리지에 저장되어 있다
  • API Server : 카페에 카운터 직원이다. 직접 커피를 내릴 필요는 없다

API는 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고, 주문(명령)을 받으면 요리사(응용프로그램)와 상호작용하여 요청된 메뉴(명령에 대한 값)를 전달합니다.
쉽게 말해, API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체로 볼 수 있습니다.

 

https://brunch.co.kr/@operator/65

 

API란 무엇일까? API 쉽게 이해하기

API | API, 쉽게 이해하기 API란? “API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을

brunch.co.kr

로컬
단점
: 트래픽 확장이 어려움, 서버 확장이 어렵고, 들어오는 트래픽 제한(대역폭 bandwidth의 문제), 정전(클라우드 서버 같은 경우 UPS)
장점 : 비용(전기세 + 인터넷)
클라우드
단점
: 비용
장점 : 서버 확장,이전이 쉽다. IP를 할당 받거나, 도메인 연결하기 쉽고, HTTPS 인증도 쉽다
<body>
  <form action="012.html" method="">
    <input type="text" name="id">
    <input type="password" name="pw">
    <button type="submit">로그인</button>
  </form>
</body>
 

코드를 실행 했을때 주소창을 보면 ?가 뜬 것을 볼 수 있다

id와 pw를 입력하면?

물음표 뒤로 키값이 입력 된 것을 볼 수 있다

 

method에 POST 방식을 입력해 주면 주소창에 아무 값이 뜨지 않는다

 

  • GET : URL로 데이터를 전달할 때 사용한다
    file 같은 큰 파일은 GET으로 전송하지 않는다
    id와 pw 같은 민감정보는 전송하지 않는다
  • POST : 패킷 안에 데이터를 넣어 전달할 때 사용합니다
    민감하거나 큰데이터를 전송할 때

 

  • 클라이언트 ↔ 서버
  • 프로토콜 ex)국가별 언어
    http://www.paullab.co.kr
    https://www.paullab.co.kr
  • ait shift 아래키 : 현재 코드 복사
  • 영상 배속 하는 코드(콘솔창ㄱㄱ)
    document.getElementsByTagName("video")[0].playbackRate = 2.5;

 

Tabular data

 

https://github.com/paullabkorea/FrontendSchool_1/tree/main/html

 

GitHub - paullabkorea/FrontendSchool_1

Contribute to paullabkorea/FrontendSchool_1 development by creating an account on GitHub.

github.com

 

<<!--로그인, 약관동의, 

17,18 파일 참고 수정예정-->>

 

https://summernote.org/

 

Summernote - Super Simple WYSIWYG editor

Super Simple WYSIWYG Editor on Bootstrap Summernote is a JavaScript library that helps you create WYSIWYG editors online.

summernote.org

https://ui.toast.com/tui-editor

 

TOAST UI :: Make Your Web Delicious!

TOAST UI is an open-source JavaScript UI library maintained by NHN Cloud.

ui.toast.com

 

<<!--021파일 참고 수정예정-->>

  1. from에 제출되는 data를 JavaScript로 수정하는 일은 가능하면 하지 않는 것이 좋습니다.
    input으로 해결할 수 있어요
  2. from에 없는 데이터를 추가하고 싶다면 hidden으로 input 하나 더 만들어 value를 JavaScript로 추가하는 방식을 사용하세요

 

<023파일 참고 수정예정

col(umn) 컬럼을 꾸며주기 위해 colgroup 컬그룹을 쓴다-->>

 

네이버 메일을 보면 테이블로 구성되있다 왜그럴까?
멘토님이 실무에서 뉴스레터를 제작했는데
아웃룩 툴 도구 때문인건지 여러 메일 관련 툴에서 깨지는 현상이 발생해서
계속 옛날 방식인 테이블 레이아웃형태로 진행되는것 같다한다

 

https://webisfree.com/2015-10-12/[%EC%9B%B9%EC%A0%91%EA%B7%BC%EC%84%B1]-table%EC%97%90%EC%84%9C-scope-%EC%86%8D%EC%84%B1-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0 

 

[웹접근성] table에서 scope 속성 사용하기

웹접근성을 위해 사용하는 코딩기술 중 하나가 바로 table에서 scope 속성을 이용하는 방법입니다. scope 속성은 테이블의 th 또는 td 등의 해당 셀에게 사용하며 컬럼(column)인지 행(row)인지의 여부를

webisfree.com

 

CSS

 

셀렉터와 프로퍼티는 외우자

  • 셀렉터: 어떤것을?
  • 프로퍼티: 어떻게 하고싶어?
  • 벨류: 얼만큼?

 

폰트 트래픽 문제

  1. 잘 사용되지 않는 폰트는 이미지화
  2. 많이 사용되지 않는 폰트는 경량화
  3. 많이 사용되는 폰트는 CDN을 사용하기 보다는 내부 API 서버나, 로컬 서버에서 서빙

 

<!--수정예정CDN: Content delivery network

 

호박을 만들기 위한 기초 keyframes-->

 

포트폴리오를 만들 떄 노션이 깨질 수도 있어서 안좋아하기도 한다

pdf로 할 것을 추천하고 이력서를 웹으로 만드는 건 가산점이 될만하다

 

<저녁 class = "이종찬 강사님 CSS특강">

 

  1. 전체적인 덩어리를 보고 클틀을 잡아야한다
  2. 고로, 메인 컨텐츠가 될 여우 이미지와 텍스트를 한번에 wrapper로 잡아준다
  3. 클래스명은 수정될 때는 고려해 구체적으로 fox까진 아니더라도 animal정도로 한다
    (너무 일반화하지도 않으면서 유니크하게)
  4. 색 입히기
  5. vertical-align : 으로 이미지와의 공백을 없애준다
  6. 그라운드 배경으로 잔디를 넣어준다
  7. 전체배경을 넣는다
  8. 모서리 둥글게 한다
  9. 그림자처리 한다
  10. 끝!
  11. 유지보수_repeat-x; , display : block;

https://camp.veamcamp.com/example/flash/

 

기억제거기

 

camp.veamcamp.com

 

마진 겹침,병합 현상

 

블럭레벨 엘리먼트끼리 인접해있는 상하단 마진은 의도적으로 겹치게 된다(겹침은 큰쪽으로 일어난다)

 

https://youtu.be/7oOai_rOnuI

https://youtu.be/H7teKNwV-Bk

도서 추천

  • SMACSS
  • 설계실전CSS

아 넘 웃기당 재밌었다

 

할 것

오늘 중간중간 혼이 나갔던 것 같다

놓친부분 다시 메꾸기ㅠ,ㅠ

 

지난번 과제 코드를 수정?다시 짜보고싶다 (된다면 여러개 배치도)

종찬강사님의 유튜브 조회수 올려드리기..가 아니라 영상보고 공부하기^^

 

내일 우리조 간단 회고 타임이 있다

발표할 것 미리 정리해놔야지..근데 시간이 다 어디로 갔지??

<오전 class = "한재현 강사님 Text-level semantics">

Text-level semantics(텍스트 레벨 요소)의 특징
  1. 가용 가능 범위만큼 영역을 점유한다. 
  2. 자식으로 Sections, Grouping Contents를 배치할 수 없다.

 

<br> 줄 바꿈

 

<-- 주석을 남길 때 -->

  • 협업시 코드에 대한 설명이 필요할 떄
    ex) 모듈,클래스의 이름과 설명
  • 포트폴리오 만들 때 보는 사람을 위해 주석을 필히 꼼꼼하게 달아 놓자
    (사람을 뽑을 때 이 사람이 얼마나 협업 능력이 있는지 보기 때문에)

 

<wbr>

https://developer.mozilla.org/ko/docs/Web/CSS/word-break

 

word-break - CSS: Cascading Style Sheets | MDN

CSS word-break 속성은 텍스트가 자신의 콘텐츠 박스 밖으로 오버플로 할 때 줄을 바꿀 지 지정합니다.

developer.mozilla.org

https://developer.mozilla.org/ko/docs/Web/CSS/white-space

 

white-space - CSS: Cascading Style Sheets | MDN

CSS white-space 속성은 요소가 공백 문자를 처리하는 법을 지정합니다.

developer.mozilla.org

 

CJK언어의 word-break 속성은 기본값이 break-all이다

(CJK언어= 중국어, 일어, 한국어)

 

<a>앵커

<a href="경로">

 

href=Hyper reference

책처럼 하이퍼 텍스트와 하이퍼 텍스트를 이어주는 링크이다

 

  • 검색엔진이 페이지를 분석할 때 JS는 보지않고 HTML 태그만을 보고 판단하는데,
    하이퍼 레퍼런스가 없으면 웹에이전트가 이 앵커가 어디로 향하는지 알 수 없기 때문에 문법적 오류다
  • "클래스 명"도 스크린리더가 읽어주지 않는다.
    alt 에 자세한 설명을 해주는게 친절한 웹페이지가 되겠다
  • 타겟 = 속성 = 어트리뷰트 attribute

 

 

# 해쉬 링크

해쉬된 페이지 내 이동

 

https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior

 

scroll-behavior - CSS: Cascading Style Sheets | MDN

The scroll-behavior CSS property sets the behavior for a scrolling box when scrolling is triggered by the navigation or CSSOM scrolling APIs.

developer.mozilla.org

 

<b> 의미가 없으니까 쓰지말자

<strong> b태그처럼 글씨를 굵게 만들어 주면서 강조의 의미가 있다

 

<i> Italic  기울임, 전문용어, 소설이라면 등장인물의 생각과 같이 주위와 구분해야하는 부분

<em> 기울임, 강조의 의미

 

<dfn> 정의하는 용어(부모가 p,dt,dd,section 요소일 경우 여기에 대한 설명으로 간주한다)

 

<abbr> MZ세대 태그 약자를 나타낼때 쓴다

 

<sup> <sub> 윗첨자와 아랫첨자 ex)화학식,수학 제곱 표현

 

<span> 줄바꿈, 의미없이 묶어주어야할 때, div 처럼 최후의 수단으로 쓴다


<오후 class = "한재현 강사님 모두의HTML CSS 페이지 과제 코드 리뷰">

https://fontawesome.com/start

 

Font Awesome

The world’s most popular and easiest to use icon set just got an upgrade. More icons. More styles. More Options.

fontawesome.com

https://getbootstrap.com/docs/4.0/components/carousel/

 

Carousel

A slideshow component for cycling through elements—images or slides of text—like a carousel.

getbootstrap.com

  • 캐러셀 carousel 인디케이터 indicator
  • <address>는 꼭 주소 뿐만아니라 이 사이트의 주체가 되는 연락처도 된다
  • Font Awesome 아이콘을 폰트 형태로 제공해 주는 사이트
  • 무조건 크고 굵다고 제목은 아니다
    전체적인 내용을 보고 판단하여 제목<h1>을 정한다
  • <ol start="10" reversed> 10부터 거꾸로 표현된다
  • 피그마 사이트에서 Inspect contant

  • 슬라이드의 내용을 먼저 파악한 후 이전,다음 슬라이드 보기 버튼 코드를
    배치해줌으로서 스크린리더 쓸 때 잘 파악 할 수 있도록 한다

<오후 class = "이호준 강사님 Embedded content">

Embedded content

<img src="" alt=""> source alternative text

 

이미지

  • 상업적 용도 사용 가능
  • 출처 안 밝혀도 됨
  • 사업적 용도로 사용하여 돈을 벌었는지가 주요 쟁점
  • 사용하지 않는 것을 권고

폰트

  • 무료폰트(개인 무료폰트, 상업 용도 무료 폰트)
  • 대기업 무료 폰트(한글은 제외 내용증명 날라온다)
  • 저작권 꼭 확인하고 사용하기

X 서술자 화소 window.devicePixelRatio

서술자 이미지 넓이, x서술자와 쓸 수 없다

size 속성

<picture> 이미지 크기가아니라 아예 다른 포맷의 이미지로 보여줄 수 있다

media 속성

해상도에 따라 '다른 이미지'를 보여주고 싶을 때에는 picture를, 같은 이미지인데 해상도에 따라 더 높은 해상도 이미지를 보여주고 싶을 때에는 srcset을 사용합니다

https://developer.mozilla.org/ko/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images

 

반응형 이미지 - Web 개발 학습하기 | MDN

이 글에서 우리는 반응형 이미지(Responsive images)의 — 해상도, 스크린 크기 등이 다른 수많은 기기들에서 정상적으로 표시되는 이미지 — 개념과 구현을 위해 HTML에서 제공하는 도구에 대해 배울

developer.mozilla.org

  • 절대경로 : 현재 파일 위치에 상관없이 열 수 있는 경로
  • 상대경로 : 나(지금 열려있는 파일)기준

window.innerWidth

 

type 속성

  • 회사 컨벤션에 따라 사용하지 않는 태그들도 있다
  • 예전 기술 환경에서 동작할 수 있는 기능을 구현해두고, 최신기술을 제공하는
    크로스브라우징 (브라우저를 넘나드는) 기법을 ‘점진적 향상기법' 이라고 한다

 

이미지 포맷의 종류

  • GIF(Graphics Interchange Format)
  • JPG/JPEG (Joint Photographic Expert Group image)
  • PNG (Portable Network Graphics)
  • SVG (Scalable Vector Graphics)
  • WebP (Web Picture Format)
  • AVIF (AV1 Image File Format)

이미지가 많을 경우 이미지 압축을 하기도 한다

 

<iframe>

  • 페이지에 유튜브 영상을 띄울 때 많이 사용된다
  • 해킹의 위험이 있다

https://developer.mozilla.org/ko/docs/Web/Media/Autoplay_guide

 

미디어 및 Web Audio API 자동 재생 가이드 - Web media technologies | MDN

페이지가 로드 되자마자 소리(또는 소리가 나는 영상)를 자동으로 재생하는 것은 사용자에게 별로 유쾌한 경험은 아닐겁니다. 미디어 자동 재생이 유용하려면 꼭 필요한 경우에 한하여 조심스

developer.mozilla.org

 

<audio>

<vidio>

내일 한번 더 정리해주시기로 했다

 

연휴 때 심심하지 말라고(?) 공부할 강의들을 엄청 뿌려주셨다

 

공부할 것

피그마 사이트보고 마크업

30분 요약강좌 시즌1(HTML,CSS_무료) https://inf.run/7rTK

 

[무료] 2022 30분 요약 강좌 시즌 1 : HTML, CSS, Linux, Bootstrap, Python, JS, jQuery&Ajax - 인프런 | 강의

이 강좌는 코딩을 처음 하시는 분들에게는 빠르게 훑을 수 있는 강의가 될 것입니다. 이미 코딩을 하시는 분들에게는 복습을 빠르게 할 수 있는 강의가 될 것입니다. 이 강의를 통해 자신감을 얻

www.inflearn.com

30분 요약강좌 시즌4(GitHub_무료) https://www.inflearn.com/course/30%EB%B6%84-%EC%8B%9C%EC%A6%8C4-%EA%B9%83%ED%97%88%EB%B8%8C

 

[무료] 30분 요약 강좌 시즌4 : 알잘딱깔센 GitHub - 인프런 | 강의

알아서! 잘! 딱! 깔끔하고! 센스있게! 정리하는 GitHub 핵심 개념 책의 무료강의입니다. 해당 책과 Notion 링크도 무료로 다운로드 받을 수 있습니다. 비영리 프로젝트로 교재활용도 허락없이 가능합

www.inflearn.com

1만시간의 법칙 : https://inf.run/zzx6

 

[무료] <1만 시간의 법칙> 웹 페이지 제작하기 - 인프런 | 강의

제주코딩베이스캠프의 무료 강의가 돌아왔습니다!! 함께 1만 시간의 법칙 서비스를 만들어보고 Github에 배포까지 해봐요!! :) 아무것도 모르신다고요? 괜찮습니다. 이 강의에 모두 준비되어 있어

www.inflearn.com

견고한 HTML, CSS : https://www.inflearn.com/course/%EA%B2%AC%EA%B3%A0%ED%95%9C-%EA%B8%B0%EB%B3%B8%EA%B8%B0-html-css

 

견고한 기본기 HTML&CSS - 인프런 | 강의

우리는 HTML, CSS를 잘 알아야 견고한 실력의 프론트엔드 개발자가 될 수 있다고 생각합니다.✍ HTML과 CSS의 종류부터 실무 활용까지, 이 강의로 언어를 올바르게 사용하는 방법을 배울 수 있습니다

www.inflearn.com

정규표현식 : https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D

 

정규표현식 : Python으로 톺아보기 - 인프런 | 강의

듣기만 해도 정규표현식이 이해되는 신기한 강의! 포기 금지! 미루기 금지! 자, 지금 해봅시다!, - 강의 소개 | 인프런...

www.inflearn.com

Notion 강의 : https://www.inflearn.com/course/%EB%85%B8%EC%85%98-%ED%85%9C%ED%94%8C%EB%A6%BF-%EA%B0%95%EC%9D%98

 

직접 만드는 노션 템플릿 BEST 7선 - 인프런 | 강의

메모혁신 노션(notion)의 기초부터 템플릿 제작까지 단 한 강좌로 노션 사용하기!, - 강의 소개 | 인프런...

www.inflearn.com

웹 접근성 강의 : https://www.boostcourse.org/web201

 

웹 접근성 이해

부스트코스 무료 강의

www.boostcourse.org

하버드 CS 강의 : https://www.edwith.org/cs50

 

[해외명강] 컴퓨터 과학 교양 강좌: CS50 강좌소개 : edwith

- 커넥트재단

www.edwith.org

코딩인터뷰를 저격하는 JS 스나이퍼 양성학교 https://inf.run/tALx

 

코딩인터뷰를 저격하는 JS 스나이퍼 양성학교 - 인프런 | 강의

코딩인터뷰를 앞두고 계신다구요? 제대로 찾아오셨습니다! 평소에 이해가 잘 가지 않거나, 들어도 들어도 헷갈리는 자바스크립트 개념들을 모아모아 함께 파고드는 시간을 마련했습니다 :) 면

www.inflearn.com

CS 강의 : http://www.kocw.net/home/cview.do?cid=3646706b4347ef09 

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net

 

 

<오전일과 class = "스프린트 회고 첫 시간">

 

회고 스프린트는 우테코(우아한 테크 코스) 프론트엔드 교육과정을 담당중이신 임동준 강사님이 진행해주셨다

 

함께, 밝게, 나답게 성장하는 ‘환경’을 만드는 메이커준입니다.

👋🏼 밝음의 아이콘 메이커준 초간단 소개

www.makerjun.com

 

여러분이 생각하는 개발자로서 성장을 잘하기 위해 무엇이 필요할까요?

꾸준함, 인내, 체력, 계속 공부하기, 확실한 목표, 피드백 받는거 두려워하지 않기, 깊이파기, 소통, 자기 반성, 끈기, 업계의 성장에 대한 고찰, 엉덩이 무겁게 오래 앉아 있기, 적극적인 자세, 유연한 사고, 질문하기, 자만하지 않기, 강철 손목, 비싼 의자, 알고 넘어가기

 

이런것들을 잘하고 있다는 것을 우리는 무엇을 통해 알 수 있을까요?

타인의 피드백, 기록, 롤모델과 비교, 결과, 테스트, 메타인지

 

노션페이지에 테이블을 만들어 일주일간 각자 배우고 느낀점을 회상했다

 

대체로 느끼는 게 다 비슷했다

 

특히 나는 무슨일이 있어도 TIL작성하기로 마음먹었다!

 

  1. 내가 생각하는 과정을 마무리했을 성장하고 싶은 목표 3가지 (구체적인 장면을 떠올리면서 작성)
  2. 해당 목표를 달성했음에도 불만족스러운 경우 2~3가지
  3. 해당 목표를 달성하지 못했지만 만족스러운 경우 2~3가지

 

목표를 좀 더 현실적이고 구체적으로 정할 수 있는 방법이라 좋았다

 

<오후일과 class = "한재현 강사님과 HTML Markup 실습">

 

Semantic 시멘틱

 

웹에이전트, 컴퓨터(검색엔진이)가 이해 할 수 있게 의미있는 마크업을 해야한다

 

시멘틱한 태그를 사용 할 경우 검색엔진이 사이트를 분석하기도 쉽다

 

https://developers.google.com/search/docs/beginner/seo-starter-guide?hl=ko&visit_id=637979483710948537-736098899&rd=1 

 

SEO 기본 가이드: 기본사항 | Google 검색 센터  |  문서  |  Google Developers

검색엔진 최적화의 기본사항에 관한 지식만으로도 눈에 띄는 효과를 얻을 수 있습니다. Google SEO 기본 가이드에서 기본적인 검색엔진 최적화에 관해 간략히 알아보세요.

developers.google.com

 

스크린리더가 마크업을 작성했을 때 어떤식으로 반응하는지 보면 좋다

 

(시각장애인들에게 너무 유용한 기능이다

세상을 이롭게 하는 코딩이라니 정말 멋지다)

 

큰 회사의 경우 내부적으로 접근성 관련 팀이 검사를 해본다고 한다

 

지난 시간과제는 삼성과 동물의 숲 페이지 섹션 나누기였다

 

반복해서 나오는 개념은

 

HTML 코드를 짤 때 필요없는 마크업 하지않기!

 

즉, 시멘틱한 마크업을 해야 한다는 것이다

 

면접시 분명히 이 코드를 왜 이렇게 짰는지 질문이 들어온다 한다

 

코드를 짜보고 난 뒤에 내가 짠 코드를 설명할 줄 알아야겠다

 

  • 섹션의 제목은 하나만 하는게 깔끔하다
  • 아티클은 다른 페이지에 나와도 어색함이 없는지 확인해본다 (페이지내에 의존성이있는가)
  • copyright 부분은 small 태그를 사용한다
  • 알림은 ul이 아니라 ol이다
  • 시간을 나타내는 tme 태그가 있다

모듈화=나중에 재사용할 수 있는 구조

 

나중에 페이지가 여럿생기거나 할 때에 큰 틀이 되어 줄 구조를 뜻한다

 

이제 VSCode로 대강작성해본다

음,따라가다가 놓쳤다ㅋㅋ

 

공부할 것

  1. 삼성 홈페이지 코드 작성해보기
  2. 지난번 과제들 다시 마크업

2부는 사실 43분이다

 

  • 형태 : 'abcde', "abcde", `abcde`, `abcde${변수명}`

`Template literal 템플릿 리터럴` 기호이름은 백틱 backtick

let x = 'acd'
let x = "acd"
let x = `acd`
//뭘 해도 결과값은 'acd'

`abcde${변수명}`예시

let name = 'baeggoose'
let age = 109

console.log('제 이름은' + name + '입니다. 제 나이는' + age + '입니다.')
제 이름은baeggoose입니다. 제 나이는109입니다
//번거로움.

console.log(`제 이름은 name 입니다. 제 나이는 age 입니다.`)
제 이름은 name 입니다. 제 나이는 age 입니다
//변수로 인식을 못함.

console.log(`제 이름은 ${name} 입니다. 제 나이는 ${age} 입니다.`)
제 이름은 baeggoose 입니다. 제 나이는 109 입니다
//템플릿 리터럴. ${변수}를 인식함
  • 호출 : 변수명, 변수명[0] (변수명[index], 호출은 할 수 있지만 개별 값 변경 불가)
name
'baeggoose'

name[1]
'a'
//인덱싱한다.

name.length
9

name.slice(2,)
'eggoose'
//2번째까지 잘라냄.

name.replace('baeg','peng')
'peng goose'
//백 구스를 펭 구스로 바꿈

'baeg goose baeg'.replace(/baeg/g,'peng')
'peng goose peng'
//g는 글로벌하게 이 안에 있는 모든걸 뜻함
  • 메서드 (다 중요하댔음) :
    • str.length
    • str.indexOf()
    • str.lastIndexOf()
    • str.includes()
    • str.slice()
    • str.splice()
    • str.split()
    • str.substring()
    • str.substr()
    • str.toLowerCase()
    • str.toUpperCase()
    • str.trim()
    • str.replace()
    • str.concat()
    • str.repeat()
    'hello'.repeat(100)
    
    '0'.repeat(100)
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    
    '0'.repeat(100).split('')
    (100) ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
    
    '5'.repeat(100).split('').map(Number)

밑에껀 알고리즘 문제 풀때나 급할때 사용한다

 

  • Boolean(논리값)
    • 형태 : true, false
    • 호출 : 변수명
    • 어떤 것이 true이고 어떤 것이 false인지 판단할 수 있어야 합니다.(truthy, falsy -> 우리가 매우 깊이 다뤘던 내용입니다.)
let x = true
undefined
//'따옴표' 안쓴게 주의점, 다른 언어에서는 T 대문자로 쓰기도 한다.

!![]
true
!!{}
true
//둘 다 다른 언어에서는 false다

!!''
false
//아무것도 없으면 false

!!'hello'
true

!!0
false
!!10
true
!!-10
true
//0을 제외한 숫자는 모두 true
  • undefine : undefind
    • 형태 : let a, console.log(a)
let x
undefined
x
undefined
  • null : object
    • 형태 : let a = null
x = null
null

ex) 반에서 누가 전학간다고 번호가 당겨지지 않는다 그럴때 없음을 명시해준다

  • Array(배열) : object
    • 형태 :
['하나', '둘', '셋']
[100, 200, 300]

[{'one':1, 'two':2}, {'one':10, 'two':20}]//실무에서 많이 보이는 형태.
let x = [{'one':1, 'two':2}, {'one':10, 'two':20}]
undefined
x[1]
{one: 10, two: 20}
x[1]['one']
10

[[10, 20], [100, 200], [1000, 2000]]
// 3차원

let x =[[[1, 2], [10, 20], [100, 200]],
 [[3, 4], [30, 40], [300, 400]]]
 //400을 꺼내고 싶다.
 
 x[1]
	(3) [Array(2), Array(2), Array(2)]
		0: (2) [3, 4]
        1: (2) [30, 40]
        2: (2) [300, 400]
        length: 3
        [[Prototype]]: Array(0)
        
x[1][2]
(2) [300, 400]

x[1][2][1]
400

 

이게 왜 중요하냐? JSON로 실무에서 쓰는 데이터를 생성할 때

 

Array의 Depth가 얕지 않고 점점 더 깊어지므로 접근하는 방식을 알아야 하기 때문이다

 

  • 호출 : 변수명, 변수명[0], 변수명[0][0] (변수명[index], 개별값 변경 가능)
  • Array
  • 메서드 :
    • length
    • forEach
x=[10,20,30,40]
(4) [10, 20, 30, 40]

x.forEach(x => console.log(x ** 2))

VM2147:1 100
VM2147:1 400
VM2147:1 900
VM2147:1 1600
  • map //많은 데이터들 중 데이터를 뽑아 낼 때 사용한다
[10,20,30,40].map(x => x+100)
(4) [110, 120, 130, 140]
//새로운 배열을 만들어준다
  • filter
[1,2,3,5,7,9].filter(x => x > 4)
(3) [5, 7, 9]

 

  • push / pop - mutable
  • slice - immutable
  • splice - mutable
  • reduce - immutable
  • join
  • indexOf
  • includes
  • find
[1,2,3,5,7,9].find(x => x > 4)
5

 

  • concat
  • every
  • some
  • fill — mutable
  • shift — mutable
  • unshift — mutable
  • reverse — mutable
  • sort — mutable
Array(100).fill(0)
Array(100).fill('hello')
Array(100).fill('hello'.repeat(2))
Array(100).fill(0).map((value, index)=> value + index)

Array(100)
(100) [empty × 100]//비어있음

Array(100).fill(0)
(100) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Array(100).fill(0).map((value, index)=> value + index + 1)
(100) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

Array(100).fill(0).map((value, index)=> value + index + 100)
(100) [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199]
  • Object(객체)
    • 형태 : 키와 밸류 (feat.운영 중단된 라이브 코로나 사이트)
{
    "지역이름": "전국", // key : value(2개의 집합을 가리켜 객체 프로퍼티).
    "확진자수": 24889,
    "격리해제수": 23030,
    "사망자수": 438,
    "십만명당발생율": 48.0
}
{
    'one' : 1,
    'o n e' : 1,
    '1 one' : 1
}
{
    one : 1,
    o n e : 1, // error.
    1 one : 1 // error.
}
let x=1, y=2, z=3
let object = {x, y, z} // {x: 1, y: 2, z: 3}.
  • 호출 : 변수명, 변수명.지역이름, 변수명['지역이름'] (변수명.key, 변수명[key])

변수명[x]가 안되는 이유는 x를 변수로 인식할 수 있기 때문이다

  • 수정 : value['hello'] = 'world', value['hello'] = null
  • 삭제 : delete value['hello']는 추천하지 않음(메모리 상에 'world'가 남아있음, value['hello'] = null을 권장)
  • 메서드 : Object.keys(키값만 출력), Object.values(오브젝트값만 출력), Object.entries(다 출력)
//변수명.keys()와 같은 형식은 안됩니다.
x.keys()
  • Map : object
    • 메서드 : set, get, has, delete, size
let map = new Map()
map.set('one', 100)
map.set('two', 200)
map.set('three', 300)
map.set('four', [10, 20])//map.keys(),values(),entries() 오브젝트랑 똑같이쓸수있음.

map.set(5, [100, 200])
map.set([1, 2], [100, 200])
map.get(5)

let human = {
    name:'hojun3',
    age:30,
    local:'jeju'
}
let hojun = new Map(Object.entries(human))

let test = new Map(Object.entries(Object))//오브젝트에 접목
  • Set : object
    • 메서드 : add, delete, has, size
    • 중복을 허락하지 않는다
    • 합집합, 교집합, 차집합 등에 메서드가 있진 않지만, 이러한 합집합, 교집합, 차집합을 구현하기 위해 Set을 사용하는 경우가 많습니다
let set = new Set('11111222233333')
undefined
set
Set(3) {'1', '2', '3'}//중복 허락안함
set.add(5);
Set(4) {'1', '2', '3', 5}//추가
set.add(7);
Set(5) {'1', '2', '3', 5, 7}
set.size
5

조건문과 반복문

조건문

  • if
  • else if
  • else
  • switch
if(false) {
    console.log('hello 1')
}
if(false) {
    console.log('hello 2')
}
if(true) {
    console.log('hello 3')
}
if(true) {
    console.log('hello 4')
}
//트루인 것만 출력

let x =2

if(10 % x == 0)//변수를 넣을 수 있다
true
if(false){//(true)면 헬로 원을 실행시킨다 그런데 false이므로 밑의 else로 간다
    console.log('hello 1')
}
else if(false) {//마찬가지로 트루여야하는데 아님
    console.log('hello 2')
}
else if(true) {//트루가 맞음 헬로3이 실행된다
    console.log('hello 3')
}
else if(true) {//그렇지 않을 때 실행되는데 이미 트루가 나와서 위에만 출력
    console.log('hello 4')
}
else {
    console.log('!!')
}
let result = true ? 1 : 100;

result
1
//결과가 트루일 때 앞의 값을 출력한다.

true ? console.log('one') :
    console.log('two');
one

false ? console.log('one') :
    console.log('two');
two
let day
switch (new Date().getDay()) {
  case 0:
    day = "일";
    break; //케이스 0에서 멈춘다
  case 1:
    day = "월";
    break;
  case 2:
    day = "화";
    break;
  case 3:
    day = "수";
    break;
  case 4:
    day = "목";
    break;
  case 5:
    day = "금";
    break;
  case 6:
    day = "토";
}
console.log(day)
일

반복문

  • for
  • for in
  • for of
  • while
  • do while
  • forEach
  • break
  • continue
for (let i = 0; i < 10; i++) {
    console.log(i)
}
0
VM3516:2 1
VM3516:2 2
VM3516:2 3
VM3516:2 4
VM3516:2 5
VM3516:2 6
VM3516:2 7
VM3516:2 8
VM3516:2 9

for( let i = 5; i < 10; i++){
    console.log(i)
}
VM3574:2 5
VM3574:2 6
VM3574:2 7
VM3574:2 8
VM3574:2 9
undefined
for( let i = 5; i < 10; i = i +2){
    console.log(i)
}
VM3601:2 5
VM3601:2 7
VM3601:2 9

for( let i = 5; i < 10; i = i +2){
    for( let k = 6; k < 10; k++){
    console.log(`${i} x ${k} = ${i*k}`)
    }
} //for문이 중첩되는 경우가 굉장히 많다
VM4113:3 5 x 6 = 30
VM4113:3 5 x 7 = 35
VM4113:3 5 x 8 = 40
VM4113:3 5 x 9 = 45
VM4113:3 7 x 6 = 42
VM4113:3 7 x 7 = 49
VM4113:3 7 x 8 = 56
VM4113:3 7 x 9 = 63
VM4113:3 9 x 6 = 54
VM4113:3 9 x 7 = 63
VM4113:3 9 x 8 = 72
VM4113:3 9 x 9 = 81
//for of
let a = [10, 20, 30, 40];
for (let i of a) {
    console.log(i);
}
10
20
30
40

let a = 'hello';
for (let i of a) {
    console.log(i);
}
h
e
2l
o
let s = 0
let a = '19821'
for (let i of a) {
    s += i //s는 i를 누적한다
}
'019821'
s
'019821'

let s = 0
let a = '19821'
for (let i of a) {
    s += parseInt(i)
}
21
let a = {'one':1, 'two':2};
for (let i in a) {
    console.log(i);
}
one
two//키값만 출력한다 밸류는 log(a[i]);
let x = 0;
while (x < 10) {
    console.log(x);
    x++; //x는 증가한다는 전제가 꼭 있어야 한다 안 그럼 무한반복된다
}

 

호기심에 x++지우고 했다가 컴퓨터 멈출 뻔;

 

//예제
for (let i = 0; i < 10; i++) {
    if (i == 5) {
        break;
    }
    console.log(i)
}
0
1
2
3
4

 

break 은 반복문을 탈출하고

 

for (let i = 0; i < 10; i++) {
    if (i == 5) continue;
    console.log(i);
}
0
1
2
3
4
6
7
8
9

 

continue 은 다음 루프로 넘어간다

 

함수와 클래스

함수

  • 함수 표현식과 함수 선언식
let 함수표현식 = function(){} // 호이스팅 X(let ,class 등 일시적 사각지대에 빠질 수 있다)
function 함수선언식(){} // 호이스팅 O
  • 함수(파선아실: 파라미터는 선언할 때, 아규먼트는 실제 사용하는 값이다)
    • 여기서 x, y를 보통 한국에서는 인자
    • 매개변수(파라미터, parameter) : x, y
    • 전달인자(아규먼트, argument) : 3, 5
    • 사용이유
      1. 재사용성
      2. 아키텍처 파악
      3. 유지보수
function add(x, y){
    return x + y; //x,y에 값을 돌려 놓는다
}

add(3, 5)

function add(a = 100, b = 200) {
    console.log(a, b);
    return a + b;
}

add(10, 20);
// 30
add(10);
// 210
add(); //디폴트 값대로
// 300
add(b=300) // a에 입력
// 500
add(undefined, 300);
// 400

function add({ a = 100, b = 200 }) {
    console.log(a+b);
}

add({b: 300}); // 400
  • 콜백함수 : 아규먼트를 먼저 주고 나중에 실행시키겠다
function add(x, y) {
    return x + y;
}

function mul(x, y) {
    return x * y;
}

function cal(a, b){
    return a(10, 10) + b(10, 10);
}

cal(add, mul); // 함수를 변수처럼 실행시킨다
  • 화살표 함수를 콜백함수로 사용했을 경우의 장단점
    • 장점 : 네이밍을 안해도 됩니다.
    • 장점 : 다른 곳에서 사용할 수가 없다.
    • 단점 : 콜백지옥에 빠질 수가 있습니다.
function cal(a, b){
    return a(10, 10) + b(10, 10);
}

cal((a, b) => a + b, (a, b) => a * b);
  • 화살표함수
function 제곱(x) {
    return x**2
}

// 함수표현식, 호이스팅 X
let 제곱 = x => x**2; //리턴값 x**2; 인자값이 하나일 때

function f(a, b) { //인자값 여러개일때
    let z = 10
    let result = z + a + b
    return result
}

// 함수표현식, 호이스팅 X
let f = (a, b) => {
    let z = 10
    let result = z + a + b
    return result//리턴값 여러개 일 때
};

클래스

  • 클래스 - 붕어빵 찍는 틀, 공장
  • 인스턴스 - 붕어빵, 제품
class Notice {
    constructor(title, contents, author){ //constructor는 고정이다
        this.title = title
        this.contents = contents
        this.author = author
    }
    수정하기(title, contents, author){
        this.title = title
        this.contents = contents
        this.author = author
    }
}
//이게 클래스 밑에 게시글이 인스턴스
dataBase = []
게시물1 = new Notice('제목1', '내용1', '저자1')
dataBase.push(게시물1)
게시물2 = new Notice('제목2', '내용2', '저자2')
dataBase.push(게시물2)
게시물3 = new Notice('제목3', '내용3', '저자3')
dataBase.push(게시물3)

dataBase.forEach(d => {
    제목 = document.createElement('h1')
    제목.textContent = d.title
    내용 = document.createElement('p')
    내용.textContent = d.contents
    저자 = document.createElement('p')
    저자.textContent = d.author
    document.body.append(제목)
    document.body.append(내용)
    document.body.append(저자)
})

// dataBase.splice()와 같은 것으로 삭제, 실제로는 mongoDB와 같은 곳에서 삭제

예시) 화면에서 가로세로 높이와 같은 큰틀은 같으므로 클래스를 묶는다

class Human {
    constructor() {}
    // 인스턴스 메서드, 인스턴스 프로퍼티 메서드, 프로토타입 메서드
    a() {}
    // 클래스 메서드, 클래스 프로퍼티 메서드, 정적 메서드
    static b() {}
}

hojun = new Human('호준')
//휴먼이라는 클래스는 공격과 방어가 가능한데 어떤 새로운 휴먼을 만들어도 쓸 수 있다

typeof hojun // object
typeof Human // function

// getter - 획득
// setter - 설정
// # = private 필드
 
class Mento extends Student {//상속
    codeReview() {
        console.log('코드리뷰를 진행합니다.');
    }
}

let hojun = new Student(999, '호준', ['python', 'js', '...생략...']);

let hojun2 = new Mento(999, '호준', ['python', 'js', '...생략...']);

예외처리, 전개표현식, 정규표현식, 리터럴 등

예외처리

try {
   xxxx += 10000 //x 가 없는데 누적시킨다 에러
} catch(e) {
   console.log('에러!')
   console.error(e)
} finally {
	console.log('finally!') //무조건 실행시킨다
}
에러!
VM139:5 ReferenceError: xxxx is not defined
    at <anonymous>:2:4 // 빨간 에러 표시
finally!

//throw new Error(message);
//throw new SyntaxError(message);
//throw new ReferenceError(message);

전개구문 사용

  • 전개구문 사용 예제
function f(...x){
    return x;
}

f(1, 2, 3, 4, 5) //여러개의 인자값을 전달해줄때
let arr1 = [1, 2, 3, 4];
let arr2 = [10, 20, 30, 40];
let arr3 = [100, ...arr1, 200, ...arr2, 300]
let arr4 = [100, arr1, 200, arr2, 300]
console.log(arr3)
Math.max(...arr3);//max 값 뽑을때 사용한다
let [a, b, c, ...d] = [10, 20, 30, 40, 50, 60, 70]//10,20,30은 a,b,c,나머지 인자가 ...d가 된다

정규표현식 (어렵대)

// 0 문자 제거
let s = '010100020201020304812123';
s.replace(/[^1-9]/g,"") //꺾쇠는 밖에 있을 때 시작이고,[^와 붙어있을 땐 부정not의 의미
'11221234812123' // 1부터 9까지가 아닌것 0을 집어 내겠다

/*
- `^` : 문자열의 시작
- `$` : 문자열의 종료. 옵션에 따라 문장의 끝 또는 문서의 끝에 매치된다.
- `.` : 임의의 한 문자
- `[]`: 문자 클래스. 문자 클래스 안에 들어가 있는 문자는 그 바깥에서 하나의 문자로 취급된다.
- `^` : 문자 클래스 내에서 ^는 not
- `-` : ex) a-z는 a에서 z까지의 문자
- `|` : or를 나타냄
- `?` : 앞 문자가 없거나 하나 있음
- `+` : 앞 문자가 하나 이상임
- `*` : 앞 문자가 0개 이상임
- `{n,m}` : 앞 문자가 `n`개 이상 `m`개 이하. `{0,1}` 은 `?`와 같은 의미다.
- `{n,}` : 앞 문자가 `n`개 이상. 위의 형태에서 `m`이 생략된 형태이다. `{0,}` 이면 `*`와 같고 `{1,}` 이면 `+`와 같은 의미이다.
- `{n}` : 앞 문자가 정확히 `n`개. `{n,n}` 과 같은 의미이다.
- `()` : 하나의 패턴구분자 안에 서브 패턴을 지정해서 사용할 경우 괄호로 묶어주는 방식을 사용한다.
- `\\\\s` : 공백문자
- `\\\\b` : 문자와 공백 사이를 의미한다.
- `\\\\d` : 숫자 [0-9]와 같다.
- `\\\\t` : 탭문자
- `\\\\w` : 단어 영문자+숫자+_(밑줄) [0-9a-zA-Z_]문자 이스케이프는 대문자로 적으면 반대를 의미한다.
[a-z] : a ~ z 사이의 문자를 찾음
[1-9] : 1 ~ 9 사이의 문자를 찾음
[abc] : a, b, c중 하나를 찾음
[^abc] : a, b, c를 제외한 문자를 찾음
.z : 아무 문자 하나를 . 기호로 찾으며 z로 끝남을 의미
a+ : a가 1개 이상을 의미함
a* : a가 0개 또는 그 이상을 의미함
s : 공백 문자를 찾음(스페이스, 탭 등), 대문자의 경우 아닌 문자를 찾음
d : 숫자를 찾음, 대문자의 경우 아닌 문자를 찾음
w : 알파벳 영문과 숫자와 언더바 _ 기호를 찾음, 대문자의 경우 아닌 문자를 찾음
t : 탭 공간을 찾음
g : 검색범위를 전역으로 확장
i : 대소문자를 구분하지 않음
gi : 검색 범위를 전역으로 확대하면서 대소문자를 구분하지 않음
m : 여러줄을 동시에 매칭함
*/

리터럴

  • 리터럴은 약속된 기호를 사용해 값을 생성하는 것입니다
  • 2진수, 8진수, 16진수 리터럴
    let a = 0b1001
    a == 9 // binary 바이너리 이진법
    let b = 0o1001
    b == 513 // octa 옥타 팔진법
    let c = 0x1001
    c == 4097 // hexa 헥사 십육진법

구조분해할당

for (let [[i, j], k] of [[[1, 2], 2], [[1, 2], 4]]) {
    console.log(i, j);
}

동기와 비동기

  • js는 일을 처리할 수 있는 thread가 1개, 싱글쓰레드라고 함.
  • 하지만 모든 일을 여러명이 처리할 수 없다면 항상 기다려야 하는 문제가 생길 수도 있고, 무한대기에 빠질 수도 있음.
// 순서대로 한다면 덧셈, 곱셈, hello world 순이지만
// 비동기이기 때문에 hello world, 곱셈, 덧셈 순이 됨
function 덧셈(a, b, 콜백함수) {
    setTimeout(()=>{
        let result = a + b
        console.log(result)
    }, 2000)
}
function 곱셈(a, b, 콜백함수) {
    setTimeout(()=>{
        let result = a * b
        console.log(result)
    }, 1000)
}

덧셈(20, 30)
곱셈(2, 6)
console.log('hello world')
//만약 값이 0이 되더라도 헬로월드 먼저 출력된다
  • Promise (중요!)
    • pending(대기상태) - resolve(해결) - fulfilled(성공)
    • pending(대기상태) - reject(거부) - rejected(실패)
new Promise((resolve, reject) => {
        //code 안에서 해결이 되면 then으로 거부가 되면 catch로 간다
    })
    .then(result => result)
    .then(result => result)
    .catch(err => err)
    .finally(result => result) //무조건 실행

let p = new Promise(function(resolve, reject) {
    resolve('hello world');
}).then(메시지 => {
    alert(메시지);
    return 메시지.split(' ')[0]
}).then(메시지 => {
    alert(메시지);
    return 메시지[0]
}).then(메시지 => {
    alert(메시지);
});


const f = fetch('<https://raw.githubusercontent.com/paullabkorea/coronaVaccinationStatus/main/data/data.json>')
f
//Promise {: Response}
const f = fetch('<https://raw.githubusercontent.com/paullabkorea/coronaVaccinationStatus/main/data/data.json>')
    .then(function(response) {
        return response.json();

    })
    .then(function(json) {
        console.log(json);
        return json
    })

const f = fetch('<https://raw.githubusercontent.com/paullabkorea/coronaVaccinationStatus/main/data/data.json>')
    .then(d => d.json())
    .then(d => console.log(d))

//VM458:7 (18) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]0: {시·도별(1): '전국', 총인구 (명): 52980961, 1차 접종 누계: 15199919, 2차 접종 누계: 4521785, 1차 접종 퍼센트: 28.6893984426, …}1: {시·도별(1): '서울', 총인구 (명): 9911088, 1차 접종 누계: 2811191, 2차 접종 누계: 835878, ...중략...

// 뒤에서 나올 DOM api 사용
const f = fetch('<https://raw.githubusercontent.com/paullabkorea/coronaVaccinationStatus/main/data/data.json>')
    .then(data => {
        console.log('데이터 받기 성공!')
        const jsonData = data.json()
        return jsonData
    })
    .then(json => {
        json.forEach(item => {
            console.log(item)
            const h2 = document.createElement('h2')
            h2.innerText = item['시·도별(1)']
            document.body.append(h2)
            const p = document.createElement('p')
            p.innerText = item['총인구 (명)']
            document.body.append(p)
        })
    })
    .catch(e => {
        console.log('json 변환 실패!!')
    })

/////////
// 동기처리 //

setTimeout(()=> {
    console.log('5초 끝!')
}, 5000);

setTimeout(()=> {
    console.log('10초 끝!')
}, 10000);

function cook(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

const myCake = async () => {
    await cook(3000);
    return '케이크';
};

const myCoffee = async () => {
    await cook(2000);
    return '커피';
};
const myCookie = async () => {
    await cook(5000);
    return '쿠키';
};

async function asyncProcess() {
    const cake = await myCake();
    console.log(cake);
    const coffee = await myCoffee();
    console.log(coffee);
    const cookie = await myCookie();
    console.log(cookie);
}

asyncProcess();

///////////
// 비동기처리 //

setTimeout(()=> {
    console.log('5초 끝!')
}, 5000);

setTimeout(()=> {
    console.log('10초 끝!')
}, 10000);

function cook(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

const myCake = async () => {
    await cook(3000);
    return '케이크';
};

const myCoffee = async () => {
    await cook(2000);
    return '커피';
};
const myCookie = async () => {
    await cook(5000);
    return '쿠키';
};

async function promiseProcess() {
    const results = await Promise.all([myCake(), myCoffee(), myCookie()]);
    console.log(results);
}

promiseProcess();

// 질의응답
async function a() {
    console.log(1);
    setTimeout(()=> {
        console.log(2)
    }, 0);
    console.log(3)
}
a()
// 1, 3, 2

async function a() {
    console.log(1);
    await setTimeout(()=> {
        console.log(2)
    }, 1000);
    console.log(3)
}

a()
// 1, 3, 2

// why? await은 promise 앞에서만 사용
// await [[Promise 객체]] 의 형식

async 데이터가 다 올때까지 기다리고 있다

https://paullabworkspace.notion.site/JavaScript-f037c206e538471f9a9f1915b2139a60 책 참조

 

알아서 잘 딱 깔끔하고 센스있게 정리하는 JavaScript 핵심 개념

A new tool for teams & individuals that blends everyday work apps into one.

paullabworkspace.notion.site

DOM

DOM을 탐색해봅시다.

개행을 찾을 때

// body>h1{hello world}+p{hello}+div>h1{hello world}+p{hello}
document.body.childNodes
document.body.childNodes[1].textContent = 'hello hojun'
document.body.childNodes[3].childNodes[1]

// 해당하는 Id를 가진 요소에 접근하기
document.getElementById()

// 해당하는 모든 요소에 접근하기
document.getElementsByTagName();

// 해당하는 클래스를 가진 모든 요소에 접근하기
document.getElementsByClassName();

// css 선택자로 단일 요소에 접근하기
document.querySelector("selector");

// css 선택자로 여러 요소에 접근하기
document.querySelectorAll("selector");

// target 요소를 생성합니다.
document.createElement(target);

// target 텍스트를 생성합니다.
document.createTextNode(target);

// target 요소를 element의 자식으로 위치합니다.
element.appendChild(target);

// element의 target 자식 요소를 제거합니다.
element.removeChild(target);

HTML콘텐츠골격, CSS는 웹페이지의 레이아웃, JavaScript는 웹페이지의 동작을 담당하게 된다

 

 

다른 언어와 다른 점은 자바스크립트는 버전업이 됐다고 해서

 

이전에 있던 기능을 삭제하거나 새로운 기능을 막 추가하지 않는다

 

왜냐하면 이전의 코드들이 이미 배포가 되었기 때문에 오류가 나면 안되기 때문,

 

그래서 자바스크립트 설계자가 시인한 오류마저도 아직도 그대로 남아아있다

 

(뒤로 갈수록 자바스크립트가 왜이러지?싶을 수 있음)

 

 

중요한 변화포인트는 ES5 버전의 엄격모드, 배열메서드(map, filter, forEach 등)

 

ES6 버전의 const, let, Promise, Arrow function, class 이다

 

업데이트 되는 내용은 ECMA-인터내셔널 공식 사이트 : https://www.ecma-international.org/ 에서 확인 할 수 있다

 

 

001.html 새 파일 생성

! tab 은 emmet 문법이다

 

수업은 vscode로 진행되고 나는 쓰던 게 atom 이라 emmet 플러그인을 설치했다

 

자바스크립트 삽입위치

  • head, body의 문서 처음, 중간, 끝
  • 보통 body의 맨 끝

 

!Tab을 눌러 Emmet문법으로 완성한다

 

 h1{hello world}+p{hello world}*5


 하고 Tab (이것도 emmet 문법)

 

 

  <script></script> 태그는 아무데나 넣을 수 있지만

 

첫번째 p태그에

 

  <p id="one">hello world</p>

 

스크립트 태그에

 

    document.getElementById('one').innerHTML = 'hi world'

 

를 추가해보자

 

 

첫번째 줄이 hi world 로 바뀐 걸 볼 수 있다

 

반면, 스크립트 태그의 위치를 옮겨 p태그 위나 head 태그 안으로 옮기면

 

 

아직 document 가 완성되지 않은 시점에서

 

getElementById 로 'one' 이라는 Id 를 셀렉하려고 했기 때문에 바뀌지 않는다

 

그래서 script의 위치는 body 닫기 태그 직전에 두는 것이 일반적이다

(절대적은 아님.프로젝트에 따라 중간이나 타이틀 밑에 놓는 경우도 있다)

 

내부 스크립트와 외부 스크립트

 

스크립트를 내부에 넣는 방법과 파일로 빼 외부에 저장하는 방법이 있다

 

스크립트 내부에 있는 코드를 test.js 라는 파일에 옮기고

 

스크립트 태그자리에   <script src="test.js"></script> 로 수정한다

 

 

이렇게 다른 태그안에도 자바스크립트를 추가 할 수 있지만

 

유지보수에 어려움이 생기므로 지양한다

 

JavaScript를 출력하는 4가지 방법

  1. 문서 내에 요소를 선택하여 출력하는 방법(innerHTML, innerText 등)
  2. 문서 내에 직접 출력하는 방법(write 등)
  3. 사용자 인터렉션(alert, confirm 등)
  4. 콘솔에 찍는 방법(console.log, console.table, console.error 등)

 

코드 구조

  1. 문(statement)은 세미콜론으로 구분(세미콜론을 붙이지 않는 곳도 있습니다.회사마다 다름)
  2. 문은 값, 연산자, 키워드, 명령어, 표현식(값으로 평가, 함수나 key, index를 통한 값의 호출도 표현식) 등으로 구성됩니다.
  3. 공백 병합

let x = 10,
    y = 20,
    z = 30
console
    .log(
        x,
        y,
        z,
    )
  

// 한 줄 주석입니다.

/*

여러줄 주석입니다.

*/

 

엄격모드

  • ES5에서 최신의 문법들이 많이 추가가 되었는데 기존에 있었던 문법을 변경하는 문법도 나옴
  • 이러한 문법들은 기존 코드의 문제를 불러일으킬 수 있기 때문에 use strict라는 지시자를 통해 엄격모드를 활성화 했을 때에만 반영
  • class 문법의 경우 엄격 모드가 기본
  • 함수별로 엄격모드를 다르게 적용할 수 있으나 혼란을 야기할 수 있습니다.

"use strict";

 

변수

  • 변수 이름 규칙
    • 변수는 숫자로 시작할 수 없다.
    • 띄어쓰기가 안된다.
    • 예약어를 사용할 수 없다.(예약어가 사용 불가능한 것은 아닙니다.)
    • $, _를 제외한 특수문자를 사용하지 않는다.
    • 대소문자를 구분한다.
    • class는 첫 문자를 대문자로, 나머지는 보통 소문자로 시작한다.
  • var, let, const
    • var(ES5 이전, 지금 사용 권장 X) : 함수 레벨 스코프, 재선언시 애러 X
    • let(ES5) : 블록 레벨 스코프, 재선언시 애러 O, 콘솔에서는 애러 X, 변경가능한 자료형
    • const(ES5) : 블록 레벨 스코프, 재선언시 애러 O, 콘솔에서는 애러 X, 변경이 불가능한 자료형(상수)

연산

  • 산술 연산자(+, -, /, *, **, %)
  • 할당 연산자(=, +=, -=, /=, *=, **=, %=)
  • 논리 연산자(&&, ||, !, !!, &, |)
    • 참 -> true -> 1
    • 거짓 -> false -> 0
    • &&는 곱 (and 연산자)
    • ||는 합 (or 연산자)
    • !는 부정 !!는 부정의 부정=참 (true, false 찾을 때 사용한다)
    • 암기코드

  for (let x = 0; x < 100; x++) {
      if(x % 3 == 0 && x % 5 == 0){
          console.log(x)
      }
  }

 

15의 배수가 값

 

  for (let x = 0; x < 100; x++) {
      if(x % 3 == 0 || x % 5 == 0){
          console.log(x)
      }
  }

 

3,5 의 배수가 값

 

& 비트연산자

 

9와 5를 이진법으로 바꿔 계산한다

실무에서는 거의 볼일 없음

 

 

  • 비교 연산자(>, >=, <, <=, ==(값만 본다), !=, ===(type까지 본다), !==)

 

let x = 3 (number)

let y = '3' (string)

 

console.log(x == y)

ture (자바스크립트에서만 값을 3으로 쳐줌)

 

console.log(x === y)

false (다른 타입인 넘버와 스트링이라서 거짓)

 

  • 단항 산술 연산자(++x, x++, --x, x--)

x++ 는 자기 자신을 한번 더 나타냄

 

  • nullish 병합 연산자(??)

 

단락 회로 평가랑 비슷

 

let result1;
let result2 = result1 ?? 100;

 

result1은 값을 지정하지 않은 undefined라서 = 일 때 || 와 마찬가지로

 

뒤에 있는 값인 100;이 result 2의 값이 된다

let result3 = 10;
let result4 = result3 ?? 100;

 

result3 은 값이 있으므로 result 4 의 값은 3 값인 10이 된다

 

let result5 = null;
let result6 = result5 ?? 100;

 

1과 마찬가지로 null 값이 없으므로 뒤에 있는 100이 6의 값이 된다

 

  • typeof 연산자

 

  • 프로퍼티 접근 연산자
    1. 마침표 프로퍼티 접근 연산자
    2. 대괄호 프로퍼티 접근 연산자

 

첫번째 예시가 false인 이유

 

배열 인덱스[0,1,2,] 로 판단해서 10이 없다

 

length 가 true 인 이유

 

console.dir(x) 했을때 모든 변수가 나오는데 거기에 length가 있다

 

변수의 형

변수(타입, typeof로 확인 가능)

  • 원시타입(primitive types) : number, string, boolean, null, undefined, symbol(ES6 추가, 변경 불가능한 유일한 값)
  • 참조타입(reference types) : object(object, array, map, set), function
  • Number(숫자)
    • 형태 : 10, 10.123, -10
    • 호출 : 변수명
      • 메서드 :
        • 10.toString()는 안됩니다. 이유는 무엇일까요? 소수점 때문에 그렇습니다.(JavaScript의 parsing때문이고, 아는 분이 많지는 않습니다.)
        • (10).toString()와 변수명.toString()은 가능합니다.
        • num.toFixed()
      • Number()
      • parseInt() - 권고, parseFloat()

  • Math
    • Math.PI  (3.14나옴)
    • Math.max() (그냥 치면 -infinity 10,20,30이면 30이 값이 됨)
    • Math.min()
    • Math.floor()
    • Math.round()
    • Math.random()
    • Math.abs()
    • Math.sqrt()
    • Math.pow()
  • NaN (not a number, typeof 로 했을 때 number로 나온다)
  • Infinity, -Infinity (typeof 로 했을 때 number)

https://paullabworkspace.notion.site/JS-22-6-8723b46e0cde4d90b020b689e5cb9f0a

 

JS(22년 6월 업데이트 완료)

자바스크립트

paullabworkspace.notion.site

https://www.youtube.com/watch?v=NQZZyVM8ksw&t=1s

 

 

console.log("Hello World!");


 

제일 쉬운거

 

치고는 엄청 헤맴

 

 

선택 언어에 자바스크립트 없어서

 

대충 자바 선택했다가( java / javascript 전혀 다른언어임ㅋ) 당연히 안됨

 

node.js 로 하니까 된듯 싶다가

 

여기저기 오타내고 사이트 삽질했다


자바스크립트로 백준을 풀려면

 

노드제이에스로 선택해서 풀어야한다는걸 깨달았다;


+세상엔 재밌는 사람들이 참 많다

 

+ Recent posts