연관 배열 대 자바 스크립트의 객체
내 스크립트에서 해시 테이블을 만들어야 할 필요가 있으며 Google에서 이것을 검색했습니다. 대부분의 사람들은 이러한 목적으로 JavaScript 개체를 권장합니다. 문제는 해시 테이블의 일부 키에 "."가 있다는 것입니다. 그들 안에. 연관 배열을 사용하여 이러한 키를 쉽게 만들 수 있습니다.
연관 배열이 왜 나쁜지 이해할 수 없습니다. 내가 본 사이트에서 가장 먼저 언급 된 것은 길이 속성입니다. 나는 해시를 사용한 Perl 배경에서 왔습니다. 가장 일반적인 용도는 키에서 값을 가져오고, 키가 있는지 확인하고, 키-값 쌍을 삭제하고, 키-값 쌍을 추가하는 것입니다. 이것이 내 일반적인 용도라면 연관 배열을 안전하게 사용할 수 있습니까?
JavaScript에서 객체는 연관 배열입니다 ... 객체에 대한 별도의 개념이 없습니다. '.'를 안전하게 사용할 수도 있습니다. 키 이름에 있지만 대괄호 표기법을 사용해서 만 값에 액세스 할 수 있습니다.
var foo = {}
foo['bar'] = 'test';
foo['baz.bin'] = 'value';
alert(foo.bar); // shows 'test'
alert(foo['baz.bin']); // shows 'value'
이미 사용하고 있고 작동한다면 안전합니다.
자바 스크립트에서 객체와 배열은 거의 똑같습니다. 배열에는 약간의 마법 기능 (길이 속성 자동 업데이트 등)과 배열에 적합한 프로토 타입 메소드가 있습니다. 또한 연관 배열을 사용하는 것보다 객체를 생성하는 것이 훨씬 쉽습니다.
var obj = {"my.key": "myValue"};
vs
var obj = [];
obj["my.key"] = "myValue";
따라서 배열 객체를 사용하지 말고 일반 객체 만 사용하십시오.
일부 기능 :
var obj = {}; //Initialized empty object
키-값 쌍 삭제 :
delete obj[key];
키가 있는지 확인하십시오.
key in obj;
키 값 얻기 :
obj[key];
키 값 쌍을 추가합니다.
obj[key] = value;
javascript 에는 내장 연관 배열 과 같은 것이 없기 때문입니다 . 그것이 나쁜 이유입니다.
실제로 다음과 같은 것을 사용할 때 :
theArray["a"] = "hello, world!";
"a"라는 속성을 만들고 값을 "hello, world!"로 설정하기 만하면됩니다. 이것이 길이가 항상 0이고의 출력 alert(theArray)
이 비어있는 이유 입니다.
도움이 되었기를 바랍니다!
실제로 "연관 배열"은 ECMAscript의 "배열 유사 객체"와 거의 동일합니다. 심지어 Arrays
단지 (여전히 백그라운드에서 문자열) 숫자 키하는 가지고 제외하고, ECMA 스크립트의 객체 .length
에서 일부 상속 방법과 함께 속성을 Array.prototype
.
따라서 perl 해시와 ECMAscript 객체는 유사하게 작동합니다. 점뿐만 아니라 다음과 같은 대괄호와 문자열을 사용하여 객체 속성에 액세스 할 수 있다는 것을 모를 수도 있습니다.
var myObj = { foo: 42 };
myObj.foo; // 42
myObj['foo']; // 42
알면 키를 사용할 수도 있습니다. .
var myObj = { };
myObj['hello.foo.world'] = 42;
물론 대괄호 표기법으로 만 해당 키에 액세스 할 수 있습니다.
원하는 경우 .
JS 개체 (일명 연관 배열)의 키 이름에 사용할 수 있으며 문제없이 허용됩니다. 사소한 단점은 점선 키로 바로 가기 표기법을 사용할 수 없다는 것입니다.
var x = {};
x['hello'] = 'there';
alert(x.hello);
완벽하게 허용되며 'there'가 포함 된 경고가 표시됩니다. 그러나 점으로 구분 된 이름을 사용하는 경우 :
var x = {};
x['this.is'] = 'sparta';
alert(x.this.is);
Javascript는 this
존재하지 않는 x 객체에 이름이 지정된 속성을 찾기 때문에 실패 합니다. this.is
속성 만 있습니다 .
연관 배열이 아니라 객체 일뿐입니다.
foo.bar; // Equivalent to...
foo["bar"]; // Looks like associative array.
For the sake of convenience of using data, there should be no difference between an object and an array. You can think it as an object or you can think it as an associative array. At the end, you can just think of everything as data.
For PHP, [ ] accepts 0, 1, or more items(array), and it is called an associative array. It is Json in PHP's coat:
$data = ["message"=>[ "id"=>405, "description"=>"Method not allowed.", "detail"=>[]], "object" => []];
For Javacript, { } accepts 0, 1, or more items(array), and it is called an object. This data format is Json:
data = {"message": { "id":405, "description":"Method not allowed.", "detail" : {}}, "object" : {}};
I just call them data. The simplest way to describe data is Json, or its variants.
참고URL : https://stackoverflow.com/questions/8067590/associative-array-versus-object-in-javascript
'program tip' 카테고리의 다른 글
히스토그램 아래의 직사각형 영역 최대화 (0) | 2020.12.03 |
---|---|
csv 데이터를 가져올 때 "UTF-8에서 잘못된 바이트 시퀀스"를 제거하는 방법 (0) | 2020.12.03 |
WebView 내에서 파일 다운로드 (0) | 2020.12.03 |
PHP에서 개인 상수가 가능합니까? (0) | 2020.12.03 |
Eclipse와 Vim의 간편한 통합? (0) | 2020.12.02 |