مقایسهها
جلسهٔ مقداردهی جعبه را پر کرد. حالا از محتویاتش سؤال میپرسید: همین است؟ بزرگتر است؟ هنوز کافی نیست؟ جواب همیشه بله یا خیر است — true یا false. این سؤالها عملگرهای مقایسهاند. بعداً داخل شرط بهکارشان میبرید؛ اینجا نماد را بخوانید و به booleanی که برمیگردد اعتماد کنید.
مقایسه یعنی چه؟
مقایسه دو عملوند میگیرد و یک boolean برمیگرداند. مقدار تازهای داخل نام سمت چپ نمیریزد (آن کار = بود). بعد از 5 === 5 نتیجه true است. بعد از 5 === "5" نتیجه false است چون نوعها فرق دارند. میتوانید همان boolean را لاگ کنید، داخل متغیر نگه دارید، یا روی صفحه بنویسید.
نگاه سریع به عملگرها
📊 عملگرهای مقایسهٔ روزمره
| عملگر | میپرسد | نتیجهٔ نمونه |
|---|---|---|
=== |
مقدار و نوع یکیاند؟ | 5 === 5 → true |
!== |
مقدار یا نوع فرق دارد؟ | 5 !== "5" → true |
< |
اکیداً کوچکتر؟ | 3 < 10 → true |
> |
اکیداً بزرگتر؟ | 3 > 10 → false |
<= |
کوچکتر یا مساوی؟ | 10 <= 10 → true |
>= |
بزرگتر یا مساوی؟ | 9 >= 10 → false |
این جدول را دم دست بگذارید. == و != هم وجود دارند، ولی در این دوره تلهٔ مبتدیاند — ممکن است قبل از مقایسه نوع را عوض کنند. تا وقتی درس جداگانهای دربارهٔ تبدیل اجباری نخواندهاید، به === و !== بچسبید.
console.log(7 === 7);
console.log(7 === "7");
console.log(7 !== 7);
console.log(7 !== "7");
let n = 7;
console.log(n === 7);
=== هم مقدار را میبیند هم نوع را
سه علامت مساوی پیشفرض مبتدی است. دو طرف باید هم مقدار و هم نوع یکی باشند. عدد 7 همان رشتهٔ "7" نیست.
کنسول بهترتیب true، false، false، true، true میدهد. خط آخر نشان میدهد عدد ذخیرهشده هنوز سختگیرانه با لفظ 7 مقایسه میشود. !== سؤال برعکس است: «یکی نیستند؟» — اینجا 7 !== "7" میشود true چون نوعها فرق دارند.
چرا مبتدی باید از == بگذرد
دو علامت مساوی گاهی رشته را به عدد تبدیل میکند (یا برعکس) و بعد تصمیم میگیرد. راحت بهنظر میرسد تا وقتی باگی را پنهان کند.
console.log(7 == "7");
console.log(7 === "7");
console.log(0 == false);
console.log(0 === false);
console.log("" == 0);
console.log("" === 0);
7 == "7" میشود true با اینکه یک طرف متن است. 7 === "7" false میماند. 0 == false و "" == 0 هم true میشوند — سورپرایز پر سر و صدا. سختگیر صادق میماند: عدد، boolean و رشتهٔ خالی چیزهای جدا هستند. در این دوره === را ترجیح بدهید.
رتبهبندی عددها
< > <= >= عددها را کنار هم میچینند. برای <= و >= مساوی هم بله حساب میشود.
console.log(3 < 10);
console.log(3 > 10);
console.log(10 <= 10);
console.log(9 >= 10);
let score = 80;
console.log(score >= 60);
خروجی true، false، true، false، true است. خط آخر همان سؤال روزمره است: «امتیاز کافی است؟» اگر برای جواب اسم میخواهید، boolean را ذخیره کنید.
let score = 80;
let pass = score >= 60;
console.log(pass);
let age = 17;
let adult = age >= 18;
console.log(adult);
pass میشود true (۸۰ از ۶۰ رد میشود). adult میشود false (۱۷ به ۱۸ نمیرسد). مقایسه خودش boolean را ساخته — شما فقط اسم گذاشتهاید.
console.log("A" < "B");
console.log("B" < "A");
console.log("apple" === "apple");
console.log("Apple" === "apple");
console.log("10" < "9");
متن ترتیب واژهنامهای دارد
رشتهها نویسهبهنویسه مثل واژهنامه مقایسه میشوند — نه مثل «اندازه» در ذهن آدم. "A" < "B" میشود true. حرف بزرگ همان کوچک نیست ("Apple" === "apple" برابر false است). رقمهای داخل نقلقول هم قانون متن را دارند: "10" < "9" ممکن است true شود چون "1" قبل از "9" میآید. وقتی منظورتان رتبهٔ عددی است با Number() تبدیل کنید.
یک چک روی صفحه
یک boolean حساب کنید، بعد برچسب کوتاهی روی صفحه بنویسید.
<!DOCTYPE html>
<html>
<head>
<title>Comparison — page check</title>
</head>
<body>
<p id="out">…</p>
<script>
let age = 18;
let adult = age >= 18;
let box = document.getElementById("out");
box.textContent = "adult=" + adult;
</script>
</body>
</html>
age برابر 18 است، پس adult میشود true و صفحه adult=true را نشان میدهد. age را 17 کنید، رفرش کنید؛ باید adult=false ببینید. جلسههای بعد با if شاخه میزنند؛ این دمو فقط بله/خیر را چاپ میکند.
خودتان امتحان کنید
8 === 8و8 === "8"را لاگ کنید.8 !== "8"و8 !== 8را لاگ کنید.- کنار هم
4 == "4"و4 === "4"را ببینید و فرقشان را حس کنید. let pts = 50بگذارید وpts >= 60را لاگ کنید."cat" === "cat"و"Cat" === "cat"را لاگ کنید.- در دموی HTML فقط
ageرا عوض کنید، رفرش کنید، متن تازهٔadult=را بخوانید.
اشتباههای رایج
- نوشتن
=وقتی منظورتان===بوده (آن یکی ذخیره میکند، سؤال نمیپرسد) - عادت به
==چون «گاهی کار میکند» — نوع را هم بیسر و صدا عوض میکند - رتبهدادن رشتهٔ رقمدار طوری که انگار عدد است (
"10" < "9") - فراموش کردن که مقایسه خودش boolean برمیگرداند — لازم نیست دستی دورش
true/falseبپیچید - قاطی کردن این خانواده با عملگرهای منطقی (
&&||) — آنها چند جواب بله/خیر را ترکیب میکنند؛ جلسهٔ بعد
خلاصه
- مقایسه سؤال میپرسد و
trueیاfalseبرمیگرداند ===و!==را ترجیح بدهید (مقدار و نوع)- برای رتبه از
<><=>=استفاده کنید؛ مساوی داخل<=و>=هست - رشتهها ترتیب واژهنامه دارند؛ رقمِ متن ممکن است عجیب به نظر برسد
- پیشفرض مبتدی: از
==و!=رد شوید - بعدی: عملگرهای منطقی — چند چک بله/خیر را با
&&و||و!ترکیب کردن
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود