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 просмотров
Решения вопроса 2
IonDen
@IonDen
JavaScript developer. IonDen.com
Скорее всего jQuery делает это методом отлова исключения в JSON.parse. 01 - это не валидная цифра и она сломает JSON.parse, а значит, отловив исключение, jQuery будет считать что это не JSON и вернёт просто строку.
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Это какие-то эротические фантазии jQuery, очевидно. dataset.all возвращает строку. А JSON.parse('{"id": 01, "name": "name1"}') кидает эксепшен.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 мая 2024, в 13:07
7000 руб./за проект
07 мая 2024, в 12:59
500 руб./за проект
07 мая 2024, в 12:58
25000 руб./за проект