객체와 해시의 차이점은 무엇입니까?
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
Java 및 C #과 같은 다른 언어에서는 해시 테이블 / 해시 맵의 키로 모든 객체 (단지 문자열 또는 숫자가 아님)를 사용할 수 있습니다. JavaScript에서는 그렇지 않습니다. 키는 단순히 문자열로 변환됩니다.
var h = {}, k = {};
h[k] = "One";
alert( h[ "[object Object]" ] ); // Alerts "One"
임의의 객체를 키로 사용하는 것이 유용 할 수 있으며,이 경우 jshashtable 과 같은 것을 사용할 수 있습니다 .
면책 조항 : jshashtable을 작성했습니다.
사실 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();
!!! ACHTUNG AVERTISSEMENT 경고 !!! 절대로 프로덕션 코드 prototype
의 Object
유형 속성에 할당하지 마십시오 . 전체 글로벌 네임 스페이스를 오염시킬 것입니다.
기술적으로는 동일합니다. 코드를 작성할 때 쉽게 할 수 있습니다 myobject['someproprty' + 'somethingElseConcatenated]
. "점 표기법" myobject.someproperty
을 사용할 때는 할 수없는 일입니다.
ECMAscript의 저자 중 한 명인 Douglas Crockford는 var a = new Object()
제가 이해하지 못한 어떤 이유로 구문 을 사용하지 말 것을 제안 합니다. 어쨌든 관심이 있다면 그의 프레젠테이션을 볼 가치가 있습니다 (여러 부분으로 구성되어 있으며 첫 번째 부분은 http://video.yahoo.com/watch/111593/1710507 )
모든 엔진 (브라우저)은 다르게 구현하지만 크롬의 V8에 초점을 맞 춥니 다 (1 년 전에 대부분의 최신 브라우저에서 수행 한 성능 테스트를 기반으로 v8 지침을 따르면 유사한 성능 향상을 제공합니다).
기본적으로 발생하는 것은 다음과 같습니다.
- 즉석에서 속성을 추가하고 삭제할 수있는 동적 객체를 구현하려면 해시 테이블이 가장 간단한 솔루션이지만 자바 (랜덤 액세스 ...)의 일반 객체만큼 효율적이지 않습니다.
- What V8 does is trying to guess based on few strategies if your object is a regular object(has final set of properties set in specific order, etc...) or a hashtable. At first it assumes this is a simple object and each new property causes creation of a new structure of an object and copying of the old one on it plus the new property. If the object is categorize as "difficult" - it is moved to a hushtable.
- If v8 notices too many "mistakes" - it moves everything to hashtables - therefore you get poor performance (thats why you want to use constructors that init all of your members or structures inited in a json...)
Please see this links: 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
Also a very good lecture: https://www.youtube.com/watch?v=UJPdhx5zTaw
Hope it helps...
Actually, there is nothing called 'hashtable' or 'hashmap' in JavaScript. The object in JavaScript behaves like a 'hash' [objects in JavaScript are simply key/value properties] and hence the confusion.
ReferenceURL : https://stackoverflow.com/questions/1143498/difference-between-an-object-and-a-hash
'programing' 카테고리의 다른 글
++ * ptr ++는 C ++에서 정의되지 않은 동작입니까? (0) | 2020.12.30 |
---|---|
http 요청을 기반으로 웹 애플리케이션에서 모바일 브라우저를 감지하는 표준 방법 (0) | 2020.12.30 |
NetBeans에서 숨겨진 또는 보이지 않는 문자를 표시 / 표시하는 방법은 무엇입니까? (0) | 2020.12.30 |
중첩 함수는 Python에서 어떻게 작동합니까? (0) | 2020.12.30 |
foreach를 사용하지 않고 ArrayList를 강력한 형식의 제네릭 목록으로 변환하는 방법은 무엇입니까? (0) | 2020.12.29 |