Задать вопрос
Arris
@Arris
Сапиенсы учатся, играя.

JSON Object or not Object. Почему?

Есть у нас табличка
<table id="example">
   <tbody>
            <tr id="rowID" 
data-all='{"id": 1, "name": "name1"}'>
                <td data-id="01">Tiger Nixon</td>
                <td data-id="02">System Architect</td>
                <td>Edinburgh</td>
                <td>61</td>
                <td>2011/04/25</td>
                <td>$320,800</td>
            </tr>
    </tbody>
</table>

И код
$("#example td").bind('click', function(){
        var all = $('#rowID').data('all');
        alert(all);
    });

(JS Fiddle: jsfiddle.net/57b1m5Lz )

Если написать
data-all='{"id": 1, "name": "name1"}'
Алерт возвращает [Object object]

А если написать
data-all='{"id": 01, "name": "name1"}'
Алерт возвращает '{"id": 01, "name": "name1"}'

Да, я знаю, что 01 скорее всего воспринимается как запись числа в восьмеричной с.с.

Но - кто и когда так воспринимает данные? Движок javascript у браузера? JQuery?
И на каком этапе? Приведение типов? Парсинг кусочка `JSON`?

Эксперименты показывают, что если обернуть все ключи data-all в кавычки - Object object будет всегда (во всех проверенных случаях).

Спасибо!
  • Вопрос задан
  • 277 просмотров
Подписаться 1 Оценить 2 комментария
Решение пользователя Денис Инешин К ответам на вопрос (2)
IonDen
@IonDen
JavaScript developer. IonDen.com
Скорее всего jQuery делает это методом отлова исключения в JSON.parse. 01 - это не валидная цифра и она сломает JSON.parse, а значит, отловив исключение, jQuery будет считать что это не JSON и вернёт просто строку.
Ответ написан
Комментировать