주석 표현하기 : 한 줄짜리 주석은 //로, 여러 줄의 주석은 /**/로 사용한다.
주석에 들어가면 좋은 내용
주석에 들어가면 좋지 않은 내용
<body>
<script>
const btn = document.querySelector('#button')
// document.querySelector('아이디')는 그 아이디의 태그를 가져온다.
btn.addEventListener('click', () => {
const word = document.querySelector('#word').textContent
// '.'은 '~의'라는 의미로도 볼 수 있다.
const input = document.querySelector('#input').value
})
</script>
</body>
자바스크립트의 자료형 : 최신 ECMAScript 표준은 다음과 같은 8개의 자료형을 정의한다.
기본자료형(Primitive)인 일곱가지 데이터타입
1) Boolean : 논리적 요소를 나타내며 true, false 두가지 값을 가질 수 있다.
2) Null : 딱 한가지 값 Null(알 수 없는 값)을 가진다.
3) Undefined : 값을 할당하지 않은 변수는 Undefined값을 가진다.
4) Number : 정수, 부동 소수점 숫자 등의 숫자를 나타낼 때 사용한다.
5) String : 빈 문자열이나 글자들로 이뤄진 문자열을 나타낼 때 사용한다. 자바스크립트에선 따옴표로 묶여서 표현된다.
6) Symbol : Symbol은 유일하고 변경 불가능한 기본값(Primitive Value)으로 객체의 고유 식별자를 만들 때 사용한다.
7) 최근 채택된 'Biglnt'자료형도 있다. 길이에 상관없이 정수를 나타낼 수 있는 자료형이다. BigInt형 값은 정수 리터럴 끝에 n을 붙이면 만들 수 있다.
별도로 Object가 있다.
Object는 객체로 속성들을 담고있는 가방으로 간단히 표현 될 수 있다.
typeof 연산자는 피연산자의 자료형을 알려준다.
<body>
<div id="word">제로초</div>
<div>
<input id="input" type="text" />
<button id="button">입력</button>
</div>
<div id="error"></div>
<script>
const btn = document.querySelector('#button')
btn.addEventListener('click', () => {
const word = document.querySelector('#word').textContent
const input = document.querySelector('#input').value
const lastIndex = word.length - 1
if (word[lastIndex] == input[0]){
document.querySelector('#word').textContent = input
document.querySelector('#error').textContent = ''
document.querySelector('#input').value = ''
// 빈 문자열을 넣어주면 아무것도 뜨지 않는다.
document.querySelector('#input').focus()
//focus() 함수는 입력창에 자동으로 커서가 클릭 될 수 있도록 도와준다.
} else{
document.querySelector('#error').textContent = '땡'
document.querySelector('#input').value = ''
document.querySelector('#input').focus()
}
})
</script>
</body>
// 위 코드를 줄인 코드
<script>
const btn = document.querySelector('#button')
btn.addEventListener('click', () => {
const wordTag = document.querySelector('#word')
const inputTag = document.querySelector('#input')
const errorTag = document.querySelector('#error')
const word = wordTag.textContent
const input = inputTag.value
const lastIndex = word.length - 1
if (word[lastIndex] == input[0]){
wordTag.textContent = input
errorTag.textContent = ''
inputTag.value = ''
inputTag.focus()
} else{
errorTag.textContent = '땡'
inputTag.value = ''
inputTag.focus()
}
})
</script>
변수의 생명은 속한 블록에서 시작하고 끝난다.
자바스크립트의 var은 함수 레벨 스코프를 따르고 있었다.
함수 레벨 스코프(Function-level scope)
함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. 즉, 함수 내부에서 선언한 변수는 지역 변수이며 함수 외부에서 선언한 변수는 모두 전역 변수이다.var scope = 123;
{var scope = 456;}
console.log(scope); //456블록 레벨 스코프(Block-level scope)
모든 코드 블록(함수, if 문, for 문, while 문, try/catch 문 등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수이다.
블록 레벨 스코프를 지원하기 위한 let키워드 탄생!
let scope = 123; // 전역변수
{
let scope = 456; // 지역변수
console.log(scope); //456
let oldvar = 456;
}
console.log(scope); // 123
console.log(oldvar); // ReferenceError: oldvar is not defined
let 키워드로 선언된 변수는 블록 레벨 스코프로 중복 선언이 불가능하다.
var vs let vs const
변수 선언에는 기본적으로 const를 사용하고 let은 재할당이 필요한 경우에 한정해서 사용한다.
원시 값의 경우 가급적 상수를 사용한다. 그리고 객체를 재할당하는 경우는 생각보다 흔하지 않다. const 키워드를 사용하면 의도치않은 재할당을 방지해주기 때문에 보다 안전하다.
const dictObject = {}
// dictObject[Key] = Value
dictObject['banana'] = '바나나'
dictObject['apple'] = '사과'
dictObject['cherry'] = '체리'
console.log(dictObject)
// {banana: "바나나", apple: "사과", cherry: "체리"}
arr.includes(valueToFind, indexNumber)
// example (1)
[1,2,3].includes(2) //True : List[1,2,3] 안에 숫자 2가 포함되어있다.
[1,2,3].includes(2,2) // False : List[1,2,3]의 2번 index는 숫자 3이기 때문에 false이다.
[1,2,3].includes(2,1) // True : 1번 index는 숫자 2를 포함하고있다.
[1,2,3].includes(3,-1) // True : indexNumber에는 index를 표현할 수 있는 모든 표현이 허용된다.
// example (2)
let arr = ['a','b','c']
arr.includes('c', 3) //False : indexNumber가 변수의 index를 초과할 경우 false를 반환한다.
출처 :
1) https://ko.javascript.info/types
2) https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures
3) https://poiemaweb.com/es6-block-scope