Көптөгөн салыштыруу операторлору бизге математикадан белгилүү.
JavaScript-те алар төмөнкүдөй жазылган:
- Көбүрөөк/кем:
a > b
,a < b
. - Чоң/кичине же барабар:
a >= b
,a <= b
. - барабар:
a == b
. Салыштыруу үчүн кош барабар белгиси колдонулганын эске алыңыз==
. Бир барабар белгиa = b
тапшырманы билдирет. - Барабар эмес. Математикада символ менен көрсөтүлөт
≠
, ал эми JavaScriptте ал катары жазылатa != b
.
Бул бөлүмдө биз салыштыруу деген эмне экенин, тил алар менен кандай иштээрин жана кандай сюрприздерге даяр болушубуз керектиги жөнүндө көбүрөөк билебиз.
Аягында, сиз JavaScript'те салыштыруу кубулуштарынан кантип качуу үчүн жакшы рецепт таба аласыз.
Салыштыруу натыйжасы логикалык типте
Бардык салыштыруу операторлору логикалык маанини кайтарат:
@A@
true
- "ооба", "чын", "чын" дегенди билдирет.false
- "жок", "жалган", "жалган" дегенди билдирет.- @A@
Мисалы:
alert( 2 > 1 ); // true
alert( 2 == 1 ); // false
alert( 2 != 1 ); // true
@A@
Салыштыруунун натыйжасы кандайдыр бир маани сыяктуу өзгөрмөгө дайындалышы мүмкүн:
let result = 5 > 4; // чыккан жообу resultка ыйгарылат
alert( result ); // true
Сапты салыштыруу
Бир сап экинчисинен чоң экенин аныктоо үчүн JavaScript "алфавиттик" же "лексикографиялык" тартипти колдонот.
Башка сөз менен айтканда, саптар символ боюнча салыштырылат.
Мисалы:
@A@alert( 'Я' > 'А' );
// true
alert( 'Коты' > 'Кода' ); // true
alert( 'Сонный' > 'Сон' ); // true
@A@
Эки сапты салыштыруу алгоритми абдан жөнөкөй:
- Алгач саптардын биринчи символдору салыштырылат.
- Эгерде биринчи саптын биринчи символу экинчинин биринчи символунан чоң (кем) болсо, анда биринчи сап экинчисинен чоң (кичи) болот. Салыштыруу аяктады.
- Эгерде биринчи символдор барабар болсо, анда саптардын экинчи символдору да ушундай жол менен салыштырылат.
- Салыштыруу саптардын бири бүткүчө уланат.
- Эгерде эки сап бир убакта бүтсө, анда алар бирдей. Болбосо, узун сап чоңураак деп эсептелет.
Жогорудагы мисалдарда, салыштыруу 'Я' > 'А'
биринчи кадамда аяктайт, ал эми саптар 'Коты'
жана 'Кода'
символ боюнча салыштырылат:
К
ге барабарК
.о
ге барабаро
.т
ашыкд
. Бул жерде салыштыруу бүтөт. Биринчи сап чоңураак.
Жогорудагы салыштыруу алгоритми сөздүктөрдө жана телефон китептеринде колдонулган алгоритмге окшош, бирок алардын ортосунда айырмачылыктар бар.
Мисалы, JavaScript-те кейс маанилүү. Баш тамга "A"
кичи тамга менен барабар эмес "a"
. Кайсы бири көбүрөөк? Кичи тамга "a"
. Неге? Анткени кичине тамгалар JavaScript (Юникод) колдонгон ички коддоо таблицасында чоңураак кодго ээ. Саптардын ички чагылдырылышы жана алардын таасири жөнүндө биз Strings бөлүмүндө көбүрөөк сүйлөшөбүз .
Ар кандай түрлөрүн салыштыруу
Ар кандай түрдөгү маанилерди салыштырганда, JavaScript ар бирин бир санга чыгарат.
Мисалы:
@A@alert( '2' > 1 ); // true,сап "2" санга айланат 2ге
alert( '01' == 1 ); // true,
@A@
Логикалык мааниге true
айланат 1
жана false
- 0
.
Мисалы:
@A@alert( true == 1 ); // true
alert( false == 0 ); // true@A@
Төмөнкү жагдай болушу мүмкүн:
- Эки баалуулуктар бирдей.
- Алардын бири
true
логикалык маани катары, экинчисиfalse
.
Мисалы:
@A@let a = 0; alert( Boolean(a) ); // false let b = "0"; alert( Boolean(b) ); // true alert(a == b); // true!
@A@
JavaScript көз карашынан алганда, натыйжа күтүлөт. Теңдик сандык конверсияны колдонуу менен маанилерди өзгөртөт, ошондуктан "0"
ал 0
. Ал эми ачык-айкын конвертациялоо Boolean
эрежелердин башка топтомун колдонот.
Катуу салыштыруу
Кадимки салыштыруу колдонуу ==
көйгөйлөрдү жаратышы мүмкүн. Мисалы, ал эч кандай 0
айырмаланбайт false
:
Бош сап менен эле көйгөй:
==
Бул ар кандай типтеги операнддар оператор тарабынан санга айландырылганына байланыштуу . Натыйжада, бош сап да false
нөлгө айланат.
Анда кантип айырмалоо 0
керек false
?
Катуу теңдик оператору ===
теңдикти кастингсиз сынайт.
Башкача айтканда, эгерде a
жана b
ар кандай түрлөрү бар болсо, анда чек аларды которууга аракет кылбастан a === b
дароо кайтып келет .false
текшерип көрөлү:
@A@alert( 0 === false ); // false, так как сравниваются разные типы
!==
ге окшош катуу теңсиздик оператору да бар !=
.@A@
Катуу теңдик операторун жазуу үчүн көбүрөөк убакыт талап кылынат, бирок ал кодду айкыныраак кылат жана каталарга азыраак орун калтырат.
Нөл жана аныкталбаган менен салыштыруу
null
Башка баалуулуктар менен салыштырганда жүрүм-турум undefined
өзгөчө:
Катуу теңчилик менен===
Бул баалуулуктар ар кандай, анткени алардын түрлөрү ар кандай.
Катуу эмес теңчилик менен==
Бул баалуулуктар бири-бирине барабар жана башка баалуулуктарга барабар эмес. Бул тилдин өзгөчө эрежеси.
Математикалык операторлорду жана башка салыштыруу операторлорун колдонууда< > <= >=
Маанилер null/undefined
сандарга айландырылат: , жана - null
болот .0
undefined
NaN
Келгиле, бул эрежелерди колдонгондо кандай күлкүлүү окуялар болорун карап көрөлү. Жана, андан да маанилүүсү, аларды колдонууда каталарды кантип болтурбоо керек.
null жана 0 салыштыруу кызыктай натыйжа
null
Нөл менен салыштыруу :
@A@alert( null > 0 ); // (1) false
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true@A@
Математикалык көз караштан алганда, бул кызык. Акыркы салыштыруунун жыйынтыгы " null
нөлдөн чоң же барабар" дейт, анда жогорудагы салыштыруулардын биринин натыйжасы болушу керек true
, бирок экөө тең жалган.
Себеби, катуу эмес теңчилик жана салыштыруулар > < >= <=
башкача иштейт. Салыштыруулар санга айландырылып null
, аны 0
. Демек, (3) туюнтмасы null >= 0
туура, бирок null > 0
жалган.
==
Башка жагынан алганда, баалуулуктардын катуу эмес бирдейлиги үчүн , өзгөчө эреже undefined
колдонулат null
: бул баалуулуктар эч нерсеге кыскартылбайт, алар бири-бирине барабар жана башка эч нерсеге тең эмес. Ошондуктан (2) null == 0
жалган.
Салыштырылгыс аныкталбаган маани
Маани undefined
башка баалуулуктар менен салыштырууга болбойт:
@A@alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)@A@
Эмне үчүн undefined
нөл менен салыштыруу дайыма жалган?
Мунун төмөнкүдөй себептери бар:
- Салыштыруу
(1)
жана(2)
кайтарууfalse
, анткени алundefined
-га айландырылатNaN
жана бардык салыштыруулардаNaN
кайтарылуучу өзгөчө сандык маани .false
- Катуу эмес теңдик
(3)
кайтып келетfalse
, анткени ал геundefined
гана барабарnull
,undefined
башка эч нерсе жок.
Кантип көйгөйлөрдөн качуу керек
Эмне үчүн биз бул мисалдардын баарын карап чыктык? Бул өзгөчөлүктөрдүн баарын дайыма эсибизде сакташыбыз керекпи? Керек эмес. Убакыттын өтүшү менен, алардын баары сизге тааныш болуп калат, бирок сиз ишенимдүү эрежелерди сактасаңыз, көйгөйлөрдөн качсаңыз болот:
undefined/null
Катуу теңчиликтен башка учурларда, бардык салыштырууда өтө этият болуңуз===
.- Эмне кылып жатканыңызды толук билбесеңиз,
>= > < <=
маанилерди ала турган өзгөрмөлөр менен салыштырууларды колдонбоңуз .null/undefined
Эгерде өзгөрмө бул маанилерди ала алса, анда алар үчүн өзүнчө чектерди кошуңуз.
Бардыгы
- Салыштыруу операторлору логикалык маанилерди кайтарышат.
- Саптар лексикографиялык тартипте символдор боюнча салыштырылат.
- Салыштырганда ар кандай типтеги маанилер санга айландырылат. Өзгөчө катуу теңдик/теңсиздик операторлорун колдонуу менен салыштыруу.
null
жана баалуулуктары бири-биринеundefined
барабар жана башка эч кандай мааниге барабар эмес.==
>
сыяктуу жана<
маанилерин ала турган өзгөрмөлөр менен салыштыруу операторлорун колдонууда этият болуңузnull/undefined
. үчүн өзүнчө текшерүү жүргүзүү жакшы идеяnull/undefined
.
Tasks
Бул сөздөрдүн натыйжасы кандай болот?
5 > 4
"ананас" > "яблоко"
"2" > "12"
undefined == null
undefined === null
null == "\n0\n"
null === +"\n0\n"