개체와 해시의 차이점?
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 가이드라인을 따르면 비슷한 성능 향상을 얻을 수 있다.
기본적으로 발생하는 것은 다음과 같습니다.
- 속성을 즉시 추가하거나 삭제할 수 있는 동적 개체를 구현하기 위해 해시 테이블이 가장 간단한 솔루션이지만 속도 면에서 Java(랜덤 액세스...)의 일반 개체만큼 효율적이지 않습니다.
- V8에서는 오브젝트가 일반 오브젝트(특정 순서로 설정된 속성 세트 등)인지 해시 테이블인지를 몇 가지 전략을 바탕으로 추측하려고 합니다.처음에는 이것이 단순한 객체라고 가정하고, 새로운 속성이 생성될 때마다 객체의 새로운 구조가 생성되며, 그 위에 이전 구조가 복사되고 새로운 속성이 복사됩니다.오브젝트가 "어렵다"고 분류된 경우 - 쉿 테이블로 이동합니다.
- 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
'programing' 카테고리의 다른 글
타입 'JSX'에 속성이 존재하지 않는다고 타이프 스크립트가 불만을 제기합니다.React.createClass를 사용할 때 'Intelligent Elements'를 선택하십시오. (0) | 2023.03.27 |
---|---|
Springfox Swagger 2.0의 basePath를 변경하는 방법 (0) | 2023.03.22 |
@ComponentScan과 @Enable의 차이점은 무엇입니까?스프링 부트에서의 자동 설정 (0) | 2023.03.22 |
AJAX 호출에서 success() 또는 complete()를 사용합니다. (0) | 2023.03.22 |
웹 소켓으로 인해 Ajax/CORS가 사용되지 않게 되었습니까? (0) | 2023.03.22 |