Typeof - оператор и функция

В JavaScript typeof есть оператор и функция. Он лучше используется как оператор или функция? Почему?

Ответ 1

typeof является оператором. Вы можете легко проверить его, используя:

typeof(typeof)

Была typeof функция, это выражение вернет строку 'function', но это приведет к синтаксической ошибке:

js> typeof(typeof);
typein:8: SyntaxError: syntax error:
typein:8: typeof(typeof);
typein:8: .............^

поэтому typeof не может быть функцией. Вероятно, скобки-обозначение typeof(foo) заставило вас думать, что typeof является функцией, но синтаксически эти скобки не являются вызовом функции - они используются для группировки, как и (2 + 3) *2. Фактически вы можете добавить любое количество из них, которое вы хотите:

typeof(((((foo))))); // is equal to typeof foo;

Ответ 2

Я думаю, что вы выбираете то, что хотите, на основе ясности, как привычка, которую я обычно использую в качестве оператора следующим образом, потому что это довольно ясно, по крайней мере, IMO:

if(typeof thing === "string") { 
  alert("this is a string");
}

if(typeof thing === "function") {
  alert("this is a function");
}

Это противоречит этому формату:

if(typeof(thing) === "string") { 
  alert("this is a string");
}

Для меня это немного медленнее читать. Если вы делаете typeof(thing), это то же самое, что бы вы ни плавали на лодке. Вы можете получить полное чтение и какие строки ожидать от типов здесь.