개체의 키로 자바 스크립트 기능을 사용하는 것이 완전히 유효합니까?자바 스크립트 기능을 객체의 키로 사용하는 것이 완전히 유효합니까?
다음 작품,하지만 난 모르겠어요 그것의 100 % (ECMA 또는 무엇이든 몸이에 적용)을 준수
var f = function(){
};
var obj = {};
obj[f] = "a";
console.log(obj[f]);
개체의 키로 자바 스크립트 기능을 사용하는 것이 완전히 유효합니까?자바 스크립트 기능을 객체의 키로 사용하는 것이 완전히 유효합니까?
다음 작품,하지만 난 모르겠어요 그것의 100 % (ECMA 또는 무엇이든 몸이에 적용)을 준수
var f = function(){
};
var obj = {};
obj[f] = "a";
console.log(obj[f]);
객체 키부터 그렇게 제로 이유가있다 ECMAscript의 경우 은 문자열 일 수 있습니다 (당분간 ECMAscript 262 Edition 3 및 5에서는 사양 별). 우리는 또한 객체 (내가 함수 참조에 대해 확실하지 않다)이 될 수WeakMaps 및 객체 키가 어디에
것들, ECMA 스크립트 6에 그러나 변경됩니다.
브라우저가 객체 키를 기능 구별로 구별 할 수 있다고하더라도, 분명히 의심스러운 동작이며 실험적 일 가능성이 높으며 지금 당장 사용하면 안됩니다.
작동하는 것처럼 보이지만 예상대로 작동하지 않을 수 있습니다.
var f = function(a) { return a; };
var obj = {};
obj[f] = 'abc';
console.log(JSON.stringify(obj));
//"{"function (a) { return a; }":"abc"}"
console.log(f.toString());
//"function (a) { return a; }"
var f2 = function (a) { return a; };
console.log(obj[f2]);
//"abc"
그래서, F, F2 함수와 다른 개체이지만 열을 주조 할 때 동일하다 :
함수는 키로서 사용될 때 열을 주조한다.
'f'와'f2'가 기본 코드가 동일하기 때문에 동일하게 동작한다면 종종 문제가되지 않습니다. –
클로저 인 경우 일 수 있습니다. 그것들은 같은 소스 코드를 가질 수 있고, 같은 외부 함수에 의해 생성 될 수 있지만, 클로저의 다른 값에 바인딩됩니다. 그래서 그들은 ** 다르게 행동 할 것이지만 똑같이 보입니다. – SWilk
var f = function(){
};
var obj = {};
obj[f] = "a";
console.log(obj['function(){\r\n\r\n}']);
실용 사례를 보려면 매우 궁금합니다. –
나는 그것이 일종의 무의미하다고 말하고 싶습니다. 이 함수는 toString을 사용하여'[ "function() {...}"]' – mplungjan
키를 생성하여 pub/sub-system에서 익명 가입자 함수를 추적/등록 해제합니다. 그래도 이것이 작업에 적합한 데이터 구조라고 확신하지는 못합니다. –