Junior
JavaScriptте катуу эмес салыштыруу (==) учурунда эмне болот?
sobes.tech AI
AIден жооп
JavaScriptте салыштырганда (==) типтердин түрлөрү өзгөртүлүп, салыштыруу алдында (coercion) жүргүзүлөт. Эгер операнддардын түрлөрү айырмаланса, JavaScript бир же эки операндду бир типке өткөрүүгө аракет кылат, бир нече эрежелерге негизделген.
== менен негизги эрежелер:
- Сандар жана саптар: Саптар сандарга өткөрүлөт. Эгер өткөрүү мүмкүн болбосо (NaN), натыйжа дайыма
falseболот.// "10" 10го өткөрүлөт. Натыйжа: true console.log(10 == "10"); // "abc" NaNга өткөрүлөт. Натыйжа: false console.log(10 == "abc"); - Булен жана булен эмес: Булен санга өткөрүлөт (
true1ге,false0го). Андан соң сан жана башка операнд салыштырылат.// true 1ге өткөрүлөт. Натыйжа: true console.log(true == 1); // false 0го өткөрүлөт. Натыйжа: true console.log(false == 0); // false 0го өткөрүлөт, "0" да 0го өткөрүлөт. Натыйжа: true console.log(false == "0"); - Null жана Undefined:
nullundefinedменен салыштырылгандаtrueболот, башка эч нерсе менен (өзүнөн башка)trueболот.// Натыйжа: true console.log(null == undefined); // Натыйжа: false console.log(null == 0); // Натыйжа: false console.log(undefined == 0); - Объект жана примитив: Объект
valueOfжеtoStringметоддору аркылуу примитивге өткөрүлөт, андан соң салыштырылат.// Объект "10" сапка өткөрүлөт (toString аркылуу), андан соң сан 10 менен салыштырылат // "10" 10го өткөрүлөт. Натыйжа: true console.log({ toString: () => "10" } == 10); - Символ жана башка: Символ башка символ же примитив менен гана салыштырылат, анын символго өткөрүлүшү мүмкүн (бул негизинен мүмкүн эмес).
// Натыйжа: false console.log(Symbol('a') == 'a');
Непрямо салыштырганда, автоматтык түрдө түрлөрдүн өткөрүлүшү себептүү күтүлбөгөн натыйжалар болушу мүмкүн. Көбүрөөк алдын ала болжау үчүн, типтерди өткөрбөстөн салыштыруучу (===) колдонуу сунушталат, ал типтерди өткөрбөйт жана операнддарды түздөн-түз салыштырат.