API yandex карт и капризы с типами переменных JavaScript
При работе с API Yandex карт столкнулся наконец с еще одним недостатком JavaScript, а точнее отсутствие явного задания типа переменной. Например, долго искал ошибки в этом коде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
lastcoors=JSON.parse(e); // парсим JSON в массив ldt=lastcoors.rows[0].cell[0]; lid=lastcoors.rows[0].cell[1]; limei=lastcoors.rows[0].cell[2]; lx=lastcoors.rows[0].cell[3]; ly=lastcoors.rows[0].cell[4]; lz=lastcoors.rows[0].cell[5]; myPlacemark = new ymaps.Placemark([lx, ly], { balloonContentHeader: "Балун метки", balloonContentBody: "Содержимое <em>балуна</em> метки", balloonContentFooter: "Подвал", hintContent: "Хинт метки" }); myMap.geoObjects.add(myPlacemark); myMap.panTo([lx, ly], {delay: 1500}); |
Метка ставится правильно, а перемещение идет невесть куда. Оказалось, что при разборе JSON, переменные lx и ly почему-то становятся строками, и если функции PlaceMark все равно с чем оперировать, с числом или строкой, то PlanTo непременно работает только с числом.
Решение: в JavaScritpt строка становится числом если участвует в математической операции.
Например:
1 2 |
n=1; //явное число lx=lx*n; // lx тоже становится числом. |
Итого получаем рабочий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
lastcoors=JSON.parse(e); // парсим JSON в массив n=1; ldt=lastcoors.rows[0].cell[0]; lid=lastcoors.rows[0].cell[1]; limei=lastcoors.rows[0].cell[2]; lx=lastcoors.rows[0].cell[3]*n; ly=lastcoors.rows[0].cell[4]*n; lz=lastcoors.rows[0].cell[5]*n; myPlacemark = new ymaps.Placemark([lx, ly], { balloonContentHeader: "Балун метки", balloonContentBody: "Содержимое <em>балуна</em> метки", balloonContentFooter: "Подвал", hintContent: "Хинт метки" }); myMap.geoObjects.add(myPlacemark); //alert(lx);alert(ly); myMap.panTo([lx, ly], {delay: 1500}); |