Ð¢Ð¸Ð¿Ñ Ð¸ ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ JavaScript
ÐÑе ÑзÑки пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑодеÑÐ¶Ð°Ñ Ð²ÑÑÑоеннÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ , но они ÑаÑÑо оÑлиÑаÑÑÑÑ Ð´ÑÑг Ð¾Ñ Ð´ÑÑга в ÑазнÑÑ ÑзÑÐºÐ°Ñ . ÐÑа ÑÑаÑÑÑ â попÑÑка опиÑаÑÑ Ð²ÑÑÑоеннÑе ÑÑÑÑкÑÑÑÑ (ÑипÑ) даннÑÑ , доÑÑÑпнÑе в JavaScript, и Ð¸Ñ ÑвойÑÑва. Ðа Ð¸Ñ Ð¾Ñнове ÑÑÑоÑÑÑÑ Ð´ÑÑгие ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ . Ðогда ÑÑо возможно, Ñо Ð¼Ñ Ð±Ñдем ÑÑавниваÑÑ ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² ÑазнÑÑ ÑзÑÐºÐ°Ñ .
ÐинамиÑеÑÐºÐ°Ñ ÑипизаÑиÑ
JavaScript ÑвлÑеÑÑÑ Ñлабо ÑипизиÑованнÑм или динамиÑеÑким ÑзÑком. ÐÑо знаÑиÑ, ÑÑо вам не нÑжно опÑеделÑÑÑ Ñип пеÑеменной заÑанее. Тип опÑеделиÑÑÑ Ð°Ð²ÑомаÑиÑеÑки во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÑогÑаммÑ. Также ÑÑо знаÑиÑ, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¾Ð´Ð½Ñ Ð¿ÐµÑеменнÑÑ Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ ÑазлиÑнÑÑ Ñипов:
var foo = 42; // ÑейÑÐ°Ñ foo Ñипа Number
foo = "bar"; // а ÑепеÑÑ foo Ñипа String
foo = true; // foo ÑÑановиÑÑÑ Ñипа Boolean
Ð¢Ð¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
СÑандаÑÑ ECMAScript опÑеделÑÐµÑ 8 Ñипов:
-
6 Ñипов даннÑÑ ÑвлÑÑÑÐ¸Ñ ÑÑ Ð¿ÑимиÑивами:
- Undefined (ÐеопÑеделÑннÑй Ñип) :
typeof instance === "undefined" - Boolean (ÐÑлев, ÐогиÑеÑкий Ñип) :
typeof instance === "boolean" - Number (ЧиÑло) :
typeof instance === "number" - String (СÑÑока) :
typeof instance === "string" - BigInt :
typeof instance === "bigint" - Symbol (в ECMAScript 6) :
typeof instance === "symbol"
- Undefined (ÐеопÑеделÑннÑй Ñип) :
-
Null (Null Ñип ) :
typeof instance === "object". СпеÑиалÑнÑй пÑимиÑив, иÑполÑзÑемÑй не ÑолÑко Ð´Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð¾ и в каÑеÑÑве ÑказаÑÐµÐ»Ñ Ð½Ð° ÑиналÑнÑÑ ÑоÑÐºÑ Ð² ЦепоÑке ÐÑоÑоÑипов; -
Object (ÐбÑекÑ) :
typeof instance === "object". ÐÑоÑÑÐ°Ñ ÑÑÑÑкÑÑÑа, иÑполÑзÑÐµÐ¼Ð°Ñ Ð½Ðµ ÑолÑко Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , но и Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´ÑÑÐ³Ð¸Ñ ÑÑÑÑкÑÑÑ, где лÑÐ±Ð°Ñ ÑÑÑÑкÑÑÑа ÑоздаÑÑÑÑ Ñ Ð¸ÑполÑзованием клÑÑевого Ñловаnew: new Object, new Array, new Map, new Set, new WeakMap, new WeakSet, new Date и множеÑÑво дÑÑÐ³Ð¸Ñ ÑÑÑÑкÑÑÑ;
РздеÑÑ Ð½Ð°Ð¼ необÑ
одимо ÑделаÑÑ Ð¿ÑедоÑÑеÑежение оÑноÑиÑелÑно иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа typeof Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñипа ÑÑÑÑкÑÑÑ, Ñ.к. вÑе ÑÑÑÑкÑÑÑÑ Ð±ÑдÑÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ "object" пÑи его иÑполÑзовании, Ñак как назнаÑение typeof â пÑовеÑка Ñипа даннÑÑ
, но не ÑÑÑÑкÑÑÑ. ÐÑли пÑовеÑиÑÑ Ñип ÑÑÑÑкÑÑÑÑ Ð²ÑÑ Ð¶Ðµ необÑ
одимо, Ñо в ÑÑом ÑлÑÑае желаÑелÑно иÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ instanceof, Ñак как именно он оÑвеÑÐ°ÐµÑ Ð½Ð° вопÑÐ¾Ñ Ð¾ Ñом, какой конÑÑÑÑкÑÐ¾Ñ Ð±Ñл иÑполÑзован Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑÑÑкÑÑÑÑ.
СÑÐ¾Ð¸Ñ Ð¾ÑмеÑиÑÑ Ð´Ð²Ð° оÑобÑÑ
ÑлÑÑÐ°Ñ ÑабоÑÑ Ð¾Ð¿ÐµÑаÑоÑа typeof: возвÑÐ°Ñ "object" Ð´Ð»Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ null и "function" Ð´Ð»Ñ ÑÑнкÑий: пеÑвое пÑинÑÑо ÑÑиÑаÑÑ Ð¾Ñибкой ÑзÑка, ÑоÑ
Ñаненной Ñади обÑаÑной ÑовмеÑÑимоÑÑи, вÑоÑое ÑвлÑеÑÑÑ ÑÑловноÑÑÑÑ, Ñдобной Ð´Ð»Ñ Ð¿ÑовеÑки на пÑинадлежноÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÐºÐ°ÑегоÑии ÑÑнкÑий, где ÑÑнкÑÐ¸Ñ - ÑÑо оÑобÑй, "вÑзÑваемÑй", обÑекÑ.
ÐÑимиÑивнÑе знаÑениÑ
ÐÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² JavaScript, кÑоме обÑекÑов, ÑвлÑÑÑÑÑ Ð¸Ð¼Ð¼ÑÑабелÑнÑми (знаÑÐµÐ½Ð¸Ñ Ð½Ðµ могÑÑ Ð±ÑÑÑ Ð¼Ð¾Ð´Ð¸ÑиÑиÑованÑ, а ÑолÑко пеÑезапиÑÐ°Ð½Ñ Ð½Ð¾Ð²Ñм полнÑм знаÑением). ÐапÑимеÑ, в оÑлиÑии Ð¾Ñ C, где ÑÑÑÐ¾ÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ поÑимволÑно коÑÑекÑиÑоваÑÑ, в JavaScript ÑÑÑоки пеÑеÑоздаÑÑÑÑ ÑолÑко полноÑÑÑÑ. ÐнаÑÐµÐ½Ð¸Ñ ÑÐ°ÐºÐ¸Ñ Ñипов назÑваÑÑÑÑ Â«Ð¿ÑимиÑивнÑми знаÑениÑми».
ÐÑлевÑй Ñип даннÑÑ
ÐÑлевÑй Ñип пÑедÑÑавлÑÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑÑÑноÑÑÑ Ð¸ Ð¸Ð¼ÐµÐµÑ Ð´Ð²Ð° знаÑениÑ: true (иÑÑина) и false (ложÑ). СмоÑÑиÑе Boolean и Boolean Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÑобноÑÑей.
Null
ÐÑÐ¾Ñ Ñип даннÑÑ
Ð¸Ð¼ÐµÐµÑ Ð²Ñего одно знаÑение: null. СмоÑÑиÑе null и Null Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÑобноÑÑей.
Undefined
ÐеÑеменнаÑ, коÑоÑой не бÑло пÑиÑвоено знаÑение, бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°Ñение undefined. СмоÑÑиÑе undefined и undefined Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÑобноÑÑей.
ЧиÑла
Ð ÑооÑвеÑÑÑвии Ñо ÑÑандаÑÑом ECMAScript, ÑÑÑеÑÑвÑÐµÑ ÑолÑко один ÑиÑловой Ñип, коÑоÑÑй пÑедÑÑавлÑÐµÑ Ñобой 64-биÑное ÑиÑло двойной ÑоÑноÑÑи ÑоглаÑно ÑÑандаÑÑÑ IEEE 754. ÐÑÑгими Ñловами, ÑпеÑиалÑного Ñипа Ð´Ð»Ñ ÑелÑÑ
ÑиÑел в JavaScript неÑ. ÐÑо ознаÑаеÑ, ÑÑо пÑи ÑиÑловÑÑ
опеÑаÑиÑÑ
Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ Ð½ÐµÑоÑное (окÑÑглÑнное) знаÑение. Рдополнение к возможноÑÑи пÑедÑÑавлÑÑÑ ÑиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей запÑÑой, еÑÑÑ Ð½ÐµÑколÑко ÑимволиÑеÑкиÑ
знаÑений: +Infinity (положиÑелÑÐ½Ð°Ñ Ð±ÐµÑконеÑноÑÑÑ), -Infinity (оÑÑиÑаÑелÑÐ½Ð°Ñ Ð±ÐµÑконеÑноÑÑÑ), и NaN (не ÑиÑло).
ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ñамого болÑÑого или Ñамого менÑÑего доÑÑÑпного знаÑÐµÐ½Ð¸Ñ Ð² пÑеделаÑ
+/-Infinity, можно иÑполÑзоваÑÑ ÐºÐ¾Ð½ÑÑанÑÑ Number.MAX_VALUE или Number.MIN_VALUE. РнаÑÐ¸Ð½Ð°Ñ Ñ ECMAScript 2015, Ð²Ñ Ñакже можеÑе пÑовеÑиÑÑ, наÑ
одиÑÑÑ Ð»Ð¸ ÑиÑло в безопаÑном Ð´Ð»Ñ ÑелÑÑ
ÑиÑел диапазоне, иÑполÑзÑÑ Ð¼ÐµÑод Number.isSafeInteger(), либо конÑÑанÑÑ Number.MAX_SAFE_INTEGER и Number.MIN_SAFE_INTEGER. Ðа пÑеделами ÑÑого диапазона опеÑаÑии Ñ ÑелÑми ÑиÑлами бÑдÑÑ Ð½ÐµÐ±ÐµÐ·Ð¾Ð¿Ð°ÑнÑми, и возвÑаÑаÑÑ Ð¿ÑиближÑннÑе знаÑениÑ.
ÐÐ¾Ð»Ñ Ð² JavaScript Ð¸Ð¼ÐµÐµÑ Ð´Ð²Ð° пÑедÑÑавлениÑ: -0 и +0. («0» ÑÑо Ñиноним +0). Ðа пÑакÑике ÑÑо Ð¸Ð¼ÐµÐµÑ Ð¼Ð°Ð»Ð¾Ð·Ð°Ð¼ÐµÑнÑй ÑÑÑекÑ. ÐапÑимеÑ, вÑÑажение +0 === -0 ÑвлÑеÑÑÑ Ð¸ÑÑиннÑм. Ðднако, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоÑвиÑÑÑÑ Ð¿Ñи делении на нолÑ:
> 42 / +0
Infinity
> 42 / -0
-Infinity
ХоÑÑ ÑиÑло в болÑÑинÑÑве ÑлÑÑаев пÑедÑÑавлÑÐµÑ ÑолÑко ÑÐ²Ð¾Ñ Ð·Ð½Ð°Ñение, JavaScript пÑедоÑÑавлÑÐµÑ Ð½ÐµÑколÑко бинаÑнÑÑ Ð¾Ð¿ÐµÑаÑий. Ðни могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿ÑедÑÑавлÑÑÑ ÑиÑло как неÑколÑко бÑлевÑÑ Ð·Ð½Ð°Ñений, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð±Ð¸Ñовой маÑки. ÐÑо ÑÑиÑаеÑÑÑ Ð¿Ð»Ð¾Ñ Ð¾Ð¹ пÑакÑикой, Ñак как JavaScript пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ Ð´ÑÑгие ÑпоÑÐ¾Ð±Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð±ÑлевÑÑ Ð·Ð½Ð°Ñений (напÑимеÑ, маÑÑив ÑлеменÑов Ñ Ð±ÑлевÑми знаÑениÑми или обÑекÑ, ÑодеÑжаÑий Ð½Ð°Ð±Ð¾Ñ Ð±ÑлевÑÑ ÑвойÑÑв). ÐÑоме Ñого, биÑовÑе маÑки ÑаÑÑо делаÑÑ ÐºÐ¾Ð´ более ÑÑÑднÑм Ð´Ð»Ñ ÑÑениÑ, Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¸ далÑнейÑей поддеÑжки. ÐÑа ÑÐµÑ Ð½Ð¸ÐºÐ° Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð° в ÑÑловиÑÑ ÑÐµÑ Ð½Ð¸ÑеÑÐºÐ¸Ñ Ð¾Ð³ÑаниÑений, ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº обÑÑм локалÑного Ñ ÑанилиÑа даннÑÑ , или в Ñакой ÑкÑÑÑемалÑной ÑиÑÑаÑии, когда каждÑй Ð±Ð¸Ñ Ð¿ÐµÑедаваемÑй по ÑеÑи на ÑÑеÑÑ. ÐаннÑй Ð¿Ð¾Ð´Ñ Ð¾Ð´ ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÐºÐ°Ðº кÑайнÑÑ Ð¼ÐµÑÑ, когда не оÑÑаÑÑÑÑ Ð´ÑÑÐ³Ð¸Ñ Ð¿ÑÑей Ð´Ð»Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð¹ опÑимизаÑии.
ТекÑÑовÑе ÑÑÑоки
Ð JavaScript Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑекÑÑовÑÑ
даннÑÑ
ÑлÑÐ¶Ð¸Ñ Ñип String. Ðн пÑедÑÑавлÑÐµÑ Ñобой ÑепоÑÐºÑ Â«ÑлеменÑов» 16-биÑнÑÑ
беззнаковÑÑ
ÑелоÑиÑленнÑÑ
знаÑений. ÐаждÑй Ñакой ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ ÑÐ²Ð¾Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð² ÑÑÑоке. ÐеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¸Ð¼ÐµÐµÑ Ð¸Ð½Ð´ÐµÐºÑ 0, ÑледÑÑÑий â 1, и Ñак далее. Ðлина ÑÑÑоки â ÑÑо колиÑеÑÑво ÑлеменÑов в ней.
РоÑлиÑие Ð¾Ñ ÑзÑков подобнÑÑ C, ÑÑÑоки в JavaScript ÑвлÑÑÑÑÑ Ð¸Ð¼Ð¼ÑÑабелÑнÑми. ÐÑо ознаÑаеÑ, ÑÑо поÑле Ñого, как ÑÑÑоковое знаÑение Ñоздано, его нелÑÐ·Ñ Ð¼Ð¾Ð´Ð¸ÑиÑиÑоваÑÑ. ÐÑÑаÑÑÑÑ Ð»Ð¸ÑÑ ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ ÑÑÑÐ¾ÐºÑ Ð¿ÑÑÑм ÑовеÑÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾Ð¹ опеÑаÑии над иÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑокой. ÐапÑимеÑ:
- ÐолÑÑиÑÑ ÑаÑÑÑ Ð¸ÑÑ
одной ÑÑÑоки вÑбоÑкой оÑделÑнÑÑ
Ñимволов, либо пÑименением меÑода
String.substr(). - ÐбÑединиÑÑ Ð´Ð²Ðµ ÑÑÑоки в однÑ, пÑименив опеÑаÑÐ¾Ñ (
+) или меÑодString.concat().
ÐзбегайÑе повÑемеÑÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑÑок в ÑвоÑм коде!
Ðногда Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ ÑоблазниÑелÑнÑм иÑполÑзование ÑÑÑок Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑложнÑÑ ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ . ÐÑо даÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑие кÑаÑкоÑÑоÑнÑе вÑгодÑ:
- Ðегко ÑоединÑÑÑ Ð´Ð°Ð½Ð½Ñе в кÑÑÑ Ñложением ÑÑÑок.
- Ðегко оÑлаживаÑÑ (даннÑе вÑглÑдÑÑ Â«ÐºÐ°Ðº еÑÑÑ», в ÑиÑаемом ÑекÑÑовом виде).
- СÑÑоки â ÑÑо ÑаÑпÑоÑÑÑанÑннÑй ÑоÑÐ¼Ð°Ñ Ð´Ð°Ð½Ð½ÑÑ
, иÑполÑзÑемÑй ÑазнообÑазнÑми API (Ð¿Ð¾Ð»Ñ Ð²Ð²Ð¾Ð´Ð°, знаÑÐµÐ½Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»Ñного Ñ
ÑанилиÑа,
XMLHttpRequestвозвÑаÑÐ°ÐµÑ Ð¾ÑÐ²ÐµÑ Ð² виде ÑÑÑоки, и Ñ. д.) и иÑполÑзоваÑÑ ÑолÑко ÑÑÑоки Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð·Ð°Ð¼Ð°Ð½ÑивÑм.
ÐеÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо в ÑÑÑоке можно вÑÑазиÑÑ Ð´Ð°Ð½Ð½Ñе лÑбой ÑложноÑÑи, делаÑÑ ÑÑо â не ÑÐ°Ð¼Ð°Ñ Ð»ÑÑÑÐ°Ñ Ð¸Ð´ÐµÑ. ÐапÑимеÑ, иÑполÑзÑÑ ÑазделиÑелÑ, ÑÑÑÐ¾ÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ ÐºÐ°Ðº ÑпиÑок ÑлеменÑов (маÑÑив JavaScript бÑÐ´ÐµÑ Ð±Ð¾Ð»ÐµÐµ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑим ÑеÑением). Ð ÑожалениÑ, еÑли Ñакой ÑепаÑаÑÐ¾Ñ Ð²ÑÑÑеÑиÑÑÑ Ð² знаÑении одного из ÑлеменÑов, Ñакой ÑпиÑок бÑÐ´ÐµÑ Ñломан. ÐÑÑ Ð¾Ð´Ð¾Ð¼ Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ñимвола ÑкÑаниÑованиÑ, и Ñ. д. ÐÑÑ ÑÑо поÑÑебÑÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑва ненÑжнÑÑ Ð¿Ñавил, и ÑÑÐ°Ð½ÐµÑ Ð¾Ð±ÑемениÑелÑнÑм пÑи поддеÑжке.
ÐÑполÑзÑйÑе ÑÑÑоки ÑолÑко Ð´Ð»Ñ ÑекÑÑовÑÑ Ð´Ð°Ð½Ð½ÑÑ . ÐÐ»Ñ ÑоÑÑавнÑÑ ÑÑÑÑкÑÑÑ Ð¿ÑеобÑазÑйÑе ÑÑÑоки в подобаÑÑие конÑÑÑÑкÑии.
Тип даннÑÑ Ð¡Ð¸Ð¼Ð²Ð¾Ð» (Symbol)
Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ ÑвлÑÑÑÑÑ Ð½Ð¾Ð²Ð¾Ð²Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÐ¼ JavaScript наÑÐ¸Ð½Ð°Ñ Ñ ECMAScript 2015. Символ â ÑÑо ÑникалÑное и иммÑÑабелÑное пÑимиÑивное знаÑение, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзовано как клÑÑ Ð´Ð»Ñ ÑвойÑÑва обÑекÑа (ÑмоÑÑиÑе ниже). РнекоÑоÑÑÑ
ÑзÑкаÑ
пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ð°Ð·ÑваÑÑÑÑ Ð°Ñомами. ÐÑ
Ñакже можно ÑÑавниÑÑ Ñ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ñми знаÑениÑми пеÑеÑиÑÐ»ÐµÐ½Ð¸Ñ (enum) в ÑзÑке C. ÐодÑобнее ÑмоÑÑиÑе Symbol и Symbol.
Тип даннÑÑ ÐолÑÑое Ñелое (BigInt)
BigInt ÑвлÑеÑÑÑ Ð²ÑÑÑоеннÑм обÑекÑом, коÑоÑÑй пÑедоÑÑавлÑÐµÑ ÑпоÑоб пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑелÑÑ
ÑиÑел, коÑоÑÑе болÑÑе 2 53, ÑÑо ÑвлÑеÑÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑим ÑиÑлом, коÑоÑое JavaScript Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ð´Ñжно пÑедÑÑавиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Number пÑимиÑива.
> let bigInt = 19241924124n;
> console.log(bigInt);
19241924124n
> console.log(typeof bigInt);
"bigint"
ÐбÑекÑÑ
РкомпÑÑÑеÑной ÑеÑминологии, обÑÐµÐºÑ â ÑÑо знаÑение в памÑÑи, на коÑоÑое возможно ÑоÑлаÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑа.
СвойÑÑва
Ð JavaScript обÑÐµÐºÑ Ð¼Ð¾Ð¶ÐµÑ ÑаÑÑениваÑÑÑÑ ÐºÐ°Ðº Ð½Ð°Ð±Ð¾Ñ ÑвойÑÑв. ÐиÑеÑалÑÐ½Ð°Ñ Ð¸Ð½Ð¸ÑиализаÑÐ¸Ñ Ð¾Ð±ÑекÑа задаÑÑ Ð¾Ð¿ÑеделÑнное колиÑеÑÑво наÑалÑнÑÑ ÑвойÑÑв, и в пÑоÑеÑÑе ÑабоÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ñ Ð¼Ð¾Ð³ÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑÑÑ Ð¸ ÑдалÑÑÑÑÑ. ÐнаÑÐµÐ½Ð¸Ñ ÑвойÑÑв могÑÑ Ð¸Ð¼ÐµÑÑ Ð»Ñбой Ñип, вклÑÑÐ°Ñ Ð´ÑÑгие обÑекÑÑ, ÑÑо позволÑÐµÑ ÑÑÑоиÑÑ ÑложнÑе, ÑазвеÑвлÑннÑе иеÑаÑÑ Ð¸Ð¸ даннÑÑ . Ðаждое ÑвойÑÑво обÑекÑа иденÑиÑиÑиÑÑеÑÑÑ ÐºÐ»ÑÑом, в каÑеÑÑве коÑоÑого Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑÑÑпаÑÑ Ð·Ð½Ð°Ñение Ñ Ñипом СÑÑока или Символ.
ÐÑÑÑ Ð´Ð²Ð° Ñипа ÑвойÑÑв: ÑвойÑÑво-знаÑение и ÑвойÑÑво-акÑеÑÑÐ¾Ñ (ÑвойÑÑво, обÑÑнÑÑое в геÑÑÐµÑ Ð¸ ÑеÑÑеÑ). Ðни оÑлиÑаÑÑÑÑ Ð¾Ð¿ÑеделÑннÑми аÑÑибÑÑами.
СвойÑÑво-знаÑение
ÐÑÑоÑииÑÑÐµÑ ÐºÐ»ÑÑ Ñо знаÑением, и Ð¸Ð¼ÐµÐµÑ ÑледÑÑÑие аÑÑибÑÑÑ:
| ÐÑÑибÑÑ | Тип | ÐпиÑание | ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ |
|---|---|---|---|
| [[Value]] | ÐÑбой Ñип JavaScript | ÐнаÑение, возвÑаÑаемое пÑи обÑаÑении к ÑвойÑÑвÑ. | undefined |
| [[Writable]] | Boolean | ÐÑли false, Ñо [[Value]] ÑвойÑÑва не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¾. |
false |
| [[Enumerable]] | Boolean | ÐÑли true, ÑвойÑÑво бÑÐ´ÐµÑ Ð¿ÐµÑеÑиÑлено в Ñикле for...in. СмоÑÑиÑе подÑобнее ÐеÑеÑиÑлÑемоÑÑÑ Ð¸ владение ÑвойÑÑвами. |
false |
| [[Configurable]] | Boolean | ÐÑли false, Ñо ÑвойÑÑво не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñдалено, а его аÑÑибÑÑÑ, кÑоме [[Value]] и [[Writable]] не могÑÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ. |
false |
| ÐÑÑибÑÑ | Тип | ÐпиÑание |
|---|---|---|
| Read-only | Boolean | ÐаÑезеÑвиÑовано по аÑÑибÑÑÑ [[Writable]] ES5. |
| DontEnum | Boolean | ÐаÑезеÑвиÑовано по аÑÑибÑÑÑ [[Enumerable]] ES5. |
| DontDelete | Boolean | ÐаÑезеÑвиÑовано по аÑÑибÑÑÑ [[Configurable]] ES5. |
СвойÑÑво-акÑеÑÑоÑ
ÐÑÑоÑииÑÑÐµÑ ÐºÐ»ÑÑ Ñ Ð¾Ð´Ð½Ð¾Ð¹ из двÑÑ ÑÑнкÑий-акÑеÑÑоÑов (геÑÑÐµÑ Ð¸ ÑеÑÑеÑ) Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑвойÑÑва, и Ð¸Ð¼ÐµÐµÑ ÑледÑÑÑий аÑÑибÑÑÑ:
| ÐÑÑибÑÑ | Тип | ÐпиÑание | ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ |
|---|---|---|---|
| [[Get]] | Function или undefined | ФÑнкÑÐ¸Ñ Ð²ÑзÑваеÑÑÑ Ð±ÐµÐ· паÑамеÑÑов и возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение ÑвойÑÑва каждÑй Ñаз, когда пÑоиÑÑ
Ð¾Ð´Ð¸Ñ ÑÑение ÑвойÑÑва. СмоÑÑиÑе Ñакже get. |
undefined |
| [[Set]] | Function или undefined | ФÑнкÑÐ¸Ñ Ð²ÑзÑваеÑÑÑ Ñ Ð¾Ð´Ð½Ð¸Ð¼ аÑгÑменÑом, ÑодеÑжаÑим пÑиÑваиваемое знаÑение, каждÑй Ñаз, когда пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð¿ÑÑка пÑиÑвоиÑÑ ÑвойÑÑÐ²Ñ Ð½Ð¾Ð²Ð¾Ðµ знаÑение. СмоÑÑиÑе Ñакже set. |
undefined |
| [[Enumerable]] | Boolean | ÐÑли true, ÑвойÑÑво бÑÐ´ÐµÑ Ð¿ÐµÑеÑиÑлено в Ñикле for...in. |
false |
| [[Configurable]] | Boolean | ÐÑли false, Ñо ÑвойÑÑво не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñдалено, и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеобÑазовано в ÑвойÑÑво-знаÑение. |
false |
ÐÑимеÑание: ÐÑÑибÑÑÑ Ð¾Ð±ÑÑно иÑполÑзÑÑÑÑÑ Ð´Ð²Ð¸Ð¶ÐºÐ¾Ð¼ JavaScript, поÑÑÐ¾Ð¼Ñ Ð²Ñ Ð½Ðµ можеÑе обÑаÑиÑÑÑÑ Ðº ним напÑÑмÑÑ (ÑмоÑÑиÑе подÑобнее Object.defineProperty()). ÐÐ¾Ñ Ð¿Ð¾ÑÐµÐ¼Ñ Ð² ÑаблиÑÐ°Ñ Ð²ÑÑе они помеÑÐµÐ½Ñ Ð² двойнÑе квадÑаÑнÑе Ñкобки вмеÑÑо одиноÑнÑÑ .
«ÐбÑÑнÑе» обÑекÑÑ Ð¸ ÑÑнкÑии
ÐбÑÐµÐºÑ JavaScript â ÑÑо ÑаблиÑа ÑооÑноÑений Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»ÑÑами и знаÑениÑми. ÐлÑÑи â ÑÑо ÑÑÑоки (или Symbol), а знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð»ÑбÑми. ÐÑо Ð´ÐµÐ»Ð°ÐµÑ Ð¾Ð±ÑекÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¾ÑвеÑаÑÑими опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ
еÑ-ÑаблиÑÑ.
ФÑнкÑии â ÑÑо обÑÑнÑе обÑекÑÑ, имеÑÑие дополниÑелÑнÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð±ÑÑÑ Ð²ÑзваннÑми Ð´Ð»Ñ Ð¸ÑполнениÑ.
ÐаÑÑ
ÐÐ»Ñ ÑабоÑÑ Ñ Ð´Ð°Ñами ÑлÑÐ¶Ð¸Ñ Ð²ÑÑÑоеннÑй глобалÑнÑй обÑÐµÐºÑ Date.
ÐаÑÑÐ¸Ð²Ñ Ð¾Ð±Ñие и ÑипизиÑованнÑе
ÐаÑÑив â ÑÑо обÑÑнÑй обÑÐµÐºÑ Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной ÑвÑзÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑелоÑиÑленнÑми клÑÑами его ÑвойÑÑв и ÑпеÑиалÑнÑм ÑвойÑÑвом length. Ðдобавок ко вÑемÑ, маÑÑÐ¸Ð²Ñ Ð½Ð°ÑледÑÑÑ Array.prototype, пÑедоÑÑавлÑÑÑий иÑÑеÑпÑваÑÑий Ð½Ð°Ð±Ð¾Ñ Ð¼ÐµÑодов Ð´Ð»Ñ Ð¼Ð°Ð½Ð¸Ð¿ÑлÑÑии маÑÑивами. ÐапÑимеÑ, меÑод indexOf (ÑлÑÐ¶Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка знаÑÐµÐ½Ð¸Ñ Ð² маÑÑиве), push (добавлÑÐµÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² ÐºÐ¾Ð½ÐµÑ Ð¼Ð°ÑÑива) и Ñ. д. ÐÑÑ ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð¼Ð°ÑÑив идеалÑнÑм кандидаÑом Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑпиÑков и пеÑеÑиÑлений.
ТипизиÑованнÑе маÑÑÐ¸Ð²Ñ ÑвлÑÑÑÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñми маÑÑивам пÑедÑÑавлениÑми набоÑов бинаÑнÑÑ
даннÑÑ
и пÑедлагаÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво меÑодов, ÑеманÑика коÑоÑÑÑ
аналогиÑна аналогам маÑÑива. "ТипизиÑованнÑй маÑÑив" ÑÑо обÑий ÑеÑмин Ð´Ð»Ñ ÑÑда ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
, вклÑÑÐ°Ñ Int8Array, Float32Array и Ñ.д. ÐодÑобнее о ниÑ
можно ÑзнаÑÑ Ð² ÑÑководÑÑве о ÑипизиÑованнÑÑ
маÑÑиваÑ
. ТипизиÑованнÑе маÑÑÐ¸Ð²Ñ ÑаÑÑо иÑполÑзÑÑÑÑÑ Ð²Ð¼ÐµÑÑе Ñ ArrayBuffer и DataView.
ÐоллекÑии: Maps, Sets, WeakMaps, WeakSets
ÐÑи набоÑÑ Ð´Ð°Ð½Ð½ÑÑ
иÑполÑзÑÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° обÑÐµÐºÑ Ð² каÑеÑÑве клÑÑа, и Ð²Ð²ÐµÐ´ÐµÐ½Ñ Ð² JavaScript Ñ Ð¿ÑиÑ
одом ECMAScript Edition 6. Set и WeakSet ÑвлÑÑÑ Ñобой Ð½Ð°Ð±Ð¾Ñ ÑникалÑнÑÑ
обÑекÑов, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº Map и WeakMap аÑÑоÑииÑÑÑÑ Ñ Ð¾Ð±ÑекÑом (вÑÑÑÑпаÑÑим в каÑеÑÑве клÑÑа) некоÑоÑое знаÑение. РазниÑа Ð¼ÐµÐ¶Ð´Ñ Map и WeakMap заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо ÑолÑко Ñ Map клÑÑи ÑвлÑÑÑÑÑ Ð¿ÐµÑеÑиÑлÑемÑми. ÐÑо позволÑÐµÑ Ð¾Ð¿ÑимизиÑоваÑÑ ÑбоÑÐºÑ Ð¼ÑÑоÑа Ð´Ð»Ñ WeakMap.
Ðожно бÑло Ð±Ñ Ð½Ð°Ð¿Ð¸ÑаÑÑ ÑобÑÑвеннÑÑ ÑеализаÑÐ¸Ñ Map и Set на ÑиÑÑом ECMAScript 5. Ðднако, Ñак как обÑекÑÑ Ð½ÐµÐ»ÑÐ·Ñ ÑÑавниваÑÑ Ð½Ð° болÑÑе или менÑÑе, Ñо пÑоизводиÑелÑноÑÑÑ Ð¿Ð¾Ð¸Ñка в ÑамоделÑной ÑеализаÑии бÑÐ´ÐµÑ Ð²ÑнÑжденно линейной. ÐаÑÐ¸Ð²Ð½Ð°Ñ ÑеализаÑÐ¸Ñ (вклÑÑÐ°Ñ WeakMap) Ð¸Ð¼ÐµÐµÑ Ð¿ÑоизводиÑелÑноÑÑÑ Ð»Ð¾Ð³Ð°ÑиÑмиÑеÑки близкÑÑ Ðº конÑÑанÑе.
ÐбÑÑно, Ð´Ð»Ñ Ð¿ÑивÑзки некоÑоÑÑÑ
даннÑÑ
к ÑÐ·Ð»Ñ DOM, пÑиÑ
одиÑÑÑ ÑÑÑанавливаÑÑ ÑвойÑÑва ÑÑÐ¾Ð¼Ñ ÑÐ·Ð»Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно, либо иÑполÑзоваÑÑ ÐµÐ³Ð¾ аÑÑибÑÑÑ data-*. ÐбÑаÑной ÑÑоÑоной Ñакого подÑ
ода ÑвлÑеÑÑÑ Ñо, ÑÑо ÑÑи даннÑе бÑдÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð»ÑÐ±Ð¾Ð¼Ñ ÑкÑипÑÑ, ÑабоÑаÑÑÐµÐ¼Ñ Ð² Ñом же конÑекÑÑе. Maps и WeakMaps даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿ÑиваÑной пÑивÑзки даннÑÑ
к обÑекÑÑ.
СÑÑÑкÑÑÑиÑованнÑе даннÑе: JSON
JSON (JavaScript Object Notation) â ÑÑо легковеÑнÑй ÑоÑÐ¼Ð°Ñ Ð¾Ð±Ð¼ÐµÐ½Ð° даннÑми, пÑоиÑÑ
одÑÑий Ð¾Ñ JavaScript, но иÑполÑзÑемÑй во множеÑÑве ÑзÑков пÑогÑаммиÑованиÑ. JSON ÑÑÑÐ¾Ð¸Ñ ÑнивеÑÑалÑнÑе ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
. СмоÑÑиÑе JSON и JSON Ð´Ð»Ñ Ð´ÐµÑалÑного изÑÑениÑ.
ÐолÑÑе обÑекÑов и ÑÑандаÑÑÐ½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека
JavaScript Ð¸Ð¼ÐµÐµÑ ÑÑандаÑÑнÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð²ÑÑÑоеннÑÑ Ð¾Ð±ÑекÑов. ÐожалÑйÑÑа, обÑаÑиÑеÑÑ Ðº ÑпÑавоÑникÑ, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи опиÑание вÑÐµÑ Ð¾Ð±ÑекÑов доÑÑÑпнÑÑ Ð´Ð»Ñ ÑабоÑÑ.
ÐпÑеделение Ñипов опеÑаÑоÑом typeof
ÐпеÑаÑÐ¾Ñ typeof Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð¾Ð¿ÑеделиÑÑ Ñип ваÑей пеÑеменной. СмоÑÑиÑе ÑÑÑаниÑÑ Ð´Ð¾ÐºÑменÑаÑии, где пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ ÐµÐ³Ð¾ деÑали и ÑлÑÑаи иÑполÑзованиÑ.