Примитивдик методдор
Примитивдик методдор
JavaScript бизге берилиштердин примитивдүү түрлөрү менен иштөөгө мүмкүндүк берет - саптар, сандар жана башкалар. Алардын да ыкмалары бар. Биз аларды кийинчерээк изилдейбиз, бирок адегенде мунун баары кантип иштээрин талдап чыгабыз, анткени, албетте, примитивдер объект эмес.
Примитивдер менен объекттердин ортосундагы негизги айырмачылыктарды карап көрөлү.
Примитивдик
- Бул "примитивдүү" типтеги маани.
- 7 примитивдүү түрү бар:
string
, number
, boolean
, symbol
, null
, undefined
жана bigint
.
Объект
- касиеттери катары бир нече баалуулуктарды сактай алат.
- Ал тармал кашаалардын жардамы менен жарыяланды
{}
, мисалы: {name: "Рома", age: 30}
. JavaScript'те объекттердин башка түрлөрү бар: мисалы, функциялар дагы объект болуп саналат.
Объекттердин эң жакшы жактарынын бири - биз функцияны объекттин касиеттеринин бири катары сактай алабыз.
@A@let roma = {
name: "Рома",
sayHi: function() {
alert("Привет, дружище!");
}
};
roma.sayHi(); // Привет, дружище!@A@
roma
Бул жерде биз метод менен объект түздүк sayHi
.
Көптөгөн курулган объектилер бар. Мисалы, даталар, каталар, HTML элементтери менен иштегендер ж.б. Алардын ар кандай касиеттери жана ыкмалары бар.
Бирок, бул мүмкүнчүлүктөрдүн терс жактары бар!
Объекттер примитивдерге караганда "оорураак". Алар ички түзүмүн сактап калуу үчүн кошумча ресурстарга муктаж.
Бул жерде JavaScript жаратуучусу туш болгон парадокс:
- Сап же сан сыяктуу примитивдер менен кылгыңыз келген көп нерселер бар. Биз аларга методдорду колдонуп кирсек абдан жакшы болмок.
- Примитивдер мүмкүн болушунча жеңил жана тез болушу керек.
Тандалган чечим, ал бир аз ыңгайсыз көрүнгөнү менен:
- Примитивдер примитив бойдон калууда. Бир баалуулук, каалагандай.
- Бул тил саптардын, сандардын, логикалык жана символдордун ыкмаларына жана касиеттерине жетүүгө мүмкүндүк берет.
- Мунун иштеши үчүн, бул мүмкүндүк алуу менен атайын "объект" түзүлөт, ал керектүү функцияны камсыз кылат, андан кийин өчүрүлөт.
Ар бир примитивдин өзүнүн "ороочу объектиси" бар: String
, Number
, Boolean
, Symbol
жана BigInt
. Ошентип, алардын ар кандай ыкмалары бар.
Мисалы, чоң тамга сапты кайтаруучу str.toUpperCase() ыкмасы бар .
Ал кантип иштейт:
@A@let str = "Привет";
alert( str.toUpperCase() ); // ПРИВЕТ@A@
Абдан жөнөкөй, туурабы? Бул жерде иш жүзүндө эмне болуп жатат str.toUpperCase()
:
- Сап
str
примитив болуп саналат. Анын менчигине жетүү учурунда саптын маанисин билген жана сыяктуу пайдалуу ыкмалары бар атайын объект түзүлөт toUpperCase()
.
- Бул ыкма иштейт жана жаңы сапты кайтарат (көрсөтүлгөн
alert
).
- Өзгөчө объект алынып салынат, ал эми примитив гана калат
str
.
Көрсө, примитивдер ыкмаларды берип, ошол эле учурда "жеңил" бойдон кала берет экен.
JavaScript кыймылдаткычы бул процессти абдан оптималдаштырат. Ал атүгүл атайын объектти түзүүнү өткөрүп жибериши мүмкүн. Бирок, ал дагы эле спецификацияларды карманып, өзү жараткандай иштеши керек.
Сандын өзүнүн методдору бар. Мисалы, toFixed(n) санды n ондук орунга тегеретет.
@A@let num = 1.23456;
alert( num.toFixed(2) ); // 1.23@A@
Биз Сандар жана Саптар бөлүмдөрүнүн ар кандай касиеттери жана ыкмалары жөнүндө көбүрөөк билебиз .
Конструкторлор String/Number/Boolean
ички колдонуу үчүн гана
new Number(1)
Кээ бир тилдер, мисалы, Java, же сыяктуу синтаксистин жардамы менен примитивдер үчүн "объекттерди" ачык түзүүгө мүмкүндүк берет new Boolean(false)
.
JavaScript'те бул тарыхый себептерден улам да мүмкүн, бирок өтө көңүл бурулбайт . Кээ бир жерлерде кесепеттери катастрофалык болушу мүмкүн.
Мисалы:
@A@alert( typeof 0 ); // "число"
alert( typeof new Number(0) ); // "object"!
Объекттер if
ар дайым түшүм берет true
, ошондуктан төмөндөгү мисал көрсөтүлөт alert
:
let zero = new Number(0);
if (zero) {
// zero возвращает "true", так как является объектом
alert( "zero имеет «истинное» значение?!?" );
}@A@
Башка жагынан алганда, функцияларды String/Number/Boolean
операторсуз колдонуу new
абдан акылга сыярлык жана пайдалуу. Алар маанини тиешелүү примитивдик түргө: сапка, санга, логикалык түргө айлантат.
Мисалы, төмөнкү толугу менен кабыл алынат:
@A@let num = Number("123"); // превращает строку в число@A
null/undefined ыкмалары жок
Өзгөчө примитивдер null
- бул undefined
өзгөчө. Аларда тиешелүү "объекттер" жок жана эч кандай методдору жок. Кандайдыр бир мааниде алар "эң примитивдүү".
Мындай маанинин касиеттерине кирүүгө аракет кылуу катаны кайтарат:
@A@alert(null.test); // ошибка@A@
- Көптөгөн пайдалуу ыкмалардан
null
башка бардык примитивдер . undefined
Алар менен кийинки бөлүмдөрдө жакшыраак таанышабыз.
- Формалдуу түрдө бул ыкмалар убактылуу объекттер менен иштейт, бирок JavaScript кыймылдаткычтары бул процессти абдан жакшы оптималдаштырат, андыктан аларды чакыруу көп ресурстарды талап кылбайт.
маанилүүлүгү: 5
Төмөнкү кодду карап көрүңүз:
@A@let str = "Привет";
str.test = 5;
alert(str.test);@A@
Бул ишке ашат деп ойлойсузбу? Эмне көрсөтүлөт?