Вам придется написать свой собственный код, потому что термин «квартал» различен для каждого бизнеса. Разве вы не можете просто сделать что-то вроде:
Calendar c = /* get from somewhere */
int month = c.get(Calendar.MONTH);
return (month >= Calendar.JANUARY && month <= Calendar.MARCH) ? "Q1" :
(month >= Calendar.APRIL && month <= Calendar.JUNE) ? "Q2" :
(month >= Calendar.JULY && month <= Calendar.SEPTEMBER) ? "Q3" :
"Q4";
instanceof
также работает, когда обратный вызов
является подтипом Function
, я думаю
Исходя из строгого ОО-воспитания, я бы пошел на
callback instanceof Function
Строки подвержены либо моей ужасной орфографии, либо другим опечаткам. К тому же, мне кажется, он читается лучше.
Используйте instanceof, потому что если вы измените имя класса, вы получите ошибку компилятора.
Оба схожи по функциональности, потому что оба возвращают информацию о типе, однако я лично предпочитаю instanceof
, потому что он сравнивает фактические типы, а не строки. Сравнение типов менее подвержено человеческим ошибкам и технически быстрее, поскольку сравнивает указатели в памяти, а не сравнивает целые строки.
Я бы порекомендовал использовать прототип callback.isFunction ()
.
Они поняли разницу, и вы можете рассчитывать на их причину.
Думаю, в других JS-фреймворках тоже есть такие вещи.
instanceOf
не будет работать с функциями, определенными в других окнах, я считаю.
Их функция отличается от вашего окна . Функция
.
instanceof
в Javascript может быть нестабильным - я считаю, что основные фреймворки стараются избегать его использования. Различные окна - это один из способов, которым он может сломаться - я считаю, что иерархия классов также может сбить его с толку.
Есть лучшие способы проверить, является ли объект определенным встроенным типом (обычно это то, что вам нужно) . Создавайте служебные функции и используйте их:
function isFunction(obj) {
return typeof(obj) == "function";
}
function isArray(obj) {
return typeof(obj) == "object"
&& typeof(obj.length) == "number"
&& isFunction(obj.push);
}
И так далее.
Причина использования типа, если переменная может быть не определена.
alert(typeof undefinedVariable); // alerts the string "undefined"
alert(undefinedVariable instanceof Object); // throws an exception
Веская причина использовать экземпляр - это если переменная может быть нулевой.
var myNullVar = null;
alert(typeof myNullVar ); // alerts the string "object"
alert(myNullVar instanceof Object); // alerts "false"
Так что действительно на мой взгляд, это будет зависеть от того, какой тип возможных данных вы проверяете.
Существенная практическая разница:
var str = 'hello word';
str instanceof String // false
typeof str === 'string' // true
Не спрашивайте меня, почему.