변수에 담을 수 있는 존재는 모두 "값"이라고 할 수 있다.
"값"들은 여러 가지 종류가 있고, 그 종류에 따라 7가지로 분류할 수 있다.
"(큰 따옴표) 혹은 '(작은 따옴표)가 붙지 않은 숫자는 숫자로 인식한다.
사칙연산 보다 좀 더 복잡한 연산도 지원한다.
Math.pow(3,2); // 9, 3의 2승
Math.round(10.6); // 11, 10.6을 반올림
Math.ceil(10.2); // 11, 10.2를 올림
Math.floor(10.6); // 10, 10.6을 내림
Math.sqrt(9); // 3, 3의 제곱근
Math.random(); // 0부터 1.0 사이의 랜덤한 숫자
값을 표기해주는 특별한 키워드(숫자)
-0
NaN
Infinity
-Infinity
0/0과 같은 연산의 결과로 만들어지는 특수한 데이터 형인데 숫자가 아니라는 뜻이다.
전역 객체의 속성이고, 최신 브라우저에서 NaN은 설정 불가, 쓰기 불가 속성이다.
Not-A-Number으로 숫자가 아님을 나타낸다. NaN의 초기값은 Number.NaN의 값과 같다.
function sanitise(x) {
if (isNaN(x)) { return NaN; }
return x;
}
console.log(sanitise('1')); // "1"
console.log(sanitise('NotANumber')); // NaN
NaN은 다른 모든 값과 비교(==, !=, ===, !==)했을 때 같지 않으며, 다른 NaN과도 같지 않다.
NaN의 판별은 Number.isNaN() 또는 isNaN()을 사용한다.
isNaN()과 Number.isNaN()의 차이
isNaN은 현재 값이 NaN이거나, 숫자로 변환했을 때 NaN이 되면 참을 반환
Number.isNaN은 현재 값이 NaN이어야만 참을 반환isNaN('hello world'); // true Number.isNaN('hello world'); // false
무한대를 나타내는 숫자값으로 전역 객체의 속성이고 전역 스코프의 변수다.
Infinity의 초기값은 Number.POSITIVE_INFINITY이고, Infinity(양의 무한대)는 다른 어떤 수보다 더 크다.
정수인지 판별후 true / false 값을 반환한다.
Number.isInteger(0); // true
Number.isInteger(1); // true
Number.isInteger(-100); // true
Number.isInteger(345363); // true
Number.isInteger(0.1); // false
Number.isInteger(Math.PI); // false
Number.isInteger(NaN); // false
Number.isInteger(Infinity); // false
Number.isInteger(-Infinity); // false
Number.isInteger('10'); // false
Number.isInteger(true); // false
Number.isInteger(false); // false
Number.isInteger([1]); // false
문자는 "(큰 따옴표) 혹은 '(작은 따옴표) 중의 하나로 감싸야 한다.
큰 따옴표로 시작하면 큰 따옴표로 끝나야하고, 작은 따옴표로 시작하면 작은 따옴표로 끝나야 한다.
문자열끼리 비교가 가능하다.
Number 객체 사용한다.
var myString = '123';
var myNum = Number(myString);
typeof myNum;
toString() 함수 사용한다.(숫자를 동등한 문자열로 변환)
var myNum = 123;
var myString = myNum.toString();
typeof myString;
escape(이스케이프) 문자란 어떤 한 문자를 코드가 아닌 문자열로 만들어주는 문자입니다. 역슬래시 ( \ )를 문자 바로 앞에 작성함으로써 코드가 아닌 문자열로 인식하게 한다.
문자열을 결합하려면 숫자 연산자와 동일하게 더하기(+) 연산자를 사용한다.(변수와 문자열을 혼합할 수도 있음)
alert("coding"+" everybody"); // 결과 : coding everybody
alert("coding everybody".length) // 결과 : 16
concat()
매개변수로 전달된 모든 문자열을 호출 문자열에 붙인 새로운 문자열을 반환한다.var str1 = 'Hello'; var str2 = 'World'; console.log(str1.concat(' ', str2)); // expected output: "Hello World" console.log(str2.concat(', ', str1)); // expected output: "World, Hello"
.length property 문자의 길이를 구할 때 문자 뒤에 붙임
Index 위치로 접근할 수 있다.
대괄호 표기법을 이용해서 변수명 끝에 대괄호를 붙이고 안에는 구하고 싶은 문자의 숫자를 포함시킨다.(0부터)
dataType[0];
indexOf(), slice() 사용한다.
toLowerCase()와 toUpperCase()는 문자열을 가져와 모두 대문자나 소문자로 변경한다.
Index를 이용해 특정 문자열을 찾아 문자를 변경할 수 없다.
replace() 를 통해 다른 하위 문자열로 바꿀 수 있다.
var dataType = 'hello';
dataType[1] = 'o';
console.log(dataType); // "hello"
dataType.replace("e", "test") // "htestllo"
// .replace('원래 문자','변경될 문자');
단두가지 true와 false만 존재한다. 조건문에서 핵심적인 역할을 담당한다.
alert(true == 1); //true
alert(true === 1); //false
alert(true == '1'); //true
alert(true === '1'); //false
alert(0 === -0); //true
alert(NaN === NaN); //false
조건문에 사용될 수 있는 데이터 형이 꼭 Boolean만 되는 것은 아니다. 관습적인 이유로 0는 false 0이 아닌 값은 true로 간주된다.
아래 코드는 선호하지 않는다.
if(0){ alert(1) }
if(1){ alert(2) } // 2
값이 없다는 의미로, 값이 없음을 명시적으로 표시한 것이다.
있다가 없어진 값일 수도 있고, 애초에 없을 수도 있다.
없는 값을 나타내고 싶을 때 프로그래머는 undefined를 넣지 말고 null값을 입력한다.
프로그래머가 값을 없는 상태로 의도적으로 부여한 상황
typeof(null); // "object"
값이 없다라고도 할 수도 있지만 정확하게는 값이 정의되어 있지 않다는 의미다.(그냥 값이 없음)
어떤 변수의 값이 아직 할당되어지지 않았음을 의미한다.
직접 undefined를 할당하는 경우는 없어야 한다.
프로그래머가 의도하지 않은 상황
자바스크립트에서는 모든 것이 객체이다. 일반 객체 뿐 아니라, 함수(Function)와 배열(Array)도(특수한 객체) 객체에 포함된다.
객체는 하나의 그룹 안에 관계되는 기능(함수)들을 모아놓은, 관련된 데이터와 함수 집합이자 배열과 유사한 역활을 한다.
var obj = {
a : {
bb: 'bbb',
cc: 'ccc'
},
d: function() { ... }
}
변수에 중괄호({})로 감싼 덩어리가 객체이고, 선호/권장한다.(캡슐화)
객체 안의 콤마(쉼표 ,)로 구분되는 것들을 객체의 속성(Property)라고 부른다.
중괄호({})를 사용하여 만든 객체를 객체 리터럴(Object Literal)이라고 부른다.
객체 리터럴을 사용해서 객체를 생성하는 것은 연속된 구조체나 연관된 데이터를 일정한 방법으로 변환하고자 할 때 많이 쓰이는 방법이다.
ES6에서 추가되었다.
🔎 참고자료 🔎
- MDN
- 생활코딩
- PoiemaWeb
- javascript info
- 코어 자바스크립트
- 러닝 자바스크립트
- 인사이드 자바스크립트