자바스크립트가 다른 언어와 다른 특징 중 하나가 데이터 타입을 신경쓰지 않는다는 것
let a = 10; a = "나는 String인데.."; console.log(a);
Javascript에서는 결과가 잘 나오지만 Java나 C언어 등에서는 에러가 난다.
다른 언어에서는 변수에 어떤 값을 할당하여 변수의 type이 정해지면 그 후에 다른 type의 값을 할당할 수 없기 때문이다.
// console.log('200'+'10'); // 20010 // console.log('200'-'10'); // 190 // console.log(200+'11'); // 20011 // console.log('200'+11); // 20011 // console.log('200'-'안녕'); // NaN
+는 숫자끼리의 더하기와 String끼리 문자를 연결할 수 있다. (+의 양쪽을 보고, 하나라도 String이 있으면 문자열로 합쳐준다)
-는 문자열을 뺄 수 없기 때문에 양쪽을 숫자로 인식하고 빼기가 된다.
NaN은 Not a number / 계산이 불가능하고 이상한 답이 나왔다는 뜻
Number 함수를 사용하여 String에서 Number형으로 전환 가능
var birthYearInput = "2000"; console.log(typeof birthYearInput); // string var numberBirthYear = Number(birthYearInput); console.log(typeof numberBirthYear); // number
Number 함수 외에도 parseInt, parseFloat 등이 있다.
parseInt("1.901"); // 1 parseFloat("1.901"); // 1.901 Number("1.901"); // 1.901 parseInt("200") + 1; // 201
Number형에서 String형으로 변환하고 싶을 수도 있다.
var numberAsNumber = 1234; var numberAsString = numberAsNumber.toString(); console.log(numberAsNumber, typeof numberAsNumber); console.log(numberAsString, typeof numberAsString);
+ 연산의 특성을 이용해서 아래와 같이 변환할 수 있다.
var numberAsNumber = 1234; var numberAsString = 1234 + ""; console.log(numberAsNumber, typeof numberAsNumber); // 1234 'number' console.log(numberAsString, typeof numberAsString); // 1234 string
- 연산의 특성을 이용해서 아래와 같이 변환할 수 있다.
var numberAsNumber = "1234"; var numberAsString = numberAsNumber - 0; console.log(numberAsNumber, typeof numberAsNumber); // 1234 string console.log(numberAsString, typeof numberAsString); // 1234 number
프론트엔드 개발할 때, 날짜와 시간을 다루는 경우가 많다.
날짜 / 시간을 저장하고 보여줄 때 날짜 객체를 사용
날짜 객체를 호출하여 쉽게 시간과 날자를 얻을 수 있다.
날짜 객체를 생성할 때는 new 연산자 다음에 Date생성자를 쓴다.
var rightNow = new Date(); console.log(rightNow); // 2019-02-18T00:45:06.562Z
let rightNow = new Date(); // 2020-03-27T10:31:38.649Z let year = rightNow.getFullYear(); // 2020 let month = rightNow.getMonth()+1; // 3 // (getMonth 함수로 값을 받을 때, 현재 달보다 1 작은 값이 반환된다) let date = rightNow.getDate(); // 29 let day = rightNow.getDay();// 0 let currentHour = rightNow.getHours(); // 21 let currentMin = rightNow.getMinutes(); // 34
getTime 메서드는 날짜의 밀리초 표현을 반환
기준 일자: 1970년 1월 1일
let rightNow = new Date(); let time = rightNow.getTime(); // 1585485456483
현재는 1585485456483를 반환 / 1970년 1월 1일로부터 1585485456483 밀리초가 지났다는 의미
getTime 함수로 반환된 숫자를 비교하여 더 과거를 판단할 수 있다. (값이 더 작으면 과거)
특정 날짜를 매개변수로 넘겨주면, 해당 날짜의 Date를 반환 받을 수 있다.
let date1 = new Date('December 17, 2019 03:24:00'); // 2019-12-16T18:24:00.000Z let date2 = new Date('2019-12-17T03:24:00'); // 2019-12-16T18:24:00.000Z let date3 = new Date(2019, 5, 1); // 2019-05-31T15:00:00.000Z
함수로 인자를 받아 현재 기준으로 해당 생일이 만으로 몇 살인지 계산
function getWesternAge(birthday) { let age; let today = new Date(); // 현재 날짜 객체 생성 let month = today.getMonth() + 1; // 현재 날짜의 월 let day = today.getDate(); // 현재 날짜의 일 let birth = new Date(birthday); // 생일 날짜 객체 생성 let bMonth = birth.getMonth() + 1; // 생일 날짜의 월 let bDay = birth.getDate(); // 생일 날짜의 일 age = today.getFullYear() - birth.getFullYear(); // 현재 년도 - 생일 년도 birth.setFullYear(today.getFullYear()); // 2020-06-21 (setFullYear() 메서드를 이용하여 날짜의 전체 연도를 설정 (현재 년도)) if (today < birth) { // 현재 월, 일이 생일 월, 일 보다 작을 때 (생일이 지나지 않았을 때) return age - 1; } else { // 현재 월, 일이 생일 월, 일 보다 클 때 (생일이 지났을 때) return age; } } getWesternAge('1989-06-21T00:45:06.562Z'); // 생일을 인자로 전해준다