programing

개체와 해시의 차이점?

i4 2023. 3. 22. 20:45
반응형

개체와 해시의 차이점?

JavaScript에서 객체와 해시의 차이점은 무엇입니까?둘 중 하나를 어떻게 만들고 다른 하나를 어떻게 만드십니까? 그리고 왜 신경을 쓰십니까?다음 코드 예시와 차이가 있습니까?

var kid = {
 name: "juni",
 age: 1
}

그리고:

var kid = new Object();
kid.name = "juni";
kid.age = 1;

그리고:

var kid = new Object();
kid["name"] = "juni";
kid["age"] = 1;

제가 설명해야 할 다른 코드 예시는 없나요?

여기서 핵심 질문객체와 해시의 차이점은 무엇입니까?

그냥 아무것도 없어요.이 세 가지는 말 그대로 똑같다.

서로 바꿔 사용할 수 있는 다른 표기법 체계입니다.괄호 구문을 사용하는 경우는 많이 있습니다.[ ]예를 들어 변수가 있는 객체를 참조할 때 보다 매력적일 수 있습니다.

var temp  = "kid";
var obj = new Object();
obj[temp] = 5; // this is legal, and is equivalent to object.kid
obj.temp = 5; // this references literally, object.temp

자바나 C#과 같은 다른 언어에서는 해시 테이블/해시 맵의 키로서 임의의 오브젝트(문자열이나 숫자뿐만 아니라)를 사용할 수 있습니다.JavaScript에서는 그렇지 않습니다.키는 단순히 문자열로 변환됩니다.

var h = {}, k = {};
h[k] = "One";
alert( h[ "[object Object]" ] ); // Alerts "One"

임의의 오브젝트를 키로 사용하면 편리합니다.이 경우 jshashtable과 같은 것을 사용할 수 있습니다.

면책사항:jshashtable이라고 썼어요.

실제로 JavaScript의 모든 객체는 해시입니다.이것은 개체의 속성 및 메서드에 대한 해시입니다.사실 Javascript의 모든 것은 해시(이름/값 쌍 목록)입니다.

객체의 메서드, 속성을 호출하거나 변수를 참조할 때마다 내부 해시 조회를 수행합니다.

당신의 샘플에는 어떤 차이도 없습니다.모두 명명된 속성을 가진 개체입니다.지금까지 이러한 속성을 작성/참조하는 다양한 방법을 보여드렸습니다.

둘 다 똑같아요.

서로 바꿔서 사용할 수 있습니다.

다 똑같은 것 같아요.세 번째 버전은 동적 속성 이름과 함께 사용할 수 있습니다.첫 번째 것이 쓰기 가장 짧습니다.

둘 다 똑같아요.처럼[]그리고.new Array()똑같아요.

JavaScript의 핵심 유형에 대한 자세한 내용은 MDC Core JavaScript 1.5 참조를 참조하십시오.

만약 당신이 증거를 원한다면{}와 같다new Object():

Object.prototype.helloWorld = function () { alert('Foo!'); };
var a = new Object();
var b = {};
a.helloWorld();
b.helloWorld();

경고 ACTUNG Avertisement!!!절대, 절대 할당하지 않습니다.prototype의 특성Object제품 코드를 입력합니다.전체 네임스페이스가 오염됩니다.

엄밀히 말하면, 그들은 같다.코드를 작성하면 쉽게 할 수 있습니다.myobject['someproprty' + 'somethingElseConcatenated] 표기법 표기법을 할 수 myobject.someproperty그게 네가 할 수 있는 전부야

중 한 인 Douglas ECMAscript를 하지 말 합니다.var a = new Object()어떤 이유에서인지 구문을 잘 못 알아들었어요어쨌든, 만약 당신이 그것에 관심이 있다면 그의 발표를 볼 가치가 있다. (그것은 여러 부분으로 구성되어 있으며, 첫 번째 것은 여기 http://video.yahoo.com/watch/111593/1710507)에 있다.)

모든 엔진(브라우저)은 다르게 구현하지만 크롬의 V8에 초점을 맞추자(제가 1년 전에 대부분의 최신 브라우저에서 수행한 성능 테스트에 따르면 v8 가이드라인을 따르면 비슷한 성능 향상을 얻을 수 있다.

기본적으로 발생하는 것은 다음과 같습니다.

  1. 속성을 즉시 추가하거나 삭제할 수 있는 동적 개체를 구현하기 위해 해시 테이블이 가장 간단한 솔루션이지만 속도 면에서 Java(랜덤 액세스...)의 일반 개체만큼 효율적이지 않습니다.
  2. V8에서는 오브젝트가 일반 오브젝트(특정 순서로 설정된 속성 세트 등)인지 해시 테이블인지를 몇 가지 전략을 바탕으로 추측하려고 합니다.처음에는 이것이 단순한 객체라고 가정하고, 새로운 속성이 생성될 때마다 객체의 새로운 구조가 생성되며, 그 위에 이전 구조가 복사되고 새로운 속성이 복사됩니다.오브젝트가 "어렵다"고 분류된 경우 - 쉿 테이블로 이동합니다.
  3. v8이 너무 많은 "실수"를 감지하고 모든 것을 해시 테이블로 이동하면 성능이 저하됩니다(따라서 모든 멤버 또는 구조를 json에 삽입하는 생성자를 사용해야 하는 이유).

다음 링크를 참조하십시오.https://developers.google.com/v8/design#prop_access

www.quora.com/Are-JavaScript-Objects-implemented-as-HashTables-Is-key-value-access-O-1

jayconrod.com/posts/52/a-tour-of-v8-object-representation

또한 매우 좋은 강의: https://www.youtube.com/watch?v=UJPdhx5zTaw

도움이 됐으면 좋겠는데...

사실 자바스크립트에는 '해시테이블'이나 '해시맵'이라고 불리는 것이 없습니다.JavaScript의 객체는 '해시'처럼 동작합니다(JavaScript의 객체는 단순히 키/값 속성입니다). 따라서 혼동을 일으킵니다.

언급URL : https://stackoverflow.com/questions/1143498/difference-between-an-object-and-a-hash

반응형