- 자바스크립트(JavaScript)는 객체(object) 기반의 스크립트 언어입니다.
- HTML로는 웹의 내용을 작성하고, CSS로는 웹을 디자인하며, 자바스크립트로는 웹의 동작을 구현할 수 있습니다.
- 자바스크립트는 주로 웹 브라우저에서 사용되나, Node.js와 같은 프레임워크를 사용하면 서버 측 프로그래밍에서도 사용할 수 있습니다.
- 자바스크립트는 객체 기반의 스크립트 언어입니다.
- 자바스크립트는 동적이며, 타입을 명시할 필요가 없는 인터프리터 언어입니다.
: 자바스크립트는 동적 타입 언어이기 때문에 런타임 속도는 빠르지만 타입 안정성이 보장되지 않습니다.
: 타입스크립트는 정적 타입 언어이기 떄문에 컴파일 시간이 조금 걸리지만, 안정성이 보장됩니다.- 자바스크립트는 객체 지향형 프로그래밍과 함수형 프로그래밍을 모두 표현할 수 있습니다.
※ C언어와 같은 언어는 소스 파일을 작성한 후, 해당 파일을 컴파일(compile)하여 사용자가 실행할 수 있는 실행 파일(.exe)로 만들어 사용합니다.
하지만 인터프리터 언어는 이러한 컴파일 작업을 거치지 않고, 소스 코드를 바로 실행할 수 있는 언어를 의미합니다.
자바스크립트는 웹 브라우저에 포함된 자바스크립트 인터프리터가 소스 코드를 직접 해석하여 바로 실행해 줍니다.
자바스크립트에서 값은 항상 문자열이나 숫자형 같은 특정한 자료형에 속합니다.
자바스크립트의 변수는 자료형에 관계없이 모든 데이터일 수 있습니다.
따라서 변수는 어떤 순간에 문자열일 수 있고 다른 순간엔 숫자가 될 수도 있습니다.
-> JavaScript의 변수는 어떤 특정 타입과 연결되지 않으며,
모든 타입의 값으로 할당 (및 재할당) 가능합니다.
- 이처럼 자료의 타입은 있지만 변수에 저장되는 값의 타입은 언제든지 바꿀 수 있는 언어를
‘동적 타입(dynamically typed)’ 언어라고 부릅니다.
let msg = "Spring";
msg = 7777;
- 숫자형 – 정수, 부동 소수점 숫자 등의 숫자를 나타낼 때 사용합니다. 정수의 한계는 ±253 입니다.
- bigint – 길이 제약 없이 정수를 나타낼 수 있습니다.
- 문자형 – 빈 문자열이나 글자들로 이뤄진 문자열을 나타낼 때 사용합니다. 단일 문자를 나타내는 별도의 자료형은 없습니다.
: String 타입은 텍스트 데이터를 나타낼 때 사용합니다.
String은 16비트 부호 없는 정수 값 "요소"로 구성된 집합으로, 각각의 요소가 String의 한 자리를 차지합니다. 첫 번째 요소는 인덱스 0에, 그 다음 요소는 인덱스 1, 그 다음은 2, ...입니다. String의 길이는 그 안의 요소 수와 같습니다.- 불린형 – true, false를 나타낼 때 사용합니다.
- null – null 값만을 위한 독립 자료형입니다. null은 알 수 없는 값을 나타냅니다.
- undefined – undefined 값만을 위한 독립 자료형입니다. undefined는 할당되지 않은 값을 나타냅니다.
- 객체형 – 복잡한 데이터 구조를 표현할 때 사용합니다.
- 심볼형 – 객체의 고유 식별자를 만들 때 사용합니다.
※ typeof 연산자는 피연산자의 자료형을 알려줍니다.
typeof x 또는 typeof(x) 형태로 사용 : 피연산자의 자료형을 문자열 형태로 반환합니다.
null의 typeof 연산은 "object"인데, 이는 언어상 오류입니다. null은 객체가 아닙니다.
‘존재하지 않는(nothing)’ 값, ‘비어 있는(empty)’ 값, ‘알 수 없는(unknown)’ 값
※ 자바스크립트의 null은 자바스크립트 이외 언어의 null과 성격이 다릅니다. 다른 언어에선 null을 '존재하지 않는 객체에 대한 참조’나 '널 포인터(null pointer)'를 나타낼 때 사용합니다.
let age = null;
값이 할당되지 않은 상태’를 나타낼 때 사용합니다.
변수는 선언했지만, 값을 할당하지 않았다면 해당 변수에 undefined가 자동으로 할당됩니다.
let age;
alert(age); // 'undefined'가 출력됩니다.
- ==
: Equality operator
: It checks tow operands are equal or not
: 변수 값을 기반으로 유형을 수정함 (서로 다른 유형의 두 변수의 [값]을 비교)
- ===
: Strict equality operator.
: It checks two operands are identical or not
: 변수 유형을 고려 ([값 & 자료형] 이 동일한 경우)
자바스크립트는 타입이 매우 유연한 언어로 (Dynamic typing: dynamically type language - Runtime에서 type이 정해짐)
필요에 따라 ① 암시적 변환 또는 ② 명시적변환 (개발자의 의도에 따라) 진행한다.
- 산술연산자를 통해 암시적 변환이 가능하다.
: 더하기(+) 연산자는 숫자보다 문자열이 우선시 되기때문에, 숫자형이 문자형을 만나면 문자형으로 변환하여 연산된다. (문자 > 숫자)
number + number // number
number + string // string
string + string // string
string + boolean // string
number + boolean // number
50 + 50; //100
100 + “점”; //”100점”
“100” + “점”; //”100점”
“10” + false; //”100"
99 + true; //100
타입을 변경하는 기본적인 방법은
Object(), Number(), String(), Boolean()
와 같은 함수를 이용한다.
Number(“12345”); //12345
Number(“2”*2); //4
parseInt(“27”) //27
parseInt(0033); //27
parseInt(0x1b); //27
parseInt(“ 2”); //2
parseInt(“ 2ㅎ”); //2
parseInt(“ ㅎ2”); //NaN
parseFloat(“!123”); //NaN
parseFloat(“123.123456”); //123.123456
parseInt(“123.123456”); //123
parseFloat(“ 123.123456”); //123.123456
parseFloat(“ a123.123456”); //NaN
String(123); //”123"
String(123.456); //”123.456"
var trans = 100;
trans.toString(); //”100"
trans.toString(2); //”1100100"
trans.toString(8); //”144"
0
으로 길이를 맞춘 문자열을 반환한다.var trans = 123.456789;
var roundOff = 99.987654;
trans.toFixed(); //”123"
trans.toFixed(0); //”123"
trans.toFixed(2); //”123.46"
trans.toFixed(8); //”123.45678900"
Boolean(100); //true
Boolean(“1”); //true
Boolean(true); //true
Boolean(Object); //true
Boolean([]); //true
Boolean(0); //false
Boolean(NaN); //false
Boolean(null); //false
Boolean(undefined); //false
Boolean( ); //false
- type을 잘못 작성한 에러 찾는데 어려움이 있음
: 자바스크립트라는 언어는 해석하고 사용하기 위해서는 노드나 브라우저가 필요하다는 고유한 특수성 때문에, 인터프리터 언어로 여겨지기도 합니다. 실제로 사소한 오타 에러도 브라우저나 노드에 띄워서야 확인 가능함
: 직접 브라우저에 펼쳐보고 직접 렌더링이 된 후에 콘솔로 오류를 확인해야 함
- 자바스크립트에서 정적 타입 체크와 강력한 문법을 추가한 컴파일 언어이기 때문에 컴파일 단계에서 보다 더 많은 것을 감지해 줍니다. 텍스트 편집기 + 자동완성 기능 제공으로만 사용하던 IDE가(ex) vscode가) 감지가능
: 오타 감지와 문법 체크는 물론이며, 타입 체크가 올바로 이루어지지 않거나, 무조건 null이나 undefined로 떨어지는 객체를 감지 등
개발자 간의 커뮤니케이션에서 발생하는 오차를 줄일 수 있음 : 많은 API 명세서가 오가는 대형 프로젝트에서 유용!
※ 참고사이트
JavaScript 기초
JavaScript 자료형
JavaScript 타입과 자료구조
형변환
자바스크립트 문제점