Sobes.tech
Junior

JavaScriptте катуу эмес салыштыруу (==) учурунда эмне болот?

sobes.tech AI

AIден жооп

JavaScriptте салыштырганда (==) типтердин түрлөрү өзгөртүлүп, салыштыруу алдында (coercion) жүргүзүлөт. Эгер операнддардын түрлөрү айырмаланса, JavaScript бир же эки операндду бир типке өткөрүүгө аракет кылат, бир нече эрежелерге негизделген.

== менен негизги эрежелер:

  1. Сандар жана саптар: Саптар сандарга өткөрүлөт. Эгер өткөрүү мүмкүн болбосо (NaN), натыйжа дайыма false болот.
    // "10" 10го өткөрүлөт. Натыйжа: true
    console.log(10 == "10");
    // "abc" NaNга өткөрүлөт. Натыйжа: false
    console.log(10 == "abc");
    
  2. Булен жана булен эмес: Булен санга өткөрүлөт (true 1ге, false 0го). Андан соң сан жана башка операнд салыштырылат.
    // true 1ге өткөрүлөт. Натыйжа: true
    console.log(true == 1);
    // false 0го өткөрүлөт. Натыйжа: true
    console.log(false == 0);
    // false 0го өткөрүлөт, "0" да 0го өткөрүлөт. Натыйжа: true
    console.log(false == "0");
    
  3. Null жана Undefined: null undefined менен салыштырылганда true болот, башка эч нерсе менен (өзүнөн башка) true болот.
    // Натыйжа: true
    console.log(null == undefined);
    // Натыйжа: false
    console.log(null == 0);
    // Натыйжа: false
    console.log(undefined == 0);
    
  4. Объект жана примитив: Объект valueOf же toString методдору аркылуу примитивге өткөрүлөт, андан соң салыштырылат.
    // Объект "10" сапка өткөрүлөт (toString аркылуу), андан соң сан 10 менен салыштырылат
    // "10" 10го өткөрүлөт. Натыйжа: true
    console.log({ toString: () => "10" } == 10);
    
  5. Символ жана башка: Символ башка символ же примитив менен гана салыштырылат, анын символго өткөрүлүшү мүмкүн (бул негизинен мүмкүн эмес).
    // Натыйжа: false
    console.log(Symbol('a') == 'a');
    

Непрямо салыштырганда, автоматтык түрдө түрлөрдүн өткөрүлүшү себептүү күтүлбөгөн натыйжалар болушу мүмкүн. Көбүрөөк алдын ала болжау үчүн, типтерди өткөрбөстөн салыштыруучу (===) колдонуу сунушталат, ал типтерди өткөрбөйт жана операнддарды түздөн-түз салыштырат.