JavaScript 기본 심법 데이터 형식
4699 단어 js 데이터 형식
나중에 메모리 의 지식 을 점점 알 게 되 었 는데,이 부분 은 여전히 매우 이해 할 필요 가 있다.
기본 데이터 구조
창고.
스 택 은 한 단락 에 만 삽입 하거나 삭제 할 수 있 는 선형 표 로 선진 적 인 데이터 구조 입 니 다.
쌓다
더 미 는 해시 알고리즘 을 기반 으로 한 데이터 구조 입 니 다.
대열
대기 열 은 선진 적 인 선 출(FIFO)데이터 구조 이다.
JavaScript 의 데이터 형식 저장
자 바스 크 립 트 는 데이터 형식 을 기본 데이터 형식 과 인용 데이터 형식 으로 나 누 는데 그 중 하 나 는 저장 위치 가 다르다 는 것 이다.
기본 데이터 형식
자 바스 크 립 트 의 기본 데이터 형식 은 다음 과 같 습 니 다.
참조 데이터 형식
JavaScript 의 참조 데이터 형식 은 다음 과 같 습 니 다.
스 택 메모리 에 주 소 를 저장 한 것 으로 이해 할 수 있 습 니 다.이 주 소 는 메모리 의 실제 값 과 관련 이 있 습 니 다.
도해
지금,우 리 는 몇 개의 변 수 를 설명해 봅 시다.
var name="axuebin";
var age=25;
var job;
var arr=[1,2,3];
var obj={age:25};
다음 그림 을 통 해 데이터 형식 이 메모리 에 저 장 된 상황 을 표시 할 수 있 습 니 다.이 때
name
,age
,job
세 가지 기본 데이터 형식 은 스 택 메모리 에 직접 존재 하 는 것 이 고,arr,obj 는 스 택 메모리 에 하나의 주소 만 저장 하여 메모리 에 대한 인용 을 표시 합 니 다.복제 하 다.
기본 데이터 형식
기본 데이터 형식 에 대해 복 사 를 하면 시스템 은 자동 으로 새로운 변 수 를 스 택 메모리 에 새 값 을 할당 하여 쉽게 이해 할 수 있 습 니 다.
참조 데이터 형식
배열,대상 과 같은 인용 데이터 형식 에 있어 서 복사 할 때 차이 가 있 습 니 다.
시스템 도 자동 으로 새로운 변 수 를 스 택 메모리 에 값 을 할당 하지만 이 값 은 하나의 주소 에 불과 합 니 다.복 사 된 변 수 는 기 존 변수 와 같은 주소 값 을 가지 고 메모리 의 같은 대상 을 가리 키 는 것 이다.
만약 에 보 여 준다 면 var obj Copy=obj 를 실행 한 후에 obj 와 obj Copy 는 같은 주소 값 을 가지 고 메모리 의 같은 실제 대상 을 실행 합 니 다.
이게 뭐 가 달라 요?
내 가 obj 나 obj Copy 를 수정 할 때 다른 변수의 변 화 를 일 으 킬 것 이다.
왜?
왜 기본 데이터 형식 은 스 택 에 존재 하고 인용 데이터 형식 은 쌓 여 있 습 니까?
js 메모리 할당 이해
원시 값 과 인용 값
ECMAScript 에서 변 수 는 두 가지 유형의 값,즉 원시 값 과 인용 값 을 저장 할 수 있 습 니 다.
원본 값 은 원본 데이터 형식(기본 데이터 형식)을 나타 내 는 값,즉 Undefined,Null,Number,String,Boolean 형식 이 나타 내 는 값 을 말 합 니 다.
인용 값 이란 복합 데이터 형식의 값,즉 Object,Function,Array,사용자 정의 대상 등 을 말한다.
창고 와 더미
원시 값 과 인용 값 에 대응 하 는 두 가지 구조의 메모리 즉 창고 와 더미
스 택 은 후진 에서 먼저 나 온 데이터 구조 로 자바 script 에서 Array 를 통 해 스 택 의 행 위 를 모 의 할 수 있 습 니 다.
원본 값 은 창고 에 저 장 된 간단 한 데이터 입 니 다.즉,그들의 값 은 변수 가 접근 하 는 위치 에 직접 저 장 됩 니 다.
더 미 는 해시 알고리즘 을 기반 으로 한 데이터 구조 로 자바 script 에서 인용 값 은 더 미 를 저장 합 니 다.
인용 값 은 더미 에 저 장 된 대상 이다.즉,변수 에 저 장 된 값(즉 대상 을 가리 키 는 변수,창고 에 저 장 된 변수)은 포인터 로 더미 에 저 장 된 실제 대상 을 가리킨다.
예:var obj=new Object();obj 는 스 택 에 저 장 됩 니 다.new Object()대상 을 가리 키 고 new Object()는 더미 에 저 장 됩 니 다.
그런데 왜 인용 값 은 더미 에 넣 어야 합 니까?원본 값 은 창고 에 넣 어야 합 니 다.모두 메모리 에 있 지 않 습 니까?왜 같이 두 지 않 습 니까?이제 문제 의 답 을 찾 아 보 자!
우선 코드 를 살 펴 보 겠 습 니 다.
function Person(id,name,age){
this.id = id;
this.name = name;
this.age = age;
}
var num = 10;
var bol = true;
var str = "abc";
var obj = new Object();
var arr = ['a','b','c'];
var person = new Person(100," ",25);
그리고 메모리 분석 도 를 살 펴 보 자.변수 num,bol,str 는 기본 데이터 형식 입 니 다.그들의 값 은 스 택 에 직접 저장 되 어 있 습 니 다.obj,person,arr 는 복합 데이터 형식 입 니 다.그들의 인용 변 수 는 스 택 에 저장 되 어 있 고 쌓 여 있 는 실제 대상 을 가리 키 고 있 습 니 다.
위의 그림 에서 알 수 있 듯 이 우 리 는 쌓 여 있 는 데 이 터 를 직접 조작 할 수 없다.즉,우 리 는 대상 을 직접 조종 할 수 없 지만 스 택 에서 대상 에 대한 인용 을 통 해 대상 을 조작 할 수 있다.마치 우리 가 리모컨 을 통 해 텔레비전 을 조작 하 는 것 처럼 이 텔레비전 자체 에 제어 버튼 이 없다 는 것 과 차이 가 있다.
지금 우 리 는 왜 인용 값 을 더미 에 넣 어야 하 는 지,원시 값 을 창고 에 넣 어야 하 는 지 에 대한 질문 에 대답 합 니 다.
한 마디 만 기억 해라.에 너 지 는 균형 을 지 키 는 것 이다.시간 이 공간 을 바 꾸 고 공간 이 시간 을 바 꾸 는 문제 일 뿐이다.
스 택 보다 크 고 스 택 은 쌓 아 올 리 는 연산 속도 가 빠 르 며 대상 은 복잡 한 구조 이 며 자 유 롭 게 확장 할 수 있 습 니 다.예 를 들 어 배열 은 무한 확장 이 가능 하고 대상 은 자 유 롭 게 속성 을 추가 할 수 있 습 니 다.그들 을 더미 속 에 두 는 것 은 창고 의 효율 에 영향 을 주지 않 기 위해 서 이다.인용 을 통 해 더미 속 의 실제 대상 을 찾 아 조작 하 는 것 이다.간단 한 데이터 형식 에 비해 간단 한 데이터 형식 은 비교적 안정 적 이 고 작은 메모리 만 차지한다.간단 한 데이터 형식 을 쌓 지 않 는 것 은 인용 을 통 해 쌓 인 실제 대상 을 찾 는 데 시간 이 걸 리 기 때 문 입 니 다.이 종합 원 가 는 창고 에서 실제 값 을 직접 얻 는 원가 보다 훨씬 큽 니 다.그래서 간단 한 데이터 형식의 값 은 스 택 에 직접 저 장 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS 대상 과 JSON 상호 전환,New Function(),foreach(),DOM 이벤트 흐름 등 js 개발 기반 소결8./와%연산 자: 9.프로 토 타 입 체인(Prototype Chaining)과 계승:프로 토 타 입 체인 은 ECMAScript 에서 계승 을 실현 하 는 방식 이다.JavaScript 의 계승 체 제 는 명확 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.