강형 언어
- 변수 선언시 데이터 타입을 지정하는 언어
- 자바의 예 ->
String name = "홍길동";
name = 25; //에러
int age = 30;
약형 언어
- 변수 선언시 데이터 타입을 지정하지 않는 언어
- 값에 따라서 자동으로 데이터 타입이 결정됨
- 자바스크립트의 예
var name = "홍길동";
name = 25; //다른 타입으로 재할당 가능
var age = 30;
기본 타입
- 숫자
- 문자열
- 논리값(Boolean)
- null
- undefined
- Bitlnt
- Symbol
참조 타입
- 객체(Object)
(배열, 함수, 날짜, 정규표현식)
// Number
var num = 100;
var floatNum = 3.14;
// String
var s1 = "single quote";
var s2 = "double quote";
// Boolean
var b1 = true;
var b2 = false;
// undefined
var emptyVal;
// null
var nullVal = null;
console.log(num, floatNum, s1, s2, b1, b2, emptyVal, nullVal);
console.log(
typeof num,
typeof floatNum,
typeof s1,
typeof s2,
typeof b1,
typeof b2,
typeof emptyVal,
typeof nullVal
);
콘솔창 출력 >

숫자
- 64비트 부동소수점 방식
- 정수, 실수, 음수, 양수 구별 없음
- var temp =15;
- var temp = 15.3;
문자열
- 큰 따옴표나 작은 따옴표 안에 기술
- var name = "김철수";
- var name = '김철수';
논리값
- 참 또는 거짓 둘 중 하나의 값을 가지는 데이터
undefined
- 값이 없을 나타냄
- 값이 할당되지 않은 변수에 값 모두 undefined로 지정됨
null
- 값이 없음을 중요함
- 개발자가 명시적으로 값이 비어있음을 지정
- 데이터 타입은 object가 된다
- var nullVar = null;
Object
- key-value 쌍의 데이터 집합(속성, property)
- 속성의 값으로 모든 데이터 타입 지정 가능
- 값으로 함수가 지정된 속성을 메소드라고 함
- 여러개의 속성을 포함할 수 있음
객체생성
- Object 생성자 함수로 생생후 속성과 기능 부여
- 객체의 속성과 기능에 접근할 때는 dot연산자를 이용하거나 ['속성명'] 표기사용
var foo = new Object();
foo.name = "lee";
foo["age"] = 30;
foo.job = "student";
foo["married"] = false;
console.log(foo["name"], foo.age, foo.job, foo["married"]);
console.log(typeof foo, foo);
콘솔창 출력 >

var foo = {
name: "lee",
age: 35,
job: "teacher",
married: true,
};
console.log(foo["name"], foo.age, foo.job, foo["married"]);
console.log(typeof foo, foo);
var strFoo = JSON.stringify(foo); //String타입으로 바꿈
console.log(typeof strFoo, strFoo, strFoo.age); //undefined로 출력됨
var objFoo = JSON.parse(strFoo); //json을 다시 문자로 변환해줌
console.log(typeof objFoo, objFoo, objFoo.age);
콘솔창 출력>

JSON 표기법
객체 표기법
- {속성명1: 속성값1, 속성명2: 속성명2,...}
배열 표기법
- [요소값1, 요소값2, 요소값3,...]
객체의 모든 속성 접근
- for in 구문
for(var prop in foo){
console.log(prop + ": " + foo[prop]);
}
객체의 속성 삭제
- delete 연산자
delete obj.name;
배열 요소 추가와 읽기
// 배열 생성
var arr = [300, 400];
// push: 배열의 마지막에 새로운 요소 추가.
arr[2] = 500;
arr.push(600);
// unshift: 배열의 처음에 새로운 요소 추가.
// arr[0] = 200;
arr.unshift(200);
arr.unshift(100);
// pop: 배열의 마지막 요소를 제거 후 반환
console.log(arr[arr.length-1]);
console.log(arr.pop());
console.log(arr.pop());
// shift: 배열의 첫번째 요소를 제거 후 반환
console.log(arr.shift());
console.log(arr.shift());
console.log(arr);
배열의 모든 요소 접근
var arr = [300, 400];
arr[2] = 500;
arr.unshift(200);
arr.unshift(100);
console.log(arr);
// 배열의 모든 요소 출력(for)
console.log("for");
for (var i = 0; i < arr.length; i++) {
console.log(i, arr[i]); //객체 이름 뒤에 속성명 지정하기
}
// 배열의 모든 요소 출력(for-in)
console.log("for-in");
for (var i in arr) {
console.log(i, arr[i]); //100 200 300 400 500
}
// 배열의 모든 요소 출력(for-of)
console.log("for-of");
for (var elem of arr) {
console.log(elem);
}
//인덱스가 필요없다면 가장 간편한 방법
// 배열의 모든 요소 출력(forEach())
console.log("forEach()");
arr.forEach(function (elem, i) {
console.log(i, elem);
});
참조타입의 특징
- 기본 데이터 타입은 실제 데이터를 저장하고 다룸
- 함수 호출방식: 값에 의한 호출(Call by Value)
- 참조형 데이터 타입은 실제 데이터가 있는 위치의 주소를 저장하고 다룸
- 함수 호출 방식: 참조에 의한 호출
배열의 메소
var arr = ["zero", "one", "three", "four"];
var arr2 = arr.splice(2, 0, "two");
console.log("arr", arr);
// splice(start[, deleteCount[, item1[, item2[, ...]]]])
// 배열의 요소를 삭제, 교체, 추가하고 제거한 요소를 담은 배열을 반환한다.
// deleteCount 생략시 마지막까지 제거
var arr2 = arr.splice(); //빈 배열 반환
// slice([begin[, end]])
// 배열의 begin부터 end까지(end 미포함) 요소를 복사해서 새로운 배열을 반환한다.
// begin 생략시 0
// begin이 음수일 경우 배열의 뒤에서 부터 복사
// end 생략시 마지막까지 복사
// 원본 데이터 유지
var arr2 = arr.slice(1, 3);
var arr2 = arr.slice(-3, -1);
console.log("arr", arr);
console.log("arr2", arr2);
console.log(arr == arr2);
'javascript' 카테고리의 다른 글
| javascript 공식 문서 학습 - Array.prototype.map() (0) | 2023.11.29 |
|---|---|
| 클로저 용법 - partial application (1) | 2023.10.27 |
| [프로그래머스 - javascript] 짝수와 홀수 (0) | 2023.10.27 |
| javascript의 함수 (0) | 2023.10.26 |
| javascript의 데이터 타입 ⅱ (1) | 2023.10.26 |