객체의 키 이름으로 숫자 유형을 사용하면 항상 문자열로 변환되는 것 같습니다. 어쨌든 실제로 숫자로 저장할 수 있습니까? 정상적인 타입 캐스팅이 작동하지 않는 것 같습니다.
예:
var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);
Dir 출력 :
{
'1': 'a value'
}
내가 원하는 것은 다음과 같습니다.
{
1: 'a value'
}
조언?
답변
아니요, 불가능합니다. 키는 항상 문자열로 변환됩니다. 참조 속성 접근 자 문서를
속성 이름은 문자열이어야합니다. 즉, 문자열이 아닌 개체는 개체에서 키로 사용할 수 없습니다. 숫자를 포함한 문자열이 아닌 객체는 toString 메소드를 통해 문자열로 형변환됩니다.
> var foo = {}
undefined
> foo[23213] = 'swag'
'swag'
> foo
{ '23213': 'swag' }
> typeof(Object.keys(foo)[0])
'string'
답변
개체에서는 아니요,하지만 이 응용 프로그램에 Map이 매우 유용하다는 것을 알았습니다 . 여기에서 키 기반 이벤트 인 숫자 키에 사용했습니다.
onKeydown(e) {
const { toggleSidebar, next, previous } = this.props;
const keyMapping = new Map([
[ 83, toggleSidebar ], // user presses the s button
[ 37, next ], // user presses the right arrow
[ 39, previous ] // user presses the left arrow
]);
if (keyMapping.has(e.which)) {
e.preventDefault();
keyMapping.get(e.which)();
}
}
답변
ECMA-262-5에서 의도적으로 설계된 것처럼 보입니다.
속성 식별자 유형은 속성 이름을 속성 설명자와 연결하는 데 사용됩니다. 속성 식별자 유형의 값은 형식 (이름, 설명자)의 쌍입니다. 여기서 이름은 문자열이고 설명자는 속성 설명자 값입니다.
그러나 ECMA-262-3에는 이에 대한 명확한 사양이 없습니다. 그럼에도 불구하고 나는 속성 이름으로 비 문자열을 사용하지 않을 것입니다.
답변
이런 게 필요한가요?
var userId = 1;var myObject ={};
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);
콘솔 : 개체
1 : “값”
답변
위의 것을 숫자처럼 접근하기 위해 사용하고 싶다면 다음과 같이 할 수 있다고 생각합니다.
var myObj = {"0":"a","1":"b","CNT":2};
$.each(myObj,function(key,value){
if(isNaN(parseInt(key))){
return true; //continue;
}
//Code to perform operation
}
키가 숫자로 시작하지 않는 경우에만 작동합니다. 그렇지 않으면 숫자로 변환됩니다. 다음 예를 참조하십시오.
parseInt("45kjghk") === 45
여기서 jQuery를 사용했습니다.
업데이트 :
var myObj = {"0":"a","1":"b","CNT":2};
$.each(myObj,function(key,value){
if(isNaN(parseInt(key)) || (key.length !== parseInt(key).toString().length) ){
return true; //continue;
}
//Code to perform operation
}
위의 문제를 극복 할 수 있습니다. 가능한 경우 더 나은 것을 제안하고 있으면이 답변에 문제가 있습니다.
답변
자바 스크립트에서 숫자 문자열과 숫자는 서로 바꿔 사용할 수 있으므로
myObject[1] == myObject['1']
정말로 숫자가 객체의 키가되기를 원한다면 배열을 원할 수 있습니다 (예 : new Array()
또는로 생성됨 []
).