javascript

javascript 데이터 타입

tues 2023. 10. 25. 00:40

강형 언어 

- 변수 선언시 데이터 타입을 지정하는 언어 

- 자바의 예 ->

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 표기법

- 자바스크립트의 객체와 배열을 표기하기 위한 리터럴
- 객체는 대부분의 언어가 object, record, struct, dictionary, hash table, map, 연상배열 등으로 구현
- 배열은 대부분의 언어가 array, vector, list, sequence 등으로 구현
- 통신에서 교환하는 데이터의 포맷으로 널리 사용됨

 

객체 표기법

- {속성명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);