Каково различие между typeof и instanceof и когда нужно использоваться по сравнению с другим?

Вам придется написать свой собственный код, потому что термин «квартал» различен для каждого бизнеса. Разве вы не можете просто сделать что-то вроде:

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";
367
задан naXa 27 November 2018 в 14:21
поделиться

8 ответов

instanceof также работает, когда обратный вызов является подтипом Function , я думаю

7
ответ дан 23 November 2019 в 00:08
поделиться

Исходя из строгого ОО-воспитания, я бы пошел на

callback instanceof Function

Строки подвержены либо моей ужасной орфографии, либо другим опечаткам. К тому же, мне кажется, он читается лучше.

0
ответ дан 23 November 2019 в 00:08
поделиться

Используйте instanceof, потому что если вы измените имя класса, вы получите ошибку компилятора.

1
ответ дан 23 November 2019 в 00:08
поделиться

Оба схожи по функциональности, потому что оба возвращают информацию о типе, однако я лично предпочитаю instanceof , потому что он сравнивает фактические типы, а не строки. Сравнение типов менее подвержено человеческим ошибкам и технически быстрее, поскольку сравнивает указатели в памяти, а не сравнивает целые строки.

121
ответ дан 23 November 2019 в 00:08
поделиться

Я бы порекомендовал использовать прототип callback.isFunction () .

Они поняли разницу, и вы можете рассчитывать на их причину.

Думаю, в других JS-фреймворках тоже есть такие вещи.

instanceOf не будет работать с функциями, определенными в других окнах, я считаю. Их функция отличается от вашего окна . Функция .

3
ответ дан 23 November 2019 в 00:08
поделиться

instanceof в Javascript может быть нестабильным - я считаю, что основные фреймворки стараются избегать его использования. Различные окна - это один из способов, которым он может сломаться - я считаю, что иерархия классов также может сбить его с толку.

Есть лучшие способы проверить, является ли объект определенным встроенным типом (обычно это то, что вам нужно) . Создавайте служебные функции и используйте их:

function isFunction(obj) {
  return typeof(obj) == "function";
}
function isArray(obj) {
  return typeof(obj) == "object" 
      && typeof(obj.length) == "number" 
      && isFunction(obj.push);
}

И так далее.

4
ответ дан 23 November 2019 в 00:08
поделиться

Причина использования типа, если переменная может быть не определена.

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"

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

96
ответ дан 23 November 2019 в 00:08
поделиться

Существенная практическая разница:

var str = 'hello word';

str instanceof String   // false

typeof str === 'string' // true

Не спрашивайте меня, почему.

2
ответ дан 23 November 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: