JavaScript позволÑÐµÑ Ð½Ð°Ð¼ ÑабоÑаÑÑ Ñ Ð¿ÑимиÑивнÑми Ñипами даннÑÑ â ÑÑÑоками, ÑиÑлами и Ñ.д., как бÑдÑо они ÑвлÑÑÑÑÑ Ð¾Ð±ÑекÑами. У Ð½Ð¸Ñ ÐµÑÑÑ Ð¸ меÑодÑ. ÐÑ Ð¸Ð·ÑÑим Ð¸Ñ Ð¿Ð¾Ð·Ð¶Ðµ, а ÑнаÑала ÑазбеÑÑм, как ÑÑо вÑÑ ÑабоÑаеÑ, поÑÐ¾Ð¼Ñ ÑÑо, конеÑно, пÑимиÑÐ¸Ð²Ñ â не обÑекÑÑ.
ÐавайÑе взглÑнем на клÑÑевÑе ÑазлиÑÐ¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð¿ÑимиÑивами и обÑекÑами.
ÐÑимиÑив
- ÐÑо â знаÑение «пÑимиÑивного» Ñипа.
- ÐÑÑÑ 7 пÑимиÑивнÑÑ
Ñипов:
string,number,boolean,symbol,null,undefinedиbigint.
ÐбÑекÑ
- ÐÐ¾Ð¶ÐµÑ Ñ ÑаниÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво знаÑений как ÑвойÑÑва.
- ÐбÑÑвлÑеÑÑÑ Ð¿Ñи помоÑи ÑигÑÑнÑÑ
Ñкобок
{}, напÑимеÑ:{name: "Рома", age: 30}. Ð JavaScript еÑÑÑ Ð¸ дÑÑгие Ð²Ð¸Ð´Ñ Ð¾Ð±ÑекÑов: напÑимеÑ, ÑÑнкÑии Ñоже ÑвлÑÑÑÑÑ Ð¾Ð±ÑекÑами.
Ðдна из лÑÑÑÐ¸Ñ Ð¾ÑобенноÑÑей обÑекÑов â ÑÑо Ñо, ÑÑо Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ Ñ ÑаниÑÑ ÑÑнкÑÐ¸Ñ ÐºÐ°Ðº одно из ÑвойÑÑв обÑекÑа.
let roma = {
name: "Рома",
sayHi: function() {
alert("ÐÑивеÑ, дÑÑжиÑе!");
}
};
roma.sayHi(); // ÐÑивеÑ, дÑÑжиÑе!
ÐдеÑÑ Ð¼Ñ Ñоздали обÑÐµÐºÑ roma Ñ Ð¼ÐµÑодом sayHi.
СÑÑеÑÑвÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво вÑÑÑоеннÑÑ Ð¾Ð±ÑекÑов. ÐапÑимеÑ, Ñе, коÑоÑÑе ÑабоÑаÑÑ Ñ Ð´Ð°Ñами, оÑибками, HTML-ÑлеменÑами и Ñ.д. Ðни имеÑÑ ÑазлиÑнÑе ÑвойÑÑва и меÑодÑ.
Ðднако Ñ ÑÑÐ¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑей еÑÑÑ Ð¾Ð±ÑаÑÐ½Ð°Ñ ÑÑоÑона!
ÐбÑекÑÑ Â«ÑÑжелее» пÑимиÑивов. Ðни нÑждаÑÑÑÑ Ð² дополниÑелÑнÑÑ ÑеÑÑÑÑÐ°Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð°Ð½Ð¸Ñ Ð²Ð½ÑÑÑенней ÑÑÑÑкÑÑÑÑ.
ÐÑимиÑив как обÑекÑ
ÐÐ¾Ñ Ð¿Ð°ÑадокÑ, Ñ ÐºÐ¾ÑоÑÑм ÑÑолкнÑлÑÑ ÑоздаÑÐµÐ»Ñ JavaScript:
- ÐÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ вÑего, ÑÑо Ñ Ð¾ÑелоÑÑ Ð±Ñ ÑделаÑÑ Ñ Ð¿ÑимиÑивами, Ñакими как ÑÑÑока или ÑиÑло. ÐÑло Ð±Ñ Ð·Ð°Ð¼ÐµÑаÑелÑно, еÑли Ð±Ñ Ð¼Ñ Ð¼Ð¾Ð³Ð»Ð¸ обÑаÑаÑÑÑÑ Ðº ним пÑи помоÑи меÑодов.
- ÐÑимиÑÐ¸Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð»Ñгкими и бÑÑÑÑÑми наÑколÑко ÑÑо возможно.
ÐÑбÑанное ÑеÑение, Ñ Ð¾ÑÑ Ð²ÑглÑÐ´Ð¸Ñ Ð¾Ð½Ð¾ немного неÑклÑже:
- ÐÑимиÑÐ¸Ð²Ñ Ð¾ÑÑаÑÑÑÑ Ð¿ÑимиÑивами. Ðдно знаÑение, как и Ñ Ð¾ÑелоÑÑ.
- ЯзÑк позволÑÐµÑ Ð¾ÑÑÑеÑÑвлÑÑÑ Ð´Ð¾ÑÑÑп к меÑодам и ÑвойÑÑвам ÑÑÑок, ÑиÑел, бÑлевÑÑ Ð·Ð½Ð°Ñений и Ñимволов.
- ЧÑÐ¾Ð±Ñ ÑÑо ÑабоÑало, пÑи Ñаком доÑÑÑпе ÑоздаÑÑÑÑ ÑпеÑиалÑнÑй «обÑекÑ-обÑÑÑка», коÑоÑÑй пÑедоÑÑавлÑÐµÑ Ð½ÑжнÑÑ ÑÑнкÑионалÑноÑÑÑ, а поÑле ÑдалÑеÑÑÑ.
ÐаждÑй пÑимиÑив Ð¸Ð¼ÐµÐµÑ Ñвой ÑобÑÑвеннÑй «обÑекÑ-обÑÑÑкÑ», коÑоÑÑе назÑваÑÑÑÑ: String, Number, Boolean, Symbol и BigInt. Таким обÑазом, они имеÑÑ ÑазнÑй Ð½Ð°Ð±Ð¾Ñ Ð¼ÐµÑодов.
РпÑимеÑÑ, ÑÑÑеÑÑвÑÐµÑ Ð¼ÐµÑод str.toUpperCase(), коÑоÑÑй возвÑаÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð² веÑÑ Ð½ÐµÐ¼ ÑегиÑÑÑе.
ÐоÑ, как он ÑабоÑаеÑ:
let str = "ÐÑивеÑ";
alert( str.toUpperCase() ); // ÐÐ ÐÐÐТ
ÐÑÐµÐ½Ñ Ð¿ÑоÑÑо, не пÑавда ли? ÐоÑ, ÑÑо на Ñамом деле пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð² str.toUpperCase():
- СÑÑока
strâ пÑимиÑив. Ð Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº его ÑвойÑÑвÑ, ÑоздаÑÑÑÑ ÑпеÑиалÑнÑй обÑекÑ, коÑоÑÑй Ð·Ð½Ð°ÐµÑ Ð·Ð½Ð°Ñение ÑÑÑоки и Ð¸Ð¼ÐµÐµÑ Ñакие полезнÑе меÑодÑ, какtoUpperCase(). - ÐÑÐ¾Ñ Ð¼ÐµÑод запÑÑкаеÑÑÑ Ð¸ возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð²ÑÑ ÑÑÑÐ¾ÐºÑ (показÑваеÑÑÑ Ð²
alert). - СпеÑиалÑнÑй обÑÐµÐºÑ ÑдалÑеÑÑÑ, оÑÑавлÑÑ ÑолÑко пÑимиÑив
str.
ÐолÑÑаеÑÑÑ, ÑÑо пÑимиÑÐ¸Ð²Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑедоÑÑавлÑÑÑ Ð¼ÐµÑодÑ, и в Ñо же вÑÐµÐ¼Ñ Ð¾ÑÑаваÑÑÑÑ Â«Ð»Ñгкими».
Ðвижок JavaScript ÑилÑно опÑимизиÑÑÐµÑ ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ. Ðн даже Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑопÑÑÑиÑÑ Ñоздание ÑпеÑиалÑного обÑекÑа. Ðднако, он вÑÑ Ð¶Ðµ должен пÑидеÑживаÑÑÑÑ ÑпеÑиÑикаÑий и ÑабоÑаÑÑ Ñак, как бÑдÑо он его ÑоздаÑÑ.
ЧиÑло Ð¸Ð¼ÐµÐµÑ ÑобÑÑвеннÑй Ð½Ð°Ð±Ð¾Ñ Ð¼ÐµÑодов. ÐапÑимеÑ, toFixed(n) окÑÑглÑÐµÑ ÑиÑло до n знаков поÑле запÑÑой.
let num = 1.23456;
alert( num.toFixed(2) ); // 1.23
Ðолее подÑобно Ñ ÑазлиÑнÑми ÑвойÑÑвами и меÑодами Ð¼Ñ Ð¿Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð¸Ð¼ÑÑ Ð² Ð³Ð»Ð°Ð²Ð°Ñ Ð§Ð¸Ñла и СÑÑоки.
String/Number/Boolean пÑедназнаÑÐµÐ½Ñ ÑолÑко Ð´Ð»Ñ Ð²Ð½ÑÑÑеннего полÑзованиÑÐекоÑоÑÑе ÑзÑки, Ñакие как Java, позволÑÑÑ Ñвное Ñоздание «обÑекÑов-обÑÑÑок» Ð´Ð»Ñ Ð¿ÑимиÑивов пÑи помоÑи Ñакого ÑинÑакÑиÑа как new Number(1) или new Boolean(false).
Ð JavaScript, ÑÑо Ñоже возможно по иÑÑоÑиÑеÑким пÑиÑинам, но оÑÐµÐ½Ñ Ð½Ðµ ÑекомендÑеÑÑÑ. РнекоÑоÑÑÑ Ð¼ÐµÑÑÐ°Ñ Ð¿Ð¾ÑледÑÑÐ²Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÐºÐ°ÑаÑÑÑоÑиÑеÑкими.
ÐапÑимеÑ:
alert( typeof 0 ); // "ÑиÑло"
alert( typeof new Number(0) ); // "object"!
ÐбÑекÑÑ Ð² if вÑегда даÑÑ true, Ñак ÑÑо в нижепÑиведÑнном пÑимеÑе бÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ alert:
let zero = new Number(0);
if (zero) {
// zero возвÑаÑÐ°ÐµÑ "true", Ñак как ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом
alert( "zero Ð¸Ð¼ÐµÐµÑ Â«Ð¸ÑÑинное» знаÑение?!?" );
}
С дÑÑгой ÑÑоÑонÑ, иÑполÑзование ÑÑнкÑий String/Number/Boolean без опеÑаÑоÑа new â вполне ÑазÑмно и полезно. Ðни пÑевÑаÑаÑÑ Ð·Ð½Ð°Ñение в ÑооÑвеÑÑÑвÑÑÑий пÑимиÑивнÑй Ñип: в ÑÑÑокÑ, в ÑиÑло, в бÑлевÑй Ñип.
РпÑимеÑÑ, ÑледÑÑÑее вполне допÑÑÑимо:
let num = Number("123"); // пÑевÑаÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð² ÑиÑло
ÐÑобеннÑе пÑимиÑÐ¸Ð²Ñ null и undefined ÑвлÑÑÑÑÑ Ð¸ÑклÑÑениÑми. У ниÑ
Ð½ÐµÑ ÑооÑвеÑÑÑвÑÑÑиÑ
«обÑекÑов-обÑÑÑок», и они не имеÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
меÑодов. РнекоÑоÑом ÑмÑÑле, они «ÑамÑе пÑимиÑивнÑе».
ÐопÑÑка доÑÑÑпа к ÑвойÑÑвам Ñакого знаÑÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ¸Ñ Ð¾ÑибкÑ:
alert(null.test); // оÑибка
ÐÑого
- ÐÑе пÑимиÑивÑ, кÑоме
nullиundefined, пÑедоÑÑавлÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво полезнÑÑ Ð¼ÐµÑодов. ÐÑ Ð¿Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð¸Ð¼ÑÑ Ñ Ð½Ð¸Ð¼Ð¸ поближе в ÑледÑÑÑÐ¸Ñ Ð³Ð»Ð°Ð²Ð°Ñ . - ФоÑмалÑно ÑÑи меÑÐ¾Ð´Ñ ÑабоÑаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²ÑеменнÑÑ Ð¾Ð±ÑекÑов, но движки JavaScript внÑÑÑенне оÑÐµÐ½Ñ Ñ Ð¾ÑоÑо опÑимизиÑÑÑÑ ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ, Ñак ÑÑо Ð¸Ñ Ð²Ñзов не ÑÑебÑÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ ÑеÑÑÑÑов.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)