Loading...

Салыштыруу оператору

                         

Салыштыруу операторлору

 

Көптөгөн салыштыруу операторлору бизге математикадан белгилүү.

JavaScript-те алар төмөнкүдөй жазылган:

  • Көбүрөөк/кем: a > ba < b.
  • Чоң/кичине же барабар: a >= ba <= b.
  • барабар: a == b. Салыштыруу үчүн кош барабар белгиси колдонулганын эске алыңыз ==. Бир барабар белги a = bтапшырманы билдирет.
  • Барабар эмес. Математикада символ менен көрсөтүлөт , ал эми JavaScriptте ал катары жазылат a != b.

Бул бөлүмдө биз салыштыруу деген эмне экенин, тил алар менен кандай иштээрин жана кандай сюрприздерге даяр болушубуз керектиги жөнүндө көбүрөөк билебиз.

Аягында, сиз JavaScript'те салыштыруу кубулуштарынан кантип качуу үчүн жакшы рецепт таба аласыз.

Салыштыруу натыйжасы логикалык типте

Бардык салыштыруу операторлору логикалык маанини кайтарат:

@A@

  • true- "ооба", "чын", "чын" дегенди билдирет.
  • false- "жок", "жалган", "жалган" дегенди билдирет.
  • @A@

Мисалы:

@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@

Эки сапты салыштыруу алгоритми абдан жөнөкөй:

  1. Алгач саптардын биринчи символдору салыштырылат.
  2. Эгерде биринчи саптын биринчи символу экинчинин биринчи символунан чоң (кем) болсо, анда биринчи сап экинчисинен чоң (кичи) болот. Салыштыруу аяктады.
  3. Эгерде биринчи символдор барабар болсо, анда саптардын экинчи символдору да ушундай жол менен салыштырылат.
  4. Салыштыруу саптардын бири бүткүчө уланат.
  5. Эгерде эки сап бир убакта бүтсө, анда алар бирдей. Болбосо, узун сап чоңураак деп эсептелет.

Жогорудагы мисалдарда, салыштыруу 'Я' > 'А'биринчи кадамда аяктайт, ал эми саптар 'Коты'жана 'Кода'символ боюнча салыштырылат:

  1. Кге барабар К.
  2. оге барабар о.
  3. ташык д. Бул жерде салыштыруу бүтөт. Биринчи сап чоңураак.
Чыныгы алфавит эмес, Юникод коддоо колдонулат

Жогорудагы салыштыруу алгоритми сөздүктөрдө жана телефон китептеринде колдонулган алгоритмге окшош, бирок алардын ортосунда айырмачылыктар бар.

Мисалы, JavaScript-те кейс маанилүү. Баш тамга "A"кичи тамга менен барабар эмес "a". Кайсы бири көбүрөөк? Кичи тамга "a". Неге? Анткени кичине тамгалар JavaScript (Юникод) колдонгон ички коддоо таблицасында чоңураак кодго ээ. Саптардын ички чагылдырылышы жана алардын таасири жөнүндө биз Strings бөлүмүндө көбүрөөк сүйлөшөбүз .

Ар кандай түрлөрүн салыштыруу

Ар кандай түрдөгү маанилерди салыштырганда, JavaScript ар бирин бир санга чыгарат.

Мисалы:

@A@alert( '2' > 1 ); // true,сап "2" санга айланат 2ге

alert( '01' == 1 ); // true, @A@

Логикалык мааниге trueайланат 1жана false0.

Мисалы:

 
 
@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:

@A@alert( 0 == false ); // true@A@

Бош сап менен эле көйгөй:

@A@alert( '' == false ); // true@A@

==Бул ар кандай типтеги операнддар оператор тарабынан санга айландырылганына байланыштуу . Натыйжада, бош сап да falseнөлгө айланат.

Анда кантип айырмалоо 0керек false?

Катуу теңдик оператору ===теңдикти кастингсиз сынайт.

Башкача айтканда, эгерде aжана bар кандай түрлөрү бар болсо, анда чек аларды которууга аракет кылбастан a === bдароо кайтып келет .false

текшерип көрөлү:

 
 
@A@alert( 0 === false ); // false, так как сравниваются разные типы

!==ге окшош катуу теңсиздик оператору да бар !=.@A@

Катуу теңдик операторун жазуу үчүн көбүрөөк убакыт талап кылынат, бирок ал кодду айкыныраак кылат жана каталарга азыраак орун калтырат.

Нөл жана аныкталбаган менен салыштыруу

nullБашка баалуулуктар менен салыштырганда жүрүм-турум undefinedөзгөчө:

Катуу теңчилик менен===

Бул баалуулуктар ар кандай, анткени алардын түрлөрү ар кандай.

@A@alert( null === undefined ); // false@A@

Катуу эмес теңчилик менен==

Бул баалуулуктар бири-бирине барабар жана башка баалуулуктарга барабар эмес. Бул тилдин өзгөчө эрежеси.

 
@A@alert( null == undefined ); // true@A@

Математикалык операторлорду жана башка салыштыруу операторлорун колдонууда< > <= >=

Маанилер null/undefinedсандарга айландырылат: , жана - nullболот .0undefinedNaN

Келгиле, бул эрежелерди колдонгондо кандай күлкүлүү окуялар болорун карап көрөлү. Жана, андан да маанилүүсү, аларды колдонууда каталарды кантип болтурбоо керек.

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гана барабар nullundefinedбашка эч нерсе жок.

Кантип көйгөйлөрдөн качуу керек

Эмне үчүн биз бул мисалдардын баарын карап чыктык? Бул өзгөчөлүктөрдүн баарын дайыма эсибизде сакташыбыз керекпи? Керек эмес. Убакыттын өтүшү менен, алардын баары сизге тааныш болуп калат, бирок сиз ишенимдүү эрежелерди сактасаңыз, көйгөйлөрдөн качсаңыз болот:

  • 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"