Ð JavaScript ÑÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко оÑновнÑÑ Ñипов даннÑÑ .
Ð ÑÑой главе Ð¼Ñ Ð¿Ð¾Ð»ÑÑим о Ð½Ð¸Ñ Ð¾Ð±Ñее пÑедÑÑавление, а позже, в ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ð³Ð»Ð°Ð²Ð°Ñ Ð¿Ð¾Ð´Ñобно познакомимÑÑ Ñ Ð¸ÑполÑзованием каждого Ñипа в оÑделÑноÑÑи.
ЧиÑло «number»
var n = 123;
n = 12.345;
ÐдинÑй Ñип ÑиÑло иÑполÑзÑеÑÑÑ ÐºÐ°Ðº Ð´Ð»Ñ ÑелÑÑ , Ñак и Ð´Ð»Ñ Ð´ÑобнÑÑ ÑиÑел.
СÑÑеÑÑвÑÑÑ ÑпеÑиалÑнÑе ÑиÑловÑе знаÑÐµÐ½Ð¸Ñ Infinity (беÑконеÑноÑÑÑ) и NaN (оÑибка вÑÑиÑлений).
ÐапÑимеÑ, беÑконеÑноÑÑÑ Infinity полÑÑаеÑÑÑ Ð¿Ñи делении на нолÑ:
alert( 1 / 0 ); // Infinity
ÐÑибка вÑÑиÑлений NaN бÑÐ´ÐµÑ ÑезÑлÑÑаÑом некоÑÑекÑной маÑемаÑиÑеÑкой опеÑаÑии, напÑимеÑ:
alert( "неÑиÑло" * 2 ); // NaN, оÑибка
ÐÑи знаÑÐµÐ½Ð¸Ñ ÑоÑмалÑно пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð°Ñ ÑÐ¸Ð¿Ñ Â«ÑиÑло», Ñ Ð¾ÑÑ, конеÑно, ÑиÑлами в Ð¸Ñ Ð¾Ð±ÑÑном понимании не ÑвлÑÑÑÑÑ.
ÐÑобенноÑÑи ÑабоÑÑ Ñ ÑиÑлами в JavaScript ÑазобÑÐ°Ð½Ñ Ð² главе ЧиÑла.
ЧиÑло «bigint»
Ð JavaScript Ñип «number» не Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑиÑла болÑÑе, Ñем 253 (или менÑÑе, Ñем -253 Ð´Ð»Ñ Ð¾ÑÑиÑаÑелÑнÑÑ
). ÐÑо ÑеÑ
ниÑеÑкое огÑаниÑение вÑзвано иÑ
внÑÑÑенним пÑедÑÑавлением. 253 â ÑÑо доÑÑаÑоÑно болÑÑое ÑиÑло, ÑоÑÑоÑÑее из 16 ÑиÑÑ, поÑÑÐ¾Ð¼Ñ ÑаÑе вÑего пÑоблем не возникаеÑ. Ðо иногда нам нÑÐ¶Ð½Ñ Ð´ÐµÐ¹ÑÑвиÑелÑно гиганÑÑкие ÑиÑла, напÑÐ¸Ð¼ÐµÑ Ð² кÑипÑогÑаÑии или пÑи иÑполÑзовании меÑки вÑемени («timestamp») Ñ Ð¼Ð¸ÐºÑоÑекÑндами.
Тип BigInt бÑл добавлен в JavaScript, ÑÑÐ¾Ð±Ñ Ð´Ð°ÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑабоÑаÑÑ Ñ ÑелÑми ÑиÑлами пÑоизволÑной длинÑ.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð·Ð½Ð°Ñение Ñипа BigInt, необÑ
одимо добавиÑÑ n в ÐºÐ¾Ð½ÐµÑ ÑиÑлового лиÑеÑала:
// Ñимвол "n" в конÑе ознаÑаеÑ, ÑÑо ÑÑо BigInt
const bigInt = 1234567890123456789012345678901234567890n;
Ðолее подÑобно Ñип даннÑÑ
BigInt Ð¼Ñ ÑаÑÑмоÑÑим в оÑделÑной главе BigInt.
СÑÑока «string»
var str = "Ðама мÑла ÑамÑ";
str = 'ÐдинаÑнÑе кавÑÑки Ñоже подойдÑÑ';
Ð JavaScript одинаÑнÑе и двойнÑе кавÑÑки ÑавнопÑавнÑ. Ðожно иÑполÑзоваÑÑ Ð¸Ð»Ð¸ Ñе или дÑÑгие.
РнекоÑоÑÑÑ
ÑзÑкаÑ
пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐµÑÑÑ ÑпеÑиалÑнÑй Ñип даннÑÑ
Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñимвола. ÐапÑимеÑ, в ÑзÑке С ÑÑо char. Ð JavaScript еÑÑÑ ÑолÑко Ñип «ÑÑÑока» string. ЧÑо, надо ÑказаÑÑ, вполне Ñдобно.
Ðолее подÑобно Ñо ÑÑÑоками Ð¼Ñ Ð¿Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð¸Ð¼ÑÑ Ð² главе СÑÑоки.
ÐÑлевÑй (логиÑеÑкий) Ñип «boolean»
У него вÑего два знаÑениÑ: true (иÑÑина) и false (ложÑ).
Ðак пÑавило, Ñакой Ñип иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñипа да/неÑ, напÑимеÑ:
var checked = true; // поле ÑоÑÐ¼Ñ Ð¿Ð¾Ð¼ÐµÑено галоÑкой
checked = false; // поле ÑоÑÐ¼Ñ Ð½Ðµ ÑодеÑÐ¶Ð¸Ñ Ð³Ð°Ð»Ð¾Ñки
РнÑм Ð¼Ñ Ð¿Ð¾Ð³Ð¾Ð²Ð¾Ñим более подÑобно, когда бÑдем обÑÑждаÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкие вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð¸ ÑÑловнÑе опеÑаÑоÑÑ.
СпеÑиалÑное знаÑение «null»
ÐнаÑение null не оÑноÑиÑÑÑ Ð½Ð¸ к Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· Ñипов вÑÑе, а обÑазÑÐµÑ Ñвой оÑделÑнÑй Ñип, ÑоÑÑоÑÑий из единÑÑвенного знаÑÐµÐ½Ð¸Ñ null:
var age = null;
Ð JavaScript null не ÑвлÑеÑÑÑ Â«ÑÑÑлкой на неÑÑÑеÑÑвÑÑÑий обÑекÑ» или «нÑлевÑм ÑказаÑелем», как в некоÑоÑÑÑ
дÑÑгиÑ
ÑзÑкаÑ
. ÐÑо пÑоÑÑо ÑпеÑиалÑное знаÑение, коÑоÑое Ð¸Ð¼ÐµÐµÑ ÑмÑÑл «ниÑего» или «знаÑение неизвеÑÑно».
Ð ÑаÑÑноÑÑи, код вÑÑе говоÑÐ¸Ñ Ð¾ Ñом, ÑÑо возÑаÑÑ age неизвеÑÑен.
СпеÑиалÑное знаÑение «undefined»
ÐнаÑение undefined, как и null, обÑазÑÐµÑ Ñвой ÑобÑÑвеннÑй Ñип, ÑоÑÑоÑÑий из одного ÑÑого знаÑениÑ. Ðно Ð¸Ð¼ÐµÐµÑ ÑмÑÑл «знаÑение не пÑиÑвоено».
ÐÑли пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾Ð±ÑÑвлена, но в Ð½ÐµÑ Ð½Ð¸Ñего не запиÑано, Ñо ÐµÑ Ð·Ð½Ð°Ñение как Ñаз и еÑÑÑ undefined:
var x;
alert( x ); // вÑÐ²ÐµÐ´ÐµÑ "undefined"
Ðожно пÑиÑвоиÑÑ undefined и в Ñвном виде, Ñ
оÑÑ ÑÑо делаеÑÑÑ Ñедко:
var x = 123;
x = undefined;
alert( x ); // "undefined"
Ð Ñвном виде undefined обÑÑно не пÑиÑваиваÑÑ, Ñак как ÑÑо пÑоÑивоÑеÑÐ¸Ñ ÐµÐ³Ð¾ ÑмÑÑлÑ. ÐÐ»Ñ Ð·Ð°Ð¿Ð¸Ñи в пеÑеменнÑÑ Â«Ð¿ÑÑÑого» или «неизвеÑÑного» знаÑÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ null.
Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Â«symbol»
«Символ» пÑедÑÑавлÑÐµÑ Ñобой ÑникалÑнÑй иденÑиÑикаÑоÑ.
СоздаÑÑÑÑ Ð½Ð¾Ð²Ñе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии Symbol():
// СоздаÑм новÑй Ñимвол - id
let id = Symbol();
ÐÑи Ñоздании ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¼Ð¾Ð¶Ð½Ð¾ даÑÑ Ð¾Ð¿Ð¸Ñание (Ñакже назÑваемое имÑ), в оÑновном иÑполÑзÑÑÑееÑÑ Ð´Ð»Ñ Ð¾Ñладки кода:
// СоздаÑм Ñимвол id Ñ Ð¾Ð¿Ð¸Ñанием (именем) "id"
let id = Symbol("id");
Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð³Ð°ÑанÑиÑованно ÑникалÑнÑ. Ðаже еÑли Ð¼Ñ Ñоздадим множеÑÑво Ñимволов Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñм опиÑанием, ÑÑо вÑÑ Ñавно бÑдÑÑ ÑазнÑе ÑимволÑ. ÐпиÑание â ÑÑо пÑоÑÑо меÑка, коÑоÑÐ°Ñ Ð½Ð¸ на ÑÑо не влиÑеÑ.
ÐапÑимеÑ, Ð²Ð¾Ñ Ð´Ð²Ð° Ñимвола Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñм опиÑанием â но они не ÑавнÑ:
let id1 = Symbol("id");
let id2 = Symbol("id");
alert(id1 == id2); // false
Ðолее подÑобно c Ñимволами Ð¼Ñ Ð¿Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð¸Ð¼ÑÑ Ð² главе Тип даннÑÑ Symbol.
ÐбÑекÑÑ Â«object»
ÐеÑвÑе 7 Ñипов назÑваÑÑ Â«Ð¿ÑимиÑивнÑми».
ÐÑобнÑком ÑÑÐ¾Ð¸Ñ Ð²Ð¾ÑÑмой Ñип: «обÑекÑÑ».
Ðн иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÐºÐ¾Ð»Ð»ÐµÐºÑий даннÑÑ Ð¸ Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ ÑложнÑÑ ÑÑÑноÑÑей.
ÐбÑÑвлÑÑÑÑÑ Ð¾Ð±ÑекÑÑ Ð¿Ñи помоÑи ÑигÑÑнÑÑ
Ñкобок {...}, напÑимеÑ:
var user = { name: "ÐаÑÑ" };
ÐÑ Ð¿Ð¾Ð´Ñобно ÑазбеÑÑм ÑпоÑÐ¾Ð±Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑов и, вообÑе, ÑабоÑÑ Ñ Ð¾Ð±ÑекÑами, позже, в главе ÐбÑекÑÑ.
ÐпеÑаÑÐ¾Ñ typeof
ÐпеÑаÑÐ¾Ñ typeof возвÑаÑÐ°ÐµÑ Ñип аÑгÑменÑа.
У него еÑÑÑ Ð´Ð²Ð° ÑинÑакÑиÑа: Ñо Ñкобками и без:
- СинÑакÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑоÑа:
typeof x. - СинÑакÑÐ¸Ñ ÑÑнкÑии:
typeof(x).
РабоÑаÑÑ Ð¾Ð½Ð¸ одинаково, но пеÑвÑй ÑинÑакÑÐ¸Ñ ÐºÐ¾ÑоÑе.
РезÑлÑÑаÑом typeof ÑвлÑеÑÑÑ ÑÑÑока, ÑодеÑжаÑÐ°Ñ Ñип:
typeof undefined // "undefined"
typeof 0 // "number"
typeof 1n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol() // "symbol"
typeof {} // "object"
typeof null // "object" (1)
typeof function(){} // "function" (2)
ÐоÑледние две ÑÑÑоки помеÑенÑ, поÑÐ¾Ð¼Ñ ÑÑо typeof ведÑÑ ÑÐµÐ±Ñ Ð² ниÑ
по-оÑобомÑ.
- РезÑлÑÑаÑ
typeof null == "object"â ÑÑо оÑиÑиалÑно пÑÐ¸Ð·Ð½Ð°Ð½Ð½Ð°Ñ Ð¾Ñибка в ÑзÑке, коÑоÑÐ°Ñ ÑÐ¾Ñ ÑанÑеÑÑÑ Ð´Ð»Ñ ÑовмеÑÑимоÑÑи. Ðа Ñамом делеnullâ ÑÑо не обÑекÑ, а оÑделÑнÑй Ñип даннÑÑ . - ФÑнкÑии Ð¼Ñ Ð¿ÑойдÑм ÑÑÑÑ Ð¿Ð¾Ð·Ð¶Ðµ. Ðока лиÑÑ Ð·Ð°Ð¼ÐµÑим, ÑÑо ÑÑнкÑии не ÑвлÑÑÑÑÑ Ð¾ÑделÑнÑм базовÑм Ñипом в JavaScript, а подвидом обÑекÑов. Ðо
typeofвÑделÑÐµÑ ÑÑнкÑии оÑделÑно, возвÑаÑÐ°Ñ Ð´Ð»Ñ Ð½Ð¸Ñ"function". Ðа пÑакÑике ÑÑо веÑÑма Ñдобно, Ñак как позволÑÐµÑ Ð»ÐµÐ³ÐºÐ¾ опÑеделиÑÑ ÑÑнкÑиÑ.
Ð ÑабоÑе Ñ Ñипами Ð¼Ñ Ñакже веÑнÑмÑÑ Ð±Ð¾Ð»ÐµÐµ подÑобно в бÑдÑÑем, поÑле изÑÑÐµÐ½Ð¸Ñ Ð¾ÑновнÑÑ ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ .
ÐÑого
ÐÑÑÑ 5 «пÑимиÑивнÑÑ
» Ñипов: number, string, boolean, null, undefined и 6-й Ñип â обÑекÑÑ object.
ÐÑÐµÐ½Ñ ÑкоÑо Ð¼Ñ Ð¸Ð·ÑÑим Ð¸Ñ Ð²Ð¾ вÑÐµÑ Ð´ÐµÑалÑÑ .
ÐпеÑаÑÐ¾Ñ typeof x позволÑÐµÑ Ð²ÑÑÑниÑÑ, какой Ñип наÑ
одиÑÑÑ Ð² x, возвÑаÑÐ°Ñ ÐµÐ³Ð¾ в виде ÑÑÑоки.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)