Статически типизированные языки программирования проверяют тип (процесс проверки и принудительного применения ограничений типов) во время компиляции, а не во время выполнения.
Динамически типизированные языки программирования проверяют тип при запуске - времени, в отличие от времени компиляции.
Причина эти Math
объект проста: "потому что Java делает это". Не лучшая из причин, но мы здесь Я предполагаю, что вещи имели больше смысла тогда, прежде чем Douglas Crockford запустил свою кампанию для подавления половины language*. Первоначально Вам "разрешили" или предназначили, чтобы сделать вещи как это:
with (Math) {
var n = min( round(a) * round(b), sqrt(c) );
var result = exp( n + d );
}
недостаток к расширению Number.prototype
состоит в том, что кто-то еще мог бы сделать то же самое. Или хуже, например, определяют Number.prototype.round
как симметричный округляющаяся функция.
, Если Вы ищете способы сделать Вашу жизнь легче, почему остановка там? Почему не просто включают Math
функции как глобальные функции?
var m = 'abs acos asin atan atan2 ceil cos exp floor log max min ' +
'pow random round sin sqrt tan PI').split(' ');
for (var i=0,l=m.length; i<l; i++) {
window[ m[i] ] = Math[ m[i] ];
}
Это бросит все математические функции в глобальную область видимости, эффективно позволяя Вам прекратить вводить "Математику". Спросите себя: Есть ли какая-либо реальная разница между расширением Number
и расширением window
с этими функциями?
*, Прежде чем Вы будете гореть меня: комментарий Crockford не предназначен, чтобы быть отнесенным слишком серьезно. Я действительно соглашаюсь с ним, что with
очень опасно в неявной глобальной среде.
Нет никакого недостатка в расширении Number.prototype
кроме смущения других людей. Какой смысл? Что лучше в использовании value.round()
вместо Math.round(value)
?
существует несколько серьезных оснований для эти Math
объект:
Math.round("5")
работы, тогда как value.round()
не будет работать, когда значение является строкой (например, значение текстового поля) Math.min()
или Math.max()
. Или Вы хотите использовать его как a.max(b)
? Math.PI
или функция Math.random()
. Я думаю, что Математика является больше, чем набор методов Числа. Это - использование шире. Скажите, с помощью NumberVariable. PI может сбивать с толку. То же с генерацией случайных чисел.
Также я думаю, расширяя число, в порядке, потому что это - часть природы JS. Возможно, кто-то исправит меня, если я буду неправ здесь.