반응형
▼ 느슨한 타입(loosely typed)의 동적(dynamic) 언어
- 자바스크립트의 변수는 자료형에 관계없이 모든 데이터일 수 있다.
- 따라서 변수는 어떤 순간에 문자열일 수 있고 다른 순간엔 숫자가 될 수도 있다.
→ JS는 자료의 타입은 있지만 변수에 저장되는 값의 타입은 언제든지 바꿀 수 있는 언어이다.
→ 문제점과 보완
- 1 == '1'이 True가 되는 마법..
- 문자열 "1e22"는 숫자 1의 22승이 되는 마법..
- 타입을 지정해주는 타입스크립트(typescript)를 사용하자...!
▼ Javascript의 형변환
- 함수와 연산자에 전달되는 값은 대부분 적절한 자료형으로 자동 변환되며, 이런 과정을 "형 변환(type conversion)"이라고 한다.
- 암시적 변환
- alert가 전달받은 값의 자료형과 관계없이 이를 문자열로 자동 변환하여 보여주는 것
- 수학 관련 연산자가 전달받은 값을 숫자로 변환하는 경우
- 산술 연산자 더하기(+)의 경우 숫자보다 문자열이 우선시 되므로, 숫자 + 문자 => 문자
- 더하기 제외 다른 산술 연산자( -, *, /, %)는 숫자형이 우선시 되므로, 숫자 + 문자 => 숫자
- 명시적 변환
- String(value) 함수를 호출해 전달받은 값을 문자열로 변환
- Number(value) 함수를 사용하여 주어진 값(value)을 숫자형으로 변환
- Object(), Number(), String(), Boolean() 등
▼ ==, ===
- == : Equal Operator로 값만 비교
- 1 == '1' : true
- null == undefined : true
- true == 1 : true
- 0 == "" : true
- NaN == NaN : false
- === : Strict Equal Operator로 값과 값의 종류(Data type)를 비교
- 1 === '1' : false
- null === undefined : false
- true === 1 : false
- 0 === "" : false
- NaN == NaN : false
※ 배열과 객체의 경우
var a = [1,2,3];
var b = [1,2,3];
console.log(a == b); // false
console.log(a === b); // false
- 배열을 할당할때, 각 변수는 각 메모리의 주소를 참조한다.
- 두 변수 a, b의 값과 데이터 타입이 같지만, 이와 상관없이 참조하는 메모리의 주소가 다르기 때문에 두 a, b는 같지 않다.
var a = [1,2,3];
var b = [1,2,3];
var c = b;
console.log(b === c); // true
console.log(b == c); // ture
- 새로운 변수 c에 변수 b를 할당해주면, 변수 c도 b가 참조하는 같은 메모리의 주소를 참조하게 되어, 두 변수 c, b는 같다.
- 이때, c, b의 값과 데이터 타입이 같기 때문에, ==와 ===의 결과값이 동일하다.
- 객체도 마찬가지.
▼ undefined와 null
- null : '존재하지 않는(Nothing)', '비어 있는(empty)', '알 수 없는(unknown)'
- null의 자료형은 null
- undefined : 값이 할당되지 않은 상태
- undefined의 자료형은 undefined
- 변수는 선언했지만, 값을 할당하지 않았다면 undefined가 자동으로 할당됨.
- 변수는 선언했지만, 실제 빈값이라 임의로 비어둘 경우 null을 할당해줘야 undefined와 헷갈리지 않음.
let age = null;
let name;
console.log(age); // null
console.log(name); // undefined
[참고] https://ko.javascript.info/types
자료형
ko.javascript.info
[참고] https://ko.javascript.info/type-conversions
형 변환
ko.javascript.info
자바스크립트의 형변환은 두가지다
자바스크립트는 타입이 매우 유연한 언어이다. 때문에 때로는 자바스크립트 엔진이 필요에 따라 ‘암시적변환’ 을 혹은 개발자의 의도에 따라 ‘명시적변환’ 을 실행한다. 그렇다면 형변환
medium.com
[참고] https://steemit.com/kr-dev/@cheonmr/js-operator
[JS Operator] ==와 ===의 차이점 — Steemit
==는 Equal Operator이고, ===는 Strict Equal Operator이다. ==는 a == b 라고 할때, a와 b의 값이 같은지를 비교해서, 같으면 true, 다르면 false라고 한다.(값만 같으면 true이다.) ===는 Strict, 즉 엄격한 Equal Ope
steemit.com
반응형
'나의 개발일지 > javascript' 카테고리의 다른 글
javascript 변수 var, let, const의 작동 원리 (1) | 2024.07.20 |
---|---|
javascript class this bind 문제 - this가 왜 undefined로 나오지? (0) | 2024.02.25 |
[javascript | JS] 화살표 함수와 this binding (0) | 2023.07.12 |
[javascript | JS] var, let, const 변수의 생성과정, 호이스팅, TDZ, 스코프, 클로저와 은닉화(캡슐화) (0) | 2022.07.19 |
[javascript | JS] setTimeout()을 통해 호출 스택, 이벤트 루프 알아보기 (0) | 2022.06.29 |