জাভাস্ক্রিপ্ট টাইপ জবরদস্তি ঠিক কি?
উদাহরণস্বরূপ, ==পরিবর্তে এর ব্যবহারের উপর ===?
জাভাস্ক্রিপ্ট টাইপ জবরদস্তি ঠিক কি?
উদাহরণস্বরূপ, ==পরিবর্তে এর ব্যবহারের উপর ===?
উত্তর:
প্রকারের জবরদস্তির অর্থ হ'ল যখন অপারেটরের অপারেন্ডস বিভিন্ন ধরণের হয়, তখন তাদের মধ্যে একটি অপারেটরের ধরণের "সমতুল্য" মানে রূপান্তরিত হয়। উদাহরণস্বরূপ, যদি আপনি এটি করেন:
boolean == integer
বুলিয়ান অপারেন্ডটি একটি পূর্ণসংখ্যায় রূপান্তরিত হবে: falseহয়ে যায় 0, true1 হয় Then
তবে, আপনি যদি রূপান্তর না করে তুলনা করা অপারেটরটি ব্যবহার করেন তবে এ ===জাতীয় কোনও রূপান্তর ঘটে না। যখন অপারেন্ডগুলি বিভিন্ন ধরণের হয়, এই অপারেটরটি ফিরে আসে falseএবং যখন একই ধরণের হয় তখন কেবল মানগুলির সাথে তুলনা করে।
===যখন আমি একটি মান অন্যের সমান হয় তখন তুলনা করতে চাইলে কি সর্বদা ব্যবহার করব না?
> , <?
আসুন সিস্টেমগুলি টাইপ করার জন্য একটি সংক্ষিপ্ত পরিচিতি দিয়ে শুরু করা যাক যা আমি মনে করি আপনাকে ধরণের জবরদস্তির সাধারণ ধারণা বুঝতে সহায়তা করবে।
কোনও ভাষার টাইপ সিস্টেম নিয়মকে সংজ্ঞায়িত করে যা আমাদের জানায় যে সেই ভাষার মধ্যে কী ধরণের ডেটা রয়েছে এবং বিভিন্ন অপারেটর ব্যবহার করে কীভাবে তাদের একত্রিত করা যায়। উদাহরণস্বরূপ, এই জাতীয় একটি নিয়ম উল্লেখ করতে পারে যে প্লাস (+) অপারেটর কেবলমাত্র সংখ্যায় কাজ করে। আপনাকে পায়ে গুলি চালানো থেকে বিরত রাখতে এই নিয়মগুলি প্রাথমিকভাবে বিদ্যমান। কিন্তু প্রোগ্রামার প্রোগ্রামে সেই নিয়ম ভাঙলে কী ঘটে? প্রোগ্রামারকে টাইপ করা {} + {}বা প্রোগ্রামে বাধা দেওয়ার মতো কিছুই নেই “hello” + 5এমনকি ভাষা যদি ভাবতে না পারে যে এই অভিব্যক্তিগুলির কোনও অর্থ আছে।
চূড়ান্তভাবে এই পরিস্থিতিতে কী ঘটে তার উপর নির্ভর করে ভাষাটি তার ধরণের বিধি সম্পর্কে কতটা কঠোর।
একটি ভাষা টাইপ সিস্টেম প্রায়শই আপনার নিয়মগুলি ভঙ্গ করার বিষয়ে দুটি পদের মধ্যে একটি অবস্থান ধরে রাখে:
টাইপ সিস্টেমগুলির সাথে ভাষাগুলি যা এর নিয়ম সম্পর্কে প্রথম অবস্থান নেয় কথোপকথনে "জোরালোভাবে টাইপ করা" ভাষা হিসাবে চিহ্নিত হয়। আপনাকে এর নিয়ম ভঙ্গ করতে না দেওয়ার বিষয়ে তারা কঠোর are যারা দ্বিতীয় পন্থা গ্রহণ করে (যেমন জাভাস্ক্রিপ্ট) তাদের "দুর্বল টাইপ করা" বা "আলগাভাবে টাইপ করা" ভাষা হিসাবে উল্লেখ করা হয়। অবশ্যই, আপনি বিধিগুলি ভঙ্গ করতে পারেন, তবে বিস্মিত হবেন না যখন এটি আপনার প্রোগ্রামে বর্ণিত ডেটার ধরণের রূপকে রূপান্তর করে যখন এর বিধি মেনে চলতে বাধ্য হয়। সেই আচরণটি ... (ড্রাম রোল) ... টাইপ জবরদস্তি হিসাবে পরিচিত ।
এখন আসুন জাভাস্ক্রিপ্টের কয়েকটি উদাহরণ দেখি। প্রথমে আসুন একটি অভিব্যক্তি দিয়ে শুরু করি যা জবরদস্তি টাইপ করে না।
5 + 5
দুটি সংখ্যার সাথে + অপারেটর ব্যবহার করা যা পুরোপুরি বৈধ। প্রোগ্রামটি "যুক্ত" মানে "চিকিত্সা করবে" এবং সুখে দুটি সংখ্যা যুক্ত করবে। কোনও রূপান্তর প্রয়োজন।
কিন্তু কি ব্যাপারে …
[] + 5
আহ ওহ. জাভাস্ক্রিপ্টে, এর +অর্থ দুটি সংখ্যা যুক্ত করতে বা দুটি স্ট্রিং সংযুক্ত করতে পারে। এই ক্ষেত্রে, আমাদের দুটি সংখ্যা বা দুটি স্ট্রিং নেই। আমাদের কেবল একটি নম্বর এবং একটি অবজেক্ট রয়েছে। জাভাস্ক্রিপ্টের ধরণের নিয়ম অনুসারে, এটি কোনও যৌক্তিক ধারণা দেয় না। যেহেতু এটি আপনার বিধিগুলি ভঙ্গ করার বিষয়ে ক্ষমা করছে তাই ক্রাশ হওয়ার পরিবর্তে এটি যেভাবেই বোঝার চেষ্টা করে। তাহলে জাভাস্ক্রিপ্ট কী করে? ভাল, এটি স্ট্রিংগুলিকে কীভাবে সংযুক্ত করতে হয় তা জানে তাই এটি [] এবং 5 টি উভয়কে স্ট্রিংয়ে রূপান্তর করে এবং ফলাফলটি স্ট্রিংয়ের মান "5"।
তুলনা অপারেটরদের সাথে কী চুক্তি ==এবং ===? দুটি তুলনামূলক অপারেটর কেন?
==জাভাস্ক্রিপ্টের ধরণের রূপান্তর আচরণের জন্য সুরক্ষা নয়। যেমন এক্সপ্রেশন5 == “5” সত্য মূল্যায়ন করবে কারণ জাভাস্ক্রিপ্ট তাদের মধ্যে একটিতে রূপান্তর করার চেষ্টা করবে যাতে এটি একই ধরণের ডেটার তুলনা করে।
অনেক ক্ষেত্রে, এটি আকাঙ্ক্ষিত নয় কারণ আপনি সম্ভবত জানতে চান যে আপনি যে ডেটাটির সাথে তুলনা করছেন সেটি অন্য ধরণের কিনা যাতে আপনি এটি সম্পর্কে কী করবেন তা সিদ্ধান্ত নিতে পারেন। ===অপারেটরটি সেখানে আসে you আপনি যখন ব্যবহার করবেন তখন ===কোনও ধরণের রূপান্তর ঘটবে না। সুতরাং, অভিব্যক্তিটি 5 === “5”মিথ্যাতে মূল্যায়ন করবে।
পাইথনে আপনি যদি স্ট্রিং এবং পূর্ণসংখ্যা যোগ করার, বলার চেষ্টা করেন তবে আপনি একটি ত্রুটি পাবেন:
>>> "hi" + 10
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
তবুও জাভাস্ক্রিপ্ট, আপনি না। 10একটি স্ট্রিং রূপান্তর পরার:
> "hi" + 10
"hi10"
"প্রকারের জবরদস্তি" উপরের জন্য একটি অভিনব মিসনোমার। বাস্তবে, জাভা বা সি বা স্ট্যাটিক টাইপ সিস্টেমের সাথে অন্য ভাষার অর্থে কোনও ভাষারই "প্রকার" থাকে না। বিভিন্ন অ-স্ট্যাটিক্যালি-টাইপ করা মানগুলির মধ্যে ভাষা কীভাবে মিথস্ক্রিয়া আচরণ করে তা পছন্দ এবং কনভেনশন a
আমাকে নীচের উদাহরণ সহ ধরণের জবরদস্তি ব্যাখ্যা করতে দিন
টাইপ কোর্সিওন মানে জাভাস্ক্রিপ্ট স্বয়ংক্রিয়ভাবে (অন-দ্য ফ্লাই) একটি ভেরিয়েবলকে একটি ডেটাটাইপ থেকে অন্যটিতে রূপান্তর করে
উদাহরণস্বরূপ: 123 + "4"সাধারণত একটি ত্রুটি উত্থাপন করে তবে জাভাস্ক্রিপ্টে ধরণের চাপের কারণে, এটি 1234স্ট্রিংয়ের ফলস্বরূপ
if(23 == "23"){
console.log(" this line is inside the loop and is executed ");
}
উপরের কোডে, ধরণের জবরদস্তির কারণে - জাভাস্ক্রিপ্ট মনে করে 23(সংখ্যা) এবং "23"(স্ট্রিং) একই জিনিস। এটি শর্তটিকে সত্য করে তোলে এবং কনসোল.লগ প্রিন্ট করে
অন্য ক্ষেত্রে
if(23 === "23"){
console.log(" this line is inside the loop and is NOT executed");
}
ইন ===কেস জাভাস্ক্রিপ্ট জাভাস্ক্রিপ্টের এই মাতব্বরী করে না এবং যেহেতু 23একটি সংখ্যা এবং "23"স্ট্রিং এবং কারণ ===এই দুটি datatypes ভিন্ন এবং শর্ত মিথ্যা যে বাড়ে। এটি কনসোল.লগ প্রিন্ট করে না
সহজ কথায়
এই ক্ষেত্রে =এটি একটি অ্যাসাইনমেন্ট অপারেটর - যা var a = 3;ইত্যাদি ইত্যাদির মান নির্ধারণ করে
(নীচে অপারেটরদের তুলনা করা হয়)
এই ক্ষেত্রে ==জাভাস্ক্রিপ্ট ডেটাটাইপটিকে অন্যটিতে রূপান্তরিত / coerces এবং তারপরে এটি তুলনা করে।
এই ক্ষেত্রে === জাভাস্ক্রিপ্ট ডেটাটাইপ রূপান্তর / coerces না
বাগগুলি এড়াতে এবং ডিবাগিংয়ের উদ্দেশ্যে ===বেশিরভাগ ক্ষেত্রে ব্যবহৃত হয়
উপরের তথ্যের যথার্থতা আমাকে জানান।
জাভাস্ক্রিপ্টে টাইপ জবরদস্তি ঘটে যখন জাভাস্ক্রিপ্ট ইঞ্জিনকে একটি নির্দিষ্ট ক্রিয়াকলাপ সম্পাদন করতে হবে যার জন্য এটি একটি নির্দিষ্ট ধরণের ডেটা থাকা প্রয়োজন। ইঞ্জিনটি যখন কোনও নির্দিষ্ট ধরণের ডেটার মুখোমুখি হয় যা অপারেশনের জন্য প্রযোজ্য নয় তখন এটি ডেটাটি একটি নির্দিষ্ট ধরণের মধ্যে জোর করে। এটি প্রয়োজন কারণ জাভাস্ক্রিপ্টে ভেরিয়েবলগুলি গতিশীলভাবে টাইপ করা হয়, যার অর্থ একটি প্রদত্ত ভেরিয়েবল যে কোনও প্রকারের মান নির্ধারণ করা যেতে পারে।
if(1){
// 1 gets coerced to true
}
if(4 > '3') {
// 3 gets coerced into a number
}
44 == "44" // true, the string 44 gets converted to a nr
জাভাস্ক্রিপ্ট জবরদস্তিতে, trueনিম্নলিখিত মানগুলি বাদ দিয়ে সমস্ত মানকে রূপান্তর করা হয় false:
console.log(!!""); // false
console.log(!!0); // false
console.log(!!null); // false
console.log(!!undefined); // false
console.log(!!NaN); // false
console.log(!!false); // false
উপরের উদাহরণে ডাবল যে লক্ষ করুন! অপারেটর ব্যবহার করা হয়। দ্য ! চিহ্ন অপারেটর একটি মানকে বিপরীত মান সহকারে উত্সাহিত করে। যে কোনও মানকে বুলিয়ান রূপান্তর করতে আমরা এই অপারেটরটি দুবার ব্যবহার করতে পারি।
a == bমানে জাভাস্ক্রিপ্ট মূল্যায়ন করবে aবিরুদ্ধে bউপর যদি মান সমানভাবে মূল্যায়ন করা যাবে ভিত্তি করে। উদাহরণস্বরূপ, false == 0সত্য মূল্যায়ন করবে কারণ 0 বুলিয়ান মিথ্যাটির মানও। তবে, false === 0মিথ্যাটিকে মূল্যায়ন করবে কারণ কঠোরভাবে তুলনা করা, 0 মিথ্যা হিসাবে একই শারীরিক মান নয়। আর একটি উদাহরণ false == ''তাই মূলত আলগা তুলনা বনাম কঠোর তুলনা, কারণ জাভাস্ক্রিপ্ট একটি স্বল্প টাইপ করা ভাষা। এর অর্থ, জাভাস্ক্রিপ্ট কোডের প্রেক্ষাপটের উপর ভিত্তি করে ভেরিয়েবলকে রূপান্তর করার চেষ্টা করবে এবং জিনিসগুলির সাথে যদি তাদের কঠোরভাবে তুলনা না করা হয় তবে এটি সমান করার প্রভাব ফেলবে। পিএইচপি এরও এই আচরণ রয়েছে।
0 is not the same physical value as false। আইএমও শারীরিকভাবে falseহ'ল 0স্মৃতিতে। আমি বরং বলব যে তারা প্রকার অনুসারে আলাদা, যেহেতু falseবুলিয়ান, যেখানে 0পূর্ণসংখ্যা।
টাইপ জবরদস্তি হ'ল এক ধরণের থেকে অন্য ধরণের মান রূপান্তর করার প্রক্রিয়া (যেমন স্ট্রিং সংখ্যায় স্ট্রিং, অবজেক্ট বুলেয়ান ইত্যাদি)। যে কোনও প্রকার, সে আদিম হোক বা কোনও বস্তু, ধরণের জবরদস্তির জন্য একটি বৈধ বিষয়। প্রত্যাহার করার জন্য, আদিমগুলি হ'ল: সংখ্যা, স্ট্রিং, বুলিয়ান, নাল, অপরিবর্তিত + প্রতীক (ES6 এ যুক্ত)।
সুস্পষ্ট বনাম সুস্পষ্ট জবরদস্তির ধরণের জবরদৃশ্য সুস্পষ্ট এবং অন্তর্নিহিত হতে পারে।
যখন কোনও বিকাশকারী উপযুক্ত কোড লিখে, প্রকারের মধ্যে রূপান্তর করার অভিপ্রায় প্রকাশ করে Number(value) এটিকে সুস্পষ্ট টাইপের জবরদস্তি (বা টাইপ কাস্টিং) বলে।
যেহেতু জাভাস্ক্রিপ্ট একটি দুর্বল টাইপযুক্ত ভাষা, তাই মানগুলি স্বয়ংক্রিয়ভাবে বিভিন্ন ধরণের মধ্যেও রূপান্তরিত হতে পারে এবং একে অন্তর্নিহিত ধরণের জবরদস্তি বলা হয়। এটি সাধারণত ঘটে যখন আপনি বিভিন্ন ধরনের, মত মান অপারেটার আবেদন
1 == null, 2/’5', null + new Date(), অথবা এটি পার্শ্ববর্তী প্রসঙ্গ দ্বারা, সঙ্গে মত ট্রিগার করা যেতে পারে if (value) {…}যেখানে মান বুলিয়ান করতে বাধ্য করা হয়।
এমন একটি অপারেটর যা অন্তর্নিহিত ধরণের জবরদস্তিকে ট্রিগার করে না ===তাকে হ'ল কঠোর সমতা অপারেটর। আলগা সমতা অপারেটর==অন্যদিকে যদি প্রয়োজন হয় তুলনা এবং টাইপ জবরদস্তি উভয়ই করে।
অন্তর্নিহিত ধরণের জবরদস্তি একটি দ্বৈত প্রান্তের তরোয়াল: এটি হতাশা এবং ত্রুটির একটি দুর্দান্ত উত্স, তবে এটি একটি দরকারী প্রক্রিয়া যা আমাদের পাঠযোগ্যতা হারানো ছাড়াই কম কোড লিখতে দেয়।
তিন ধরণের রূপান্তর জানার প্রথম নিয়মটি হল জাভাস্ক্রিপ্টে কেবল তিন ধরণের রূপান্তর রয়েছে:
দ্বিতীয়ত, আদিম এবং বস্তুর জন্য রূপান্তর যুক্তি ভিন্নভাবে কাজ করে তবে আদিম এবং বস্তু উভয়ই কেবল তিনটি উপায়ে রূপান্তরিত হতে পারে।
প্রথমে আদিমদের দিয়ে শুরু করা যাক।
স্ট্রিং রূপান্তর
স্পষ্টভাবে মানগুলিকে স্ট্রিংয়ে রূপান্তর করতে স্ট্রিং () ফাংশনটি প্রয়োগ করুন। অন্তর্ভুক্ত জবরদস্তি বাইনারি + অপারেটর দ্বারা ট্রিগার করা হয়, যখন কোনও অপারেন্ড একটি স্ট্রিং থাকে:
String(123) // explicit
123 + '' // implicit
সমস্ত আদিম মান প্রাকৃতিকভাবে স্ট্রিংগুলিতে রূপান্তরিত হয় যেমনটি আপনি আশা করতে পারেন:
String(123) // '123'
String(-12.3) // '-12.3'
String(null) // 'null'
String(undefined) // 'undefined'
String(true) // 'true'
String(false) // 'false'
প্রতীক রূপান্তরটি কিছুটা জটিল, কারণ এটি কেবলমাত্র স্পষ্টত রূপান্তরিত হতে পারে, তবে স্পষ্টভাবে নয়।
String(Symbol('my symbol')) // 'Symbol(my symbol)'
'' + Symbol('my symbol') // TypeError is thrown
বুলিয়ান রূপান্তর
স্পষ্টরূপে একটি বুলিয়ান একটি মান রূপান্তর করতে Boolean()ফাংশন প্রয়োগ করুন । অন্তর্নিহিত রূপান্তরটি যৌক্তিক প্রসঙ্গে ঘটে বা লজিকাল অপারেটরগুলি দ্বারা ট্রিগার হয় ( || && !)।
Boolean(2) // explicit
if (2) { ... } // implicit due to logical context
!!2 // implicit due to logical operator
2 || 'hello' // implicit due to logical operator
দ্রষ্টব্য: লজিকাল অপারেটরগুলি যেমন || and &&অভ্যন্তরীণভাবে বুলেটিয়ান রূপান্তরগুলি করে, কিন্তু প্রকৃত অপারেটরগুলির মানটি ফিরিয়ে দেয়, তারা বুলিয়ান না হলেও।
// returns number 123, instead of returning true
// 'hello' and 123 are still coerced to boolean internally to calculate the expression
let x = 'hello' && 123; // x === 123
বুলিয়ান রূপান্তরকরণের মাত্র 2 টি সম্ভাব্য ফলাফল পাওয়া মাত্র: সত্য বা মিথ্যা, মিথ্যা মানগুলির তালিকা মনে রাখা সহজ।
Boolean('') // false
Boolean(0) // false
Boolean(-0) // false
Boolean(NaN) // false
Boolean(null) // false
Boolean(undefined) // false
Boolean(false) // false
কোন মান তালিকায় না থাকে রূপান্তরিত হয় trueসহ, object, function, Array, Date, ব্যবহারকারী-সংজ্ঞায়িত ধরন, ইত্যাদি। প্রতীকগুলি সত্যবাদী মান। খালি বস্তু এবং অ্যারেগুলিও সত্যবাদী মানসমূহ:
Boolean({}) // true
Boolean([]) // true
Boolean(Symbol()) // true
!!Symbol() // true
Boolean(function() {}) // true
সংখ্যার রূপান্তর
একটি সুনির্দিষ্ট রূপান্তরের জন্য শুধু প্রযোজ্য Number()ফাংশন, একই হিসাবে আপনি করেছিল Boolean()এবং String()।
অন্তর্নিহিত রূপান্তরটি জটিল, কারণ এটি আরও ক্ষেত্রে ট্রিগার হয়েছে:
তুলনা অপারেটর (>, <, <=,> =)
বিটওয়াইজ অপারেটর (| & ^ ~)
পাটিগণিত অপারেটর (- + * /%)। দ্রষ্টব্য, যে বাইনারি + সংখ্যার রূপান্তরকে ট্রিগার করে না, যখন কোনও অপারেণ্ড স্ট্রিং থাকে।
unary + অপারেটর
আলগা সমতা অপারেটর == (অন্তর্ভুক্ত! =)।
নোট করুন যে == উভয় অপারেন্ড স্ট্রিং হলে সংখ্যাসূচক রূপান্তরটি ট্রিগার করে না।
সংখ্যা ('123') // সুস্পষ্ট + '123' // অন্তর্নিহিত 123! = '456' // অন্তর্নিহিত 4> '5' // অন্তর্নিহিত 5 / নাল // অন্তর্ভুক্ত সত্য | 0 // অন্তর্নিহিত
আদিম মানগুলি কীভাবে সংখ্যায় রূপান্তরিত হয় তা এখানে:
Number(null) // 0
Number(undefined) // NaN
Number(true) // 1
Number(false) // 0
Number(" 12 ") // 12
Number("-12.34") // -12.34
Number("\n") // 0
Number(" 12s ") // NaN
Number(123) // 123
var str = 'dude';
console.log(typeof str); // "string"
console.log(!str); // false
console.log(typeof !str); // "boolean"
একটি পরিবর্তনীয় উদাহরণ যা প্রাথমিকভাবে স্ট্রিং হিসাবে ঘোষিত হয় বুলিয়ান মানের সাথে জোর করে! অপারেটর
টাইপ জবরদস্তি হ'ল এক ধরণের থেকে অন্য ধরণের মান রূপান্তর করার প্রক্রিয়া (যেমন স্ট্রিং সংখ্যায় স্ট্রিং, অবজেক্ট বুলেয়ান ইত্যাদি)। যে কোনও প্রকার, সে আদিম হোক বা কোনও বস্তু, ধরণের জবরদস্তির জন্য একটি বৈধ বিষয়। প্রত্যাহার করার জন্য, আদিমগুলি হ'ল: সংখ্যা, স্ট্রিং, বুলিয়ান, নাল, অপরিবর্তিত + প্রতীক (ES6 এ যুক্ত)।
প্রকার জবরদৃশ্য সুস্পষ্ট এবং অন্তর্নিহিত হতে পারে।
যখন কোনও বিকাশকারী নাম্বার (মান) এর মতো উপযুক্ত কোড লেখার মাধ্যমে প্রকারের মধ্যে রূপান্তর করার অভিপ্রায় প্রকাশ করেন, তখন এটিকে স্পষ্টত ধরণের জবরদস্তি (বা টাইপ কাস্টিং) বলা হয়।
যেহেতু জাভাস্ক্রিপ্ট একটি দুর্বল টাইপযুক্ত ভাষা, তাই মানগুলি স্বয়ংক্রিয়ভাবে বিভিন্ন ধরণের মধ্যেও রূপান্তরিত হতে পারে এবং একে অন্তর্নিহিত ধরণের জবরদস্তি বলা হয়। আপনি সাধারণত 1 == নাল, 2 / '5', নাল + নতুন তারিখ () এর মতো বিভিন্ন ধরণের মানগুলিতে অপারেটরদের প্রয়োগ করার সময় এটি ঘটে থাকে বা এটি যদি (মান) surrounding… এর মতো পার্শ্ববর্তী প্রসঙ্গ দ্বারা ট্রিগার করা যায় {… ।, যেখানে মান বুলিয়ানকে জোর করে।
অন্তর্নিহিত ধরণের জবরদস্তির জন্য এখানে কিছু উদাহরণ রয়েছে:
true + false
12 / "6"
"number" + 15 + 3
15 + 3 + "number"
[1] > null
"foo" + + "bar"
'true' == true
false == 'false'
null == ''
!!"false" == !!"true"
[‘x’] == ‘x’
[] + null + 1
[1,2,3] == [1,2,3]
{}+[]+{}+[1]
!+[]+[]+![]
new Date(0) - 0
new Date(0) + 0
আরও পড়ুন: https://www.freecodecamp.org/news/js-type-coercion-exPLined-27ba3d9a2839/
(true == 1) => true/(true === 1) => false।