আমি একটি কোড উদাহরণে হোঁচট খেয়েছি যা এই তুলনাটি ব্যবহার করছিল:
var someVar = 0;
Object.is(false, someVar); //Returns false
আমি জানি false == 0
হবে true
কেন আমরা আছে এর ===
।
এর Object.is
থেকে আলাদা কীভাবে ===
?
আমি একটি কোড উদাহরণে হোঁচট খেয়েছি যা এই তুলনাটি ব্যবহার করছিল:
var someVar = 0;
Object.is(false, someVar); //Returns false
আমি জানি false == 0
হবে true
কেন আমরা আছে এর ===
।
এর Object.is
থেকে আলাদা কীভাবে ===
?
উত্তর:
===
জাভাস্ক্রিপ্টে কড়া তুলনা অপারেটর বলা হয়। Object.is
এবং কঠোর তুলনা অপারেটর NaN
এবং বাদে ঠিক একই আচরণ করে +0/-0
।
এমডিএন থেকে:
Object.is()
===
অপারেটর অনুযায়ী পদ্ধতিটি সমান হওয়ার মতো নয় ।===
অপারেটর (এবং==
পাশাপাশি অপারেটর) সংখ্যা মান -0 এবং +0 সমান এবং একইরূপে একইরূপেNumber.NaN
যেমন সমান নয়NaN
।
নীচের কোডটি ===
এবং এর মধ্যে পার্থক্য তুলে ধরে Object.is()
।
console.log(+0 === -0); //true
console.log(Object.is(+0, -0)); //false
console.log(NaN === NaN); // false
console.log(Object.is(NaN, NaN)); //true
console.log(Number.NaN === Number.NaN); // false
console.log(Object.is(Number.NaN, Number.NaN)); // true
console.log(NaN === Number.NaN); // false
console.log(Object.is(NaN, Number.NaN)); // true
আপনি এখানে আরও উদাহরণ পেতে পারেন ।
দ্রষ্টব্য : Object.is
ECMAScript 6 প্রস্তাবনার অংশ এবং এটি এখনও ব্যাপকভাবে সমর্থিত নয় (যেমন এটি ইন্টারনেট এক্সপ্লোরারের কোনও সংস্করণ বা অন্যান্য ব্রাউজারগুলির অনেক পুরানো সংস্করণ দ্বারা সমর্থিত নয়)। তবে আপনি নন-ইএস 6 ব্রাউজারগুলির জন্য একটি পলিফিল ব্যবহার করতে পারেন যা উপরের লিঙ্কটিতে পাওয়া যাবে।
.x
স্ট্রিং বক্সগুলিতে এটি কোনও String
বস্তুতে পরিণত করা হয়েছে (এবং স্ট্রিং আদিম মান নয়) এবং তুলনাটি কোনও অবজেক্ট এবং একটি স্ট্রিংয়ের মধ্যে হবে - এটি খুব সূক্ষ্ম এবং একটি অসুবিধা - স্ট্যাটিকস এই সমস্যাগুলি এড়ায়, স্থির পদ্ধতিগুলি সহজ এবং ব্যবহার সহজ।
document.createElement('div').isEqualNode(document.createElement('div')) === true
Object.is
স্পেসিফিকেশনের সেমভ্যালিউ অ্যালগোরিদম===
ব্যবহার করে , যেখানে স্ট্রাইক ইক্যুয়ালিটি অ্যালগরিদম ব্যবহার করে । স্ট্রাইক ইক্যুয়ালিটি অ্যালগোরিদমের একটি নোট এই পার্থক্যটিকে ডেকেছে:
স্বাক্ষরিত শূন্য এবং ন্যানের চিকিত্সার ক্ষেত্রে এই অ্যালগরিদম সেমভ্যালু অ্যালগরিদম থেকে আলাদা ...
মনে রাখবেন যে:
NaN === NaN
মিথ্যা, তবে Object.is(NaN, NaN)
সত্য+0 === -0
সত্য, তবে Object.is(+0, -0)
মিথ্যা-0 === +0
সত্য, তবে Object.is(-0, +0)
মিথ্যাজাভাস্ক্রিপ্টটিতে কমপক্ষে চার ধরণের "সমতা" রয়েছে:
==
), যেখানে অপারেশনগুলি তাদের ম্যাচ করার জন্য প্ররোচিত হবে। বিধিগুলি স্পষ্টভাবে নির্দিষ্ট , তবে স্পষ্ট নয়। ( "" == 0
হয় true
; "true" == true
হয় false
, ...)।===
), যেখানে বিভিন্ন ধরণের অপারেশনগুলি জোর করা হবে না (এবং সমান হবে না) তবে উপরে নোট NaN
এবং ইতিবাচক এবং নেতিবাচক শূন্য দেখুন seeObject.is
)SameValue
ব্যতীত +0
এবং -0
একই পরিবর্তে ভিন্ন (দ্বারা ব্যবহৃত Map
কী-জন্য, এবং দ্বারা Array.prototype.includes
)।এর রয়েছে বস্তুর সমানতা , যা ভাষা দ্বারা উপলব্ধ বা রানটাইম নয় নিজেই, কিন্তু সাধারণত প্রকাশ পায় বস্তু একই প্রোটোটাইপ, একই বৈশিষ্ট্য আছে, এবং তাদের সম্পত্তি মান একই (এর "একই" কিছু যুক্তিসঙ্গত সংজ্ঞা দ্বারা হয় )।
- যদি টাইপ (এক্স) প্রকার (y) থেকে পৃথক হয় তবে মিথ্যা প্রত্যাবর্তন করুন।
- টাইপ (x) যদি সংখ্যা হয় তবে
- X যদি NaN হয় এবং y হয় NaN হয় তবে সত্য আসুন।
- যদি x +0 হয় এবং y -0 হয় তবে মিথ্যা প্রত্যাবর্তন করুন।
- যদি x -0 হয় এবং y +0 হয় তবে মিথ্যা প্রত্যাবর্তন করুন।
- X যদি y এর সমান সংখ্যার মান হয় তবে সত্যটি প্রত্যাবর্তন করুন।
- মিথ্যা প্রত্যাবর্তন।
- সেমভ্যালিউননম্বার (x, y) রিটার্ন করুন।
... যেখানে সেমভ্যালুঅন নাম্বার রয়েছে:
- দৃsert়তা: প্রকার (এক্স) সংখ্যা নয়।
- দৃsert়তা: টাইপ (এক্স) টাইপ (y) এর সমান।
- প্রকার (x) যদি অপরিজ্ঞাত হয় তবে সত্যটি প্রত্যাবর্তন করুন।
- যদি টাইপ (x) নাল হয় তবে সত্যটি প্রত্যাবর্তন করুন।
- যদি টাইপ (এক্স) স্ট্রিং হয় তবে
- যদি x এবং y কোড ইউনিটের একই ক্রম হয় (একই সূচীতে একই দৈর্ঘ্য এবং একই কোড ইউনিট), সত্য ফিরে আসুন; অন্যথায়, মিথ্যা ফিরে।
- টাইপ (এক্স) যদি বুলিয়ান হয় তবে
- যদি x এবং y উভয়ই সত্য হয় বা উভয়ই মিথ্যা হয় তবে সত্য আসুন; অন্যথায়, মিথ্যা ফিরে।
- টাইপ (এক্স) যদি প্রতীক হয় তবে
- যদি x এবং y উভয়ই একই প্রতীক মান হয় তবে সত্য আসুন; অন্যথায়, মিথ্যা ফিরে।
- যদি x এবং y একই বস্তুর মান হয় তবে সত্যটি প্রত্যাবর্তন করুন। অন্যথায়, মিথ্যা ফিরে।
- যদি টাইপ (এক্স) প্রকার (y) থেকে পৃথক হয় তবে মিথ্যা প্রত্যাবর্তন করুন।
- টাইপ (x) যদি সংখ্যা হয় তবে
- যদি এক্স NaN হয় তবে মিথ্যা প্রত্যাবর্তন করুন।
- যদি YNN হয় তবে মিথ্যা প্রত্যাবর্তন করুন।
- X যদি y এর সমান সংখ্যার মান হয় তবে সত্যটি প্রত্যাবর্তন করুন।
- যদি x +0 হয় এবং y -0 হয় তবে সত্য আসুন।
- যদি x--এবং y হয় +0 হয় তবে সত্য আসুন।
- মিথ্যা প্রত্যাবর্তন।
- সেমভ্যালিউননম্বার (x, y) রিটার্ন করুন।
Object.is = function(v1, v2){
//test for `-0`
if(v1 === 0 && v2 === 0) {
return 1 / v1 === 1 / v2;
}
//test for `NaN`
if(v1 !== v1) {
return v2 !== v2;
}
//everything else
return v1 === v2;
}
উপরে Object.is
আগ্রহী যে কেউ জানতে আগ্রহী তাদের জন্য কীভাবে কাজ করে তা দেখানোর জন্য উপরের পলিফিল ফাংশন । আপনাকে -জানা-জেএস-এর একটি উল্লেখ
Object.is()
ফাংশন আর্গুমেন্ট হিসাবে 2 মান নেয় এবং ফেরৎ সত্য যদি 2 দেওয়া মান সঠিক একই হয়, অন্যথায় এটি মিথ্যা ফিরে আসবে।
আপনি ভাবতে পারেন, ===
অপারেটরের সাথে জাভাস্ক্রিপ্টে আমাদের ইতিমধ্যে কঠোর সমতা (চেক টাইপ + মান) পরীক্ষা করা আছে , কেন আমাদের এই ফাংশনটির প্রয়োজন? ভাল কঠোর সাম্যতা কিছু ক্ষেত্রে যথেষ্ট নয় এবং সেগুলি নিম্নলিখিত:
console.log(NaN === NaN); // false
console.log(-0 === +0); // true
Object.is()
এই মানগুলির তুলনা করতে সক্ষম হয়ে আমাদের দেখতে সহায়তা করে যে সেগুলি অনুরূপ কিনা, কঠোর সাম্য অপারেটর কিছু করতে পারে না।
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(-0, 0)); // false
console.log(Object.is(+0, +0)); // true
console.log(Object.is(+0, -0)); // false
সংক্ষেপে, তারা অনুরূপ, তবে Object.is
স্মার্ট এবং আরও নির্ভুল ...
আসুন এটি দেখুন ...
+0 === -0 //true
তবে এটি পুরোপুরি ঠিক নয় কারণ এটি উপেক্ষা করে -
এবং এর +
আগে ...
এখন আমরা ব্যবহার:
Object.is(+0, -0) //false
আপনি দেখতে হিসাবে, এটি তুলনা আরও সঠিক।
NaN
যে ক্ষেত্রে আরও সঠিক মত কাজ করে, হিসাবে NaN
একই বিবেচনা ।