Плюс оператор добавляется вместо математики

0

В JavaScript, когда я запускаю этот код:

parent.css("top") + parent.height() * 2

В консоли Chrome:

100px320

Почему это происходит?
parent.height() равно 160, поэтому кажется, что parent.css("top") - это строка, а JS просто добавляет некоторые символы в строку вместо выполнения математических вычислений.

Почему это не работает и как это сделать правильно?

Теги:

2 ответа

2

Вам нужно изменить строку на число - вы можете использовать parseInt для этого:

parseInt(parent.css("top"),10) + parent.height() * 2
1

Оператор + "перегружен" в Javascript.

На самом деле, что происходит, нет ввода текста в Javascript, поэтому оператор + пытается заставить ваши значения быть + -able.

Вы правы, что .css("top") - это строка: метод .css вернет именно то, что в CSS, и вам лучше иметь объявления единиц в вашем CSS.

Когда Javascript встречает + между двумя переменными разных типов, он делает все возможное и принуждает целое число к строке, поэтому вы не теряете никакой точности.

Вы можете сделать что-то подобное, чтобы исправить это:

parseInt( parent.css( "top" ) ) - - parent.height() * 2;

У этого есть два улова:

  1. parseInt принимает первое целое, видит и возвращает это. 100px вернет 100 но будет 100 400. Быть осторожен.

  2. - - заставит Javascript делать арифметику, так как вы просите ее вычесть число из отрицательного числа, что совпадает с добавлением. Тем не менее, нет неоднозначности с - оператор, так что это будет либо работать или производить NaN.

  • 1
    на вопрос ответил, спасибо;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню