В JavaScript, когда я запускаю этот код:
parent.css("top") + parent.height() * 2
В консоли Chrome:
100px320
Почему это происходит? parent.height()
равно 160, поэтому кажется, что parent.css("top")
- это строка, а JS просто добавляет некоторые символы в строку вместо выполнения математических вычислений.
Почему это не работает и как это сделать правильно?
Вам нужно изменить строку на число - вы можете использовать parseInt
для этого:
parseInt(parent.css("top"),10) + parent.height() * 2
Оператор +
"перегружен" в Javascript.
На самом деле, что происходит, нет ввода текста в Javascript, поэтому оператор +
пытается заставить ваши значения быть +
-able.
Вы правы, что .css("top")
- это строка: метод .css
вернет именно то, что в CSS, и вам лучше иметь объявления единиц в вашем CSS.
Когда Javascript встречает +
между двумя переменными разных типов, он делает все возможное и принуждает целое число к строке, поэтому вы не теряете никакой точности.
Вы можете сделать что-то подобное, чтобы исправить это:
parseInt( parent.css( "top" ) ) - - parent.height() * 2;
У этого есть два улова:
parseInt принимает первое целое, видит и возвращает это. 100px
вернет 100
но будет 100
400. Быть осторожен.
- -
заставит Javascript делать арифметику, так как вы просите ее вычесть число из отрицательного числа, что совпадает с добавлением. Тем не менее, нет неоднозначности с -
оператор, так что это будет либо работать или производить NaN
.