Есть ли причина избежать целых чисел в HTML?

Если я получаю следующий объект с сервера через Ajax:

$.get('/product/10', function (response) {
 product = response;
 // product:
 // {
 // name: "Product X",
 // stock: 20
 // }
});

И затем вывести его в HTML с помощью шаблона Underscore.js следующим образом:

Есть ли какая-либо причина также избегать атрибута stock, если я знаю, что он всегда будет как целое с сервера?

Я не могу придумать, как использовать его, поэтому мне было интересно, является ли "побег всех вещей" хорошей политикой или "побег только в том, что вам нужно" является лучшим.

4 ответа

Если вы хотите быть полностью в безопасности, избегайте всего. Код может измениться, и вы можете решить использовать строку, в которой вы ранее использовали номер. Если вы избежите всего, у вас не будет проблем.

Однако это просто осторожно. Если вы можете гарантировать, что он всегда будет числом, даже если запрос AJAX завершится неудачно, и во всех случаях с краем, тогда он не сможет избежать этого. Обратите внимание, что везде, где я работал, консенсус был безопасным.


JavaScript динамически типизирован, поэтому нет способа гарантировать, что product.stock действительно является числом к ​​моменту получения шаблона. Любой код, написанный в будущем с использованием шаблона (возможно, написанный кем-то другим), может передать любое значение для product, поэтому stock может быть любого типа.

Лучше всегда избегать, за исключением редкого случая, когда вы ожидаете, что значение действительно является HTML, и в этом случае вы не можете убежать, так что будущие изменения кода менее вероятны для разрыва шаблона.


Вам не нужно скрывать целые числа. Это может быть хорошей привычкой избегать всего в целом и печатать исходные версии того, что вы намереваетесь. Однако вы также можете сказать, что вам следует доверять то, что приходит с сервера, а не то, что приходит от клиента. В конце концов, это имеет значение только для того, что вы хотите получить по привычке. Лично я не думал бы сбежать от него (потому что его не нужно избегать), поэтому я бы не избежал его.


Если вход имеет тип number, то вы гарантированно получите число или ничего в этом вводе.

В качестве теста попробуйте добавить строку drop database к вводу номера типа. Предупреждение о спойлере: вход останется пустым.

Входы типа text могут быть более опасными.

licensed under cc by-sa 3.0 with attribution.