Baseline Widely available
ÐпеÑаÑÐ¾Ñ typeof
возвÑаÑÐ°ÐµÑ ÑÑÑокÑ, ÑказÑваÑÑÑÑ Ñип опеÑанда.
console.log(typeof 42);
// Expected output: "number"
console.log(typeof "blubber");
// Expected output: "string"
console.log(typeof true);
// Expected output: "boolean"
console.log(typeof undeclaredVariable);
// Expected output: "undefined"
СинÑакÑиÑ
ÐпеÑанд ÑледÑÐµÑ Ð·Ð° опеÑаÑоÑом typeof
:
typeof operandÐаÑамеÑÑÑ
operand
ÑвлÑеÑÑÑ Ð²ÑÑажением, пÑедÑÑавлÑÑÑим обÑÐµÐºÑ Ð¸Ð»Ð¸ пÑимиÑив, Ñип коÑоÑого должен бÑÑÑ Ð²Ð¾Ð·Ð²ÑаÑÑн.
Ð ÑледÑÑÑей ÑаблиÑе пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñе возвÑаÑаемÑе знаÑÐµÐ½Ð¸Ñ typeof
. ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑипаÑ
и пÑимиÑиваÑ
наÑ
одиÑÑÑ Ð½Ð° ÑÑÑаниÑе ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
JavaScript.
"undefined"
Null "object"
(ÑмоÑÑиÑе ниже) Boolean "boolean"
Number "number"
String "string"
Symbol (новÑй Ñип из ECMAScript 2015) "symbol"
Host object (опÑеделено JS окÑÑжением) ÐавиÑÐ¸Ñ Ð¾Ñ ÑеализаÑии Function object (ÑеализÑÐµÑ [[Call]] в ÑеÑминаÑ
ECMA-262) "function"
ÐÑбой дÑÑгой Ñип "object"
ÐÑимеÑÑ
// ЧиÑла
typeof 37 === "number";
typeof 3.14 === "number";
typeof 42 === "number";
typeof Math.LN2 === "number";
typeof Infinity === "number";
typeof NaN === "number"; // неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо ÑÑо "Not-A-Number" (не ÑиÑло)
typeof Number(1) === "number"; // никогда не иÑполÑзÑйÑе ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ!
// СÑÑоки
typeof "" === "string";
typeof "bla" === "string";
typeof "1" === "string"; // обÑаÑиÑе внимание, ÑÑо ÑиÑло внÑÑÑи ÑÑÑоки вÑÑ Ñавно Ð¸Ð¼ÐµÐµÑ Ñип ÑÑÑоки
typeof typeof 1 === "string"; // typeof вÑегда веÑнÑÑ Ð² ÑÑом ÑлÑÑае ÑÑÑокÑ
typeof String("abc") === "string"; // никогда не иÑполÑзÑйÑе ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ!
// Booleans
typeof true === "boolean";
typeof false === "boolean";
typeof Boolean(true) === "boolean"; // никогда не иÑполÑзÑйÑе ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ!
// СимволÑ
typeof Symbol() === "symbol";
typeof Symbol("foo") === "symbol";
typeof Symbol.iterator === "symbol";
// Undefined
typeof undefined === "undefined";
typeof declaredButUndefinedVariable === "undefined";
typeof undeclaredVariable === "undefined";
// ÐбÑекÑÑ
typeof { a: 1 } === "object";
// иÑполÑзÑйÑе Array.isArray или Object.prototype.toString.call
// ÑÑÐ¾Ð±Ñ ÑазлиÑиÑÑ Ð¾Ð±ÑÑнÑе обÑекÑÑ Ð¸ маÑÑивÑ
typeof [1, 2, 4] === "object";
typeof new Date() === "object";
// То ÑÑо ниже пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº оÑибкам и пÑоблемам. Ðе иÑполÑзÑйÑе!
typeof new Boolean(true) === "object";
typeof new Number(1) === "object";
typeof new String("abc") === "object";
// ФÑнкÑии
typeof function () {} === "function";
typeof class C {} === "function";
typeof Math.sin === "function";
null
// ÐÑо бÑло опÑеделено Ñ ÑÐ¾Ð¶Ð´ÐµÐ½Ð¸Ñ JavaScript
typeof null === "object";
РпеÑвой ÑеализаÑии JavaScript знаÑÐµÐ½Ð¸Ñ Ð±Ñли пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¿Ð°Ñой Ñип Ñега и знаÑение. Тип Ñега Ð´Ð»Ñ Ð¾Ð±ÑекÑов ÑавнÑлÑÑ 0. null
бÑл пÑедÑÑавлен как нÑлевой ÑказаÑÐµÐ»Ñ (0x00 в болÑÑинÑÑве плаÑÑоÑм). СледоваÑелÑно, Ñип Ñега Ð´Ð»Ñ null
ÑавнÑлÑÑ Ð½ÑлÑ, поÑÑÐ¾Ð¼Ñ Ð²Ð¾Ð·Ð²ÑаÑаемое знаÑение typeof
ÑвлÑеÑÑÑ ÑикÑивнÑм. (подÑобнее)
ÐÑпÑавление бÑло пÑедложено в ECMAScript (ÑеÑез оÑклÑÑение), но бÑло оÑклонено. ÐÑо пÑивело Ð±Ñ Ðº ÑомÑ, ÑÑо typeof null === 'null'
.
new
// ÐÑе ÑÑнкÑии-конÑÑÑÑкÑоÑÑ, ÑозданнÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ 'new', бÑдÑÑ Ð¸Ð¼ÐµÑÑ Ñип 'object'
var str = new String("String");
var num = new Number(100);
typeof str; // ÐеÑнÑÑ 'object'
typeof num; // ÐеÑнÑÑ 'object'
// Ðо ÑÑÑеÑÑвÑÐµÑ Ð¸ÑклÑÑение Ð´Ð»Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑа Function
var func = new Function();
typeof func; // ÐеÑнÑÑ 'function'
РегÑлÑÑнÑе вÑÑажениÑ
ÐÑзÑваемÑе ÑегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð±Ñли неÑÑандаÑÑнÑм дополнением в некоÑоÑÑÑ Ð±ÑаÑзеÑÐ°Ñ .
typeof /s/ === "function"; // Chrome 1-12 Ðе ÑооÑвеÑÑÑвÑÐµÑ ECMAScript 5.1
typeof /s/ === "object"; // Firefox 5+ СооÑвеÑÑÑвÑÐµÑ ECMAScript 5.1
ÐÑибки, ÑвÑзаннÑе Ñ Ð²ÑеменнÑми мÑÑÑвÑми зонами
Ðо ECMAScript 2015, гаÑанÑиÑовалоÑÑ, ÑÑо опеÑаÑÐ¾Ñ typeof
веÑнÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ Ð»Ñбого опеÑанда, Ñ ÐºÐ¾ÑоÑÑм он бÑл вÑзван. ÐÑо изменилоÑÑ Ð¿Ð¾Ñле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ поднимаÑÑиÑ
ÑÑ Ð¾Ð±ÑÑвлений let
and const
Ñ Ð±Ð»Ð¾Ñной облаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи. ТепеÑÑ, еÑли пеÑеменнÑе обÑÑÐ²Ð»ÐµÐ½Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ let
и const
, и Ð´Ð»Ñ Ð½Ð¸Ñ
вÑзÑваеÑÑÑ typeof
в блоке обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменнÑÑ
, но до обÑÑвлениÑ, Ñо вÑбÑаÑÑваеÑÑÑ ReferenceError
. Ðоведение оÑлиÑаеÑÑÑ Ð¾Ñ Ð½ÐµÐ¾Ð±ÑÑвленнÑÑ
пеÑеменнÑÑ
, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
typeof
веÑнÑÑ 'undefined'. ÐеÑеменнÑе Ñ Ð±Ð»Ð¾Ñной облаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи наÑ
одÑÑÑÑ Ð² "вÑеменной мÑÑÑвой зоне", коÑоÑÐ°Ñ Ð´Ð»Ð¸ÑÑÑ Ð¾Ñ Ð½Ð°Ñала блока до моменÑа обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменнÑÑ
. Ð ÑÑой зоне попÑÑка доÑÑÑпа к пеÑеменнÑм вÑбÑаÑÑÐ²Ð°ÐµÑ Ð¸ÑклÑÑение.
typeof undeclaredVariable === "undefined";
typeof newLetVariable;
let newLetVariable; // ReferenceError
typeof newConstVariable;
const newConstVariable = "hello"; // ReferenceError
ÐÑклÑÑениÑ
Ðо вÑеÑ
ÑекÑÑиÑ
бÑаÑзеÑаÑ
ÑÑÑеÑÑвÑÐµÑ Ð½ÐµÑÑандаÑÑнÑй host-обÑÐµÐºÑ document.all
, коÑоÑÑй Ð¸Ð¼ÐµÐµÑ Ñип Undefined.
typeof document.all === "undefined";
ХоÑÑ ÑпеÑиÑикаÑÐ¸Ñ ÑазÑеÑÐ°ÐµÑ ÑобÑÑвеннÑе имена Ñипов Ð´Ð»Ñ Ð½ÐµÑÑандаÑÑнÑÑ
ÑкзоÑиÑеÑкиÑ
обÑекÑов, ÑÑебÑеÑÑÑ ÑÑÐ¾Ð±Ñ ÑÑи имена оÑлиÑалиÑÑ Ð¾Ñ Ð¿ÑедопÑеделÑннÑÑ
. СиÑÑаÑиÑ, когда document.all
Ð¸Ð¼ÐµÐµÑ Ñип undefined
должна ÑаÑÑмаÑÑиваÑÑÑÑ ÐºÐ°Ðº иÑклÑÑиÑелÑное наÑÑÑение пÑавил.
Ð IE 6, 7 и 8 многие host-обÑекÑÑ ÑвлÑÑÑÑÑ Ð¾Ð±ÑекÑами, но не ÑÑнкÑиÑми. ÐапÑимеÑ:
typeof alert === "object";
СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4