Хэш-ключи автоматически конвертируются в int? - PullRequest
3 голосов
/ 31 марта 2011

Фрагмент консоли JavaScript:

> obj = {"1": "Hello, World", "2": "Goodbye, World"};
> obj[1]
  "Hello, World"
> obj["1"]
  "Hello, World"

Так, по какой-то причине, если у вас есть ключи, которые можно преобразовать в целое число, к соответствующим значениям также можно получить доступ, используя целое число. Это очень полезно: я извлекаю JSON поверх Ajax, а в JSON недопустимо использовать в качестве хеш-ключей целочисленные значения (или, по крайней мере, так считает сериализатор JSON Python). Однако мне нужно получить доступ к ним как к целым, поэтому я хочу знать:

  1. Почему это происходит?
  2. Это надежно? (Я вижу, что он работает на Chrome и Firefox, что достаточно для моего приложения, но я бы не хотел, чтобы это была какая-то распространенная ошибка, которая будет исправлена ​​в следующей версии)

Ответы [ 4 ]

4 голосов
/ 31 марта 2011

Все свойства объектов JavaScript являются строками. Обратите внимание на это поведение:

var foo = {};
foo[foo] = "hello";
console.log( foo["[object Object]"] );
//-> "hello"

foo.toString = function(){ return "sassy" };
foo.sassy = "Oh yes!";
console.log( foo[foo] );
//-> "Oh yes!"

Итак, когда вы устанавливаете или получаете foo[1], вы фактически устанавливаете / получаете foo[1.toString()]. Да, это надежно.

3 голосов
/ 31 марта 2011

Я бы не сказал, что ваши ключи конвертированы в целые. Я бы сказал, что toString() вызывается на вашем «аксессоре» (ключ, который вы используете в obj [1]), потому что ожидается, что это будет строка.

3 голосов
/ 31 марта 2011

JavaScript любит , превращая ваши числа в строки. Всякий раз, когда это возможно, это будет. Проверьте правила преобразования типов.

Это может помочь: http://united -coders.com / Матиас-Reuter / все-о-типа-в-JavaScript-автомат типа преобразования

Редактировать - забавный факт:

>>> "3" + "5"
"35"
>>> "3" - "2"
1
0 голосов
/ 31 марта 2011

1 и «1» означают практически то же самое в свободно типизированном языке, таком как javascript (помните, что JSON - это нотация объектов javascript).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...