IE8 возвращает NaN

#javascript #internet-explorer-8

#javascript #internet-explorer-8

Вопрос:

По какой-то причине в Internet Explorer 8 (и, вероятно, 7) следующий раздел кода не работает, есть идеи?

 var middlelatlong = bounds.getCenter();

//when alerted middlelatlong = (51.65494320798432,0.5499464196260533);

var x = 0;
var keys = new Array();
for(var key in middlelatlong){
    if(x <= 1){
        keys[x] = key;
    }
    x  ;
}

var southlong = middlelatlong[keys[0]]-0.00017;
  

Возвращает NaN в Internet Explorer 8, но во всех других браузерах он равен 51.654790472326724 .

Комментарии:

1. Вы действительно знаете, что middlelatlong = (51.65494320798432,05499464196260533); делает? JavaScript — это не Python. Я не думаю, что другие браузеры возвращают указанное вами значение, или ваш фактический код отличается. Учитывая ваш код, в каждом браузере middlelatlong[keys[0]] будет undefined , и поэтому вычитание приведет к NaN .

2. Чего вы пытаетесь здесь достичь?

3. Не считая проблем с брекетингом, 05499464196260533 выглядит не совсем правильно — возможно, вам потребуется вернуть недостающую десятичную точку…

4. Предполагая, что lat long относится к широте и долготе, ваша долгота не является допустимым номером долготы.

5. Что ж, это проясняет ситуацию. Вы должны соответствующим образом обновить свой вопрос. Если вы приводите пример, то вы должны, по крайней мере, убедиться, что он не вводит никаких новых ошибок, которые скрывают вашу реальную проблему. (a,b) это не то же самое, что [a,b] .

Ответ №1:

Я не знаю, чего вы добиваетесь своим кодом, но я предполагаю, что middlelatlong[keys[0]] возвращает что-то, что не является числом.

Похоже, что вы используете API карт Google и хотите получить доступ к широтной части координат. Вы должны правильно прочитать документ и использовать API для доступа к информации вместо того, чтобы пытаться извлечь информацию самостоятельно.

Если getCenter ссылается на метод, описанный здесь, то он возвращает LatLng объект. Вы можете получить доступ к широте с помощью lat() then (или, если вам нужна долгота, используйте lng() ):

 var southlong = bounds.getCenter().lat() - 0.00017;
  

Ваша проблема в том, что вы делаете предположения о порядке, в котором просматриваются свойства объекта, но этот порядок не определен, это зависит от реализации. Таким образом, вы не можете сказать, что первые два свойства будут координатами, объект также имеет другие свойства, которые могут быть пройдены первыми в IE.

Комментарии:

1. Хорошо, ребята, я разобрался в этом. Internet Explorer упорядочивает ключи в пределах middlelatlong в другом порядке, поэтому использование ключей [0] и ключей [1] работало только в том случае, если массив был в правильном порядке.

2. @ElliotReeve: Вы используете Goggle Maps API или нет? Если вы это сделаете, то используйте предоставленные методы.

3. Хорошая находка для bounds.getCenter().lat(), решает все проблемы.

Ответ №2:

В первой строке, я думаю, вы имеете в виду:

 middlelatlong = [51.65494320798432,0.5499464196260533];
  

Кроме того, в вашем цикле for просто используйте обычную итерацию и приращение.

Комментарии:

1. Что вы имеете в виду? У вас есть пример?

2. Также обратите внимание 0... , что это восьмеричное число.

3. for (x=0; x<something ;x ) . Что вы пытаетесь сделать с этим фрагментом кода?