alert('Hello');
alert('World');
데이터를 저장할 때 쓰이는 "이름이 붙은 저장소"
변수는 바뀔 수 있는 값
let message;
let message;
message = 'hello'; // 문자열을 저장합니다.
let message;
message = 'hello';
console.log(message); //'hello 출력'
let message = 'hello'; //변수를 정의하고 값을 할당
let user = 'Hyun', age = 27, message = 'hello'; //한 줄에 여러변수 선언 가능
let user = 'Hyun',
age = 27,
message = 'hello'; //쉼표 후행
let user = 'Hyun'
,age = 25
,message = 'hello'; //쉼표 선행
한 번 선언하고 값이 바뀌지 않는 값
const myBirthday = '1997.08.22';
const myBirthday = '1997.08.22';
myBirthday = '01.01.2001'; // error, can't reassign the constant!
const COLOR_RED = '#f8f7f8';
let color = COLOR_RED;
console.log(color); //#f8f7f8
대문자로 상수를 만들었을 때 장점
COLOR_RED 는 '#f8f7f8' 보다 기억하기 쉽다.
COLOR_RED 가 더욱 유의미 하기에 코드 가독성이 증가
대문자 상수는 '하드 코딩한' 값의 별칭을 만들 때 사용
var user = 'Hyun';
console.log(user); // Hyun
var user = 'DongHyun';
console.log(user); // DongHyun
유연한 변수 선언 방식을 가지고 있으나, 이는 자칫 잘못하면 원하는 결과가 나오지 않을 수 있다.
let user = 'Hyun';
console.log(user); // Hyun
let user = 'DongHyun';
console.log(user); // TypeError: Duplicate declaration "user"
중복 선언으로 인한 오류가 발생하고 있다
변수 선언 방식에서 알 수 있는 점은
let
은 재선언이 되지 않고,var
는 재선언이 가능하다.
호이스팅(Hoisting) - 변수 및 함수 선언을 현재 스코프의 최상단으로 옮긴 것 처럼 동작하는 특성이다.
ES6에서 도입된 let
, const
는 블록 스코프를 가지며 호이스팅 동작이 var
와 다르다.
어떻게 다른가?
console.log(name); //undefined
var name;
console.log(name); // Uncaught ReferenceError: name is not defined
let name;
var
로 선언된 변수는 스코프(함수, 전역)안에서 호이스팅이 된다.undefined
로 초기화된다.undefined
가 출력된다.말이 조금 어려운 것 같아서 예를 들어보자
console.log(name); // undefined
var name; // 변수를 선언 (그렇지만 할당은 하지 않음)
console.log(name); // undefined (변수 초기화되지 않았기에)
name = 'Hyun'; // 변수 초기화(값을 할당 함)
console.log(name); // Hyun
var
로 선언된 변수는 선언 단계와 초기화 단계가 한번에 이루어진다,let
로 선언된 변수는 선언, 초기화 단계가 분리되어 진행된다.console.log(name); // ReferenceError: name is not defined
let name; // 초기화 단계가 실행된다.
console.log(name); // undefined
name = 'Hyun'; // 값을 할당 함
console.log(foo); // 1
변수 선언은 const
를 지향하고, 재할당이 필요한 경우는 let
을 사용하는 방향이 좋다.
변수 선언에서 var
를 지양하자.
변수나 상수를 선언하게 될 때, 숫자 외에도 다른 값들을 선언 할 수 있다.
let value = 1;
let name = 'Hyun';
let text = "hello";
let test = true; // 참
let lading = false; // 거짓
null 과 undefined - 없음의 의미
const water = null; // 알 수 없는 값, 이 값이 없다 라고 선언 할 때
let criminal;
console.log(criminal) // undefined 할당 되지 않은 값
null
- 우리가 없다고, 고의적으로 설정한 값
undefined
- 우리가 설정을 하지 않았기 때문에 없는 값
Math.floor()
- 아래로 가장 가까운 정수로 내림Math.ceil()
- 소수점 첫째 자리 올림Math.round()
- 소수점 첫째 자리 반올림Math.trunc()
- 소수점 무시console.log(Math.floor(3.2)); // 3
console.log(Math.ceil(3.2)); // 4
console.log(Math.round(3.2)); // 3
console.log(Math.trunc(3.2)); // 3
console.log(Math.floor(-3.7)); // -4
console.log(Math.ceil(-3.7)); // -3
console.log(Math.round(-3.7)); // -4
console.log(Math.trunc(-3.7)); // -3
console.log(Math.floor(2.34)); // 2
console.log(Math.ceil(2.34)); // 3
console.log(Math.round(2.34)); // 2
console.log(Math.trunc(2.34)); // 2
isNaN(value)
- 인수를 숫자로 변환한 다음 NaN
인지 테스트console.log( isNaN(NaN) ); // true
console.log( isNaN("str") ); // true
isFinite
- 인수를 숫자로 변환하고 변환한 숫자가 NaN/Infinity/-Infinity
가 일반 숫자인 경우 true
반환console.log( isFinite("15") ); // true
console.log( isFinite("str") ); // false, NaN이기 때문
console.log( isFinite(Infinity) ); // false, Infinity이기 때문
parseInt
- 문자열을 정수로 변환console.log(parseInt("100px")); // 100
console.log(parseInt("100.32")); // 100
정수를 반환하며 소수점 이하의 값은 무시
parseFloat
- 문자열을 부동 소수점 숫자로 변환console.log(parseFloat("12.3px")); // 12.3
console.log(parseFloat("12.3.4")); // 12.3, 두 번째 점에서 숫자 읽기 멈춤
부동 소수점 값을 반환하며 정수와 소수 부분을 모두 유지
length
프로퍼티에는 문자열의 길이가 저장된다.
console.log("asbd".length) // 4
console.log("as/2".length) // 4
"a"(1), "s"(2), "/"(3), "2"(4) -> 4가 나온다.
str[pos]
특정 위체 있는 글자에 접근하기
let str = "Hyun";
// 첫 번째 글자
console.log( str[0] ); // H
// 마지막 글자
console.log( str[str.length - 1] ); // n
위치는 0 부터 시작하고 length를 이용하여 마지막 글자를 알아낼 수 있다.
문자열은 수정할 수 없다.
let str = "Hyun";
str[0] = "h"; // TypeError: Cannot assign to read only property '0' of string 'Hyun'
console.log( str[0] );
그렇기에 새로운 문자열을 만들어서 할당하는 방법으로 바꿀 수 있다. 다음은 예시이다.
let str = "Hyun";
str = "h" + str[1] + str[2] + str[3];
console.log( str );
그럼 문자열이 더 길어지면? 코드가 더 복잡해 질 것이다 다음은 문자열 추출을 통해 코드를 변경해보자
let str = "Hyun";
str = "h" + str.substring(1); // 또는 str = "h" + str.slice(1);
console.log(str);
특정 구간의 문자열 추출 후 문자열 수정
to.LowerCase()
,toUpperCase()
를 사용하여 대->소문자, 소->대문자로 변경
console.log( "DongHyun".toUpperCase() );
console.log( "DongHyun".toLowerCase() );
console.log( "DongHyun"[2].toLowerCase() ); // 또한 하나의 케이스만 변경 가능
str.indexOf(substr, pos)
메서드를 사용하기
let str = 'Widget with id';
console.log( str.indexOf('Widget') ); // 0, str은 'Widget'으로 시작함
console.log( str.indexOf('widget') ); // -1,
console.log( str.indexOf("with") ); // 7,
console.log( str.indexOf("id") ); // 1,
이쪽 부분 이해가 안됨 id는 왜 1이고 with는 7인지
str.slice(start [, end])
메서드를 사용하기
문자열의start
부터end
까지 (end
는 미포함)
let str = "HappyBirthday";
console.log( str.slice(0,5) ); // Happy
console.log( str.slice(2) ); // ppyBirthday
console.log( str.slice(-4,-1) ); // hda
여기서 알 수 있듯이 end
가 없으면 끝까지 반환 음수면 끝에서 부터 카운트