Маалымат турлору
Маалымат түрлөрү
JavaScriptдеги маани ар дайым белгилүү бир түрдөгү маалыматтарды билдирет. Мисалы, ал сап же сан болушу мүмкүн.
JavaScriptде сегиз негизги маалымат түрлөрү бар. Бул бөлүмдө биз аларды жалпысынан карап чыгабыз, ал эми кийинки бөлүмдөрдө ар бири жөнүндө кененирээк сөз кылабыз.
JavaScriptдеги өзгөрмө ар кандай маалыматтарды камтышы мүмкүн. Бир учурда сап болушу мүмкүн, ал эми башка учурда - сан:
@A@
// Ката болбойт
let message = "салам";
message = 123456;
@A@
Буга жол берген программалоо тилдери "динамикалык терилген" деп аталат. Бул маалымат түрлөрү бар экенин билдирет, бирок өзгөрмөлөр алардын эч бирине байланган эмес.
Сан
n = 123;
n = 12.345;
Сандык маалымат түрү (сан) бүтүн жана калкыма чекиттин маанилерин билдирет.
Сандар үчүн көптөгөн операциялар бар, мисалы, көбөйтүү *, бөлүү /, кошуу +, кемитүү - ж.б.
Жөнөкөй сандардан тышкары, бул маалымат түрүнө тиешелүү "атайын сандык маанилер" бар: Infinity, -Infinity жана NaN.
Чексиздик математикалык чексиздикти ∞ билдирет. Бул кандайдыр бир сандан чоңураак өзгөчө маани.
Биз аны нөлгө бөлүүнүн натыйжасында ала алабыз:
alert( 1/0 ); // Чексиздик
Же аны ачык белгилеңиз:
alert (Чексиздик); // Чексиздик
NaN эсептөө катасын билдирет. Бул туура эмес же аныкталбаган математикалык операциянын натыйжасы, мисалы:
@A@
alert( "сан эмес" / 2 ); // NaN, бул бөлүү ката
@A@
NaN мааниси "жабышчаак" болуп саналат.NaN менен ар кандай математикалык операция NaN кайтарат:
эскертүү ( NaN + 1 ); // NaN
alert( 3 * NaN ); // NaN
alert( "сан эмес" / 2 - 1 ); // NaN
Эгерде математикалык туюнтумдун бир жеринде NaN бар болсо, анда ал бүт натыйжага жайылтылат (бир гана өзгөчөлүк бар: NaN ** 0 1ге барабар).
Математикалык операциялар коопсуз
JavaScript'те математикалык операциялар "коопсуз". Биз баарын кыла алабыз: нөлгө бөлүү, сандык эмес саптарды сандар катары кароо ж.б.у.с.
Сценарий эч качан коркунучтуу ката менен токтобойт ("өлбөйт"). Эң начар учурда, биз аткаруунун натыйжасында NaN алабыз.
Атайын сандык маанилер "сан" тибиндеги. Албетте, бул сөздүн кадимки маанисинде сандар эмес.
Сандар менен иштөө жөнүндө биз Сандар бөлүмүндө кененирээк сүйлөшөбүз.
BigInt
JavaScript'те сандын түрү терс сандар үчүн (253-1) (мис. 9007199254740991) же -(253-1)ден азыраак сандарда коопсуз иштей албайт. Техникалык жактан алганда, сандын түрү алда канча чоң маанилерди (1,7976931348623157 * 10308ге чейин) сактай алат, бирок ±(253-1) коопсуз диапазонунан тышкары, ички чектөөлөрдөн улам көптөгөн сандарды бул маалымат түрү менен көрсөтүү мүмкүн эмес. сандарды экилик формада көрсөтүү. Мисалы, (253-1) чоңураак так сандарды сандын түрүн колдонуу менен сактоого болбойт, алар автоматтык түрдө ар кандай тактык даражалары менен жуп маанилерге тегеректелет. Ошол эле учурда, техникалык жактан (253-1) чоңураак айрым жуп сандарды сандын түрүн колдонуу менен сактоо мүмкүн (бирок, мындан ары каталарды болтурбоо үчүн муну жасабаңыз).Көпчүлүк учурларда -(253-1)ден (253-1) чейинки сандардын коопсуз диапазону жетиштүү. Бирок кээде бизге эч кандай чеги жок же анын ичинде жетишпеген маанилери жок чындап гиганттык бүтүн сандардын диапазону керек болот. Мисалы, криптографияда же микросекунд менен убакыт белгисин («убакыт белгиси») колдонууда.
BigInt түрү каалаган узундуктагы бүтүн сандар менен иштөөгө мүмкүндүк берүү үчүн JavaScriptке кошулган.
BigInt маанисин түзүү үчүн, сандык литералдын аягына n кошуу керек:
@A@
// аягындагы "n" белгиси бул BigInt экенин билдирет
const bigInt = 1234567890123456789012345678901234567890n;
@A@
BigInt сандары сейрек талап кылынгандыктан, биз аларды өзүнчө BigInt бөлүмүндө карайбыз. Мындай чоң сандар керек болгондо текшерип көрүңүз.
Колдоо
Учурда BigInt Firefox, Chrome, Edge жана Safari браузерлеринде гана колдоого алынат, бирок IEде колдоого алынбайт.
Line
JavaScript'теги сап тырмакчага алынышы керек.
@A@
let str = "Салам";
let str2 = 'Жалгыз тырмакчалар да жакшы';
let phrase = `Арткы тырмакчалар ${str} өзгөрмөлөрдү киргизүүгө мүмкүндүк берет`;
@A@
JavaScriptте тырмакчалардын үч түрү бар.
@A@
Кош тырмакча: "Салам".
Жалгыз цитаталар: 'Салам'.
Тескери : `Салам`.
@A@
Кош же жалгыз тырмакчалар "жөнөкөй" жана JavaScript алардын ортосунда эч кандай айырма жок.
тескери тырмакча кеңейтилген функцияга ээ. Алар бизге туюнтмаларды ${...} менен ороп, сапка киргизүүгө мүмкүндүк берет. Мисалы:
@A@
let name = "Ivan";
// Өзгөрмөлөрдү киргизүү
alert( `Салам, ${name}!` ); // Салам Ivan!
// Сөз айкашын киргизүү
alert( `натыйжа: ${1 + 2}` ); // натыйжасы: 3
@A@
${...} ичиндеги туюнтма бааланат жана анын натыйжасы саптын бир бөлүгү болуп калат. Биз ал жерге каалаганыбызды киргизсек болот: өзгөрмөнүн аталышын, же 1 + 2 туюнтмасын же андан да татаалыраак нерсени.
Бул арткы тырмакчалардын ичинде гана жасалышы мүмкүн экенин эске алыңыз. Башка тырмакчаларда бул кыстаруу функциясы жок!
alert( "натыйжа: ${1 + 2}" ); // натыйжа: ${1 + 2} (кош тырмакча эч нерсе кылбайт)
Саптарды биз Саптар бөлүмүндө кененирээк карап чыгабыз.
Бир белги үчүн өзүнчө маалымат түрү жок.
Кээ бир тилдерде, мисалы, C жана Java, "a" же "%" сыяктуу бир символду сактоо үчүн өзүнчө типке ээ. C жана Java тилдеринде бул char.
JavaScriptте мындай түрү жок, сап түрү гана. Сап нөл символду (бош болуңуз), бир символду же көп символду камтышы мүмкүн.
Логикалык (логикалык) түрү
Логикалык түрү (логикалык) эки гана маанини ала алат: true (чын) жана false (жалган).
Бул түрү, адатта, ооба/жок маанилерин сактоо үчүн колдонулат: true "ооба, туура" жана жалган "жок, туура эмес" дегенди билдирет.
Мисалы:
@A@
let nameFieldChecked = true; // ооба, талаа текшерилди
let ageFieldChecked = false; // жок, талаа текшерилген эмес
@A@
Логикалык баалуулуктар да салыштыруунун натыйжасы болушу мүмкүн:
@A@
let isGreater = 4 > 1;
alert(isGreater); // чын (салыштыруунун жыйынтыгы "ооба" болот)
@A@
Логикалык операторлор бөлүмүндө логикалык маанилерди кененирээк карап чыгабыз.
Мааниси "нөл"
Өзгөчө маани нөл жогоруда сүрөттөлгөн түрлөрдүн бирине да тиешелүү эмес.
Ал нөл маанисин гана камтыган өзүнчө типти түзөт:
жашы = null;
JavaScript'те null башка тилдердегидей "болбогон объектке шилтеме" же "нөл көрсөткүч" эмес.
Бул жөн гана "эч нерсе", "бош" же "белгисиз маанини" билдирген өзгөчө маани.
Жогорудагы код жаш өзгөрмөнүн мааниси белгисиз экенин көрсөтүп турат.
Мааниси "аныкталбаган"
Undefined өзгөчө маани да өзүнчө турат. Ал null сыяктуу өзүнөн бир тип түзөт.
Бул "эч кандай маани берилген эмес" дегенди билдирет.
Эгерде өзгөрмө жарыяланып, бирок эч кандай маани берилбесе, анда анын мааниси аныкталбаган болот:
let age;
alert (age); // "аныкталбаган" басып чыгарат
Техникалык жактан биз каалаган өзгөрмөгө аныкталбаганды дайындай алабыз:
age = 123;
// маанисин аныкталбаганга өзгөртүү
age = undefined;
alert (age); // "undefined"
...Бирок андай кылуу сунушталбайт. Адатта, null өзгөрмөгө "бош" же "белгисиз" маани ыйгаруу үчүн колдонулат, ал эми аныкталбаган өзгөрмөнүн дайындалганын текшерүү үчүн колдонулат.
Объекттер жана символдор
Объекттин түрү өзгөчө.
Бардык башка түрлөрү "примитивдүү" деп аталат, анткени алардын баалуулуктары жөнөкөй маанилер болушу мүмкүн (бул сап, сан же башка нерсе). Объекттер маалымат жыйнактарын же татаал структураларды сактайт.
Объекттер тилде маанилүү орунду ээлеп, өзгөчө көңүл бурууну талап кылат. Примитивдер жөнүндө көбүрөөк билгенден кийин алар менен Объекттер бөлүмүндө сүйлөшөбүз.
Символдун түрү объекттерде уникалдуу идентификаторлорду түзүү үчүн колдонулат. Биз бул жерде толуктук үчүн айтып жатабыз, объекттерден кийин бул түрүн изилдейбиз.
оператор түрү
typeof оператору аргументтин түрүн кайтарат. Бул ар кандай түрдөгү баалуулуктарга башкача мамиле кылгыбыз келгенде же жөн гана текшерүүнү каалаганда пайдалуу.
Анын эки синтаксистик формасы бар:
// Регулярдуу синтаксис
typeof 5 // "санды" басып чыгарат
// Функцияга окшош синтаксис (азыраак)
typeof(5) // Ошондой эле "санды" басып чыгарат
Эгерде туюнтма өтүп кетсе, анда аны кашаага алыш керек, анткени typeof бинардык операторлорго караганда артыкчылыкка ээ:
typeof 50 + "Батирлер"; // "Батирлердин санын" көрсөтөт
typeof(50 + "Батирлер"); // "сап" чыгаруу
Башкача айтканда, кашаалар алардагы туюнтманы аткаруудан келип чыккан маанинин түрүн аныктоо үчүн керек.typeof x чалуу түрдүн аталышы менен сапты кайтарат:
@A@
typeof аныкталбаган // "аныкталбаган"
typeof 0 // "сан"
typeof 10n // "бигинт"
typeof true // "логикалык"
typeof "foo" // "сап"
typeof Symbol("id") // "символ"
typeof Math // "объект" (1)
typeof null // "объект" (2)
typeof alert // "функция" (3)
@A@
Акыркы үч сапка түшүндүрмө керек:
Математика математикалык операцияларды жана константаларды камсыз кылган орнотулган объект. Биз аны Сандар бөлүмүндө кененирээк карайбыз. Бул жерде ал объекттин мисалы катары гана кызмат кылат.
typeof null чалуусунун натыйжасы "объект" болуп саналат. Бул расмий түрдө таанылган typeof мүчүлүштүктөрү, JavaScript күндөрүнө кайтып келет жана шайкештик үчүн сакталган. Албетте, null объект эмес. Бул өзүнчө түрү менен өзгөчө маани болуп саналат.
Typeof alert чалуу "функцияны" кайтарат, анткени эскертүү бул функция. Функцияларды кийинки бөлүмдөрдө изилдейбиз, анда биз JavaScript'те өзгөчө типтеги "функция" жок экенин көрөбүз. Функциялар объект түрүнө кирет. Бирок typeof аларга "функцияны" кайтарып берүү менен өзгөчө мамиле кылат. Ошентип, JavaScript жаралгандан да болду. Формалдуу түрдө бул туура эмес, бирок иш жүзүндө ыңгайлуу болушу мүмкүн.
Бардыгы
JavaScriptте 8 негизги маалымат түрлөрү бар.
Алардын жетөө "примитивдүү" маалымат түрлөрү деп аталат:
каалаган сандар үчүн сан: бүтүн же калкыма чекиттүү сандар; бүтүн сандар диапазону ± (253-1) менен чектелген.
ыктыярдуу узундуктагы бүтүн сандар үчүн бигинт.
саптар үчүн сап. Сап нөл же андан көп белгилерди камтышы мүмкүн, өзүнчө символ түрү жок.
чыныгы/жалган үчүн логикалык.белгисиз маанилер үчүн null бир нөл мааниси бар өзүнчө түрү болуп саналат.
дайындалбаган баалуулуктар үчүн аныкталбаган жалгыз аныкталбаган мааниге ээ болгон өзүнчө түрү.
уникалдуу идентификаторлордун символу.
Ал эми бирөө "примитивдүү" эмес жана жалгыз турат:
татаал маалымат структуралары үчүн объект.
Typeof оператору өзгөрмөдө кандай типтеги маалыматтар сакталганын көрүүгө мүмкүнчүлүк берет.
Эки формасы бар: typeof x же typeof(x).
Типтин аталышы менен сапты кайтарат. Мисалы, "сап".
Нөл үчүн "объект" кайтарылат - бул тилдеги ката, бул чындыгында объект эмес.
Кийинки бөлүмдөрдө биз примитивдүү баалуулуктарга токтолуп, алар менен таанышкандан кийин объекттерге өтөбүз.
Tasks
Үлгү саптар
Бул скрипт эмне берет?
@A@
let name = "Илья";
alert( `салам ${1}` ); // ?
alert( `салам ${"name"}` ); // ?
alert( `салам ${name}` ); // ?
@A@