जावास्क्रिप्ट में स्ट्रिंग्स के बीच समानता की जांच करने का सही तरीका क्या है?
{} == "[object Object]"
सच का मूल्यांकन करता है, उदाहरण के लिए।
String().equals()
जेएस में एक तरीका नहीं है कि कुछ कष्टप्रद ...
जावास्क्रिप्ट में स्ट्रिंग्स के बीच समानता की जांच करने का सही तरीका क्या है?
{} == "[object Object]"
सच का मूल्यांकन करता है, उदाहरण के लिए।
String().equals()
जेएस में एक तरीका नहीं है कि कुछ कष्टप्रद ...
जवाबों:
हमेशा जब तक आप==
और===
ऑपरेटरोंके उपयोग के अंतर और निहितार्थ को पूरी तरह से नहीं समझते हैं, तब तकऑपरेटर का उपयोग करें===
क्योंकि यह आपको अस्पष्ट (गैर-स्पष्ट) बग और डब्ल्यूटीएफ से बचाएगा। ==
आंतरिकरूप से "नियमित"ऑपरेटर के प्रकार-जबरदस्ती के कारण बहुत अप्रत्याशित परिणाम हो सकते हैं, इसलिए===
हमेशा अनुशंसित दृष्टिकोणका उपयोगकरना होता है।
इस अंतर्दृष्टि के लिए, और जावास्क्रिप्ट के अन्य "अच्छे बनाम बुरे" भागों को श्री डगलस क्रॉकफोर्ड और उनके काम पर पढ़ा गया। एक महान Google टेक टॉक है जहां वह बहुत सारी अच्छी जानकारी को सारांशित करता है: http://www.youtube.com/watch?v=hQVTIJBZook
अपडेट करें:
काइल सिम्पसन द्वारा द यू डॉन्ट नो जेएस सीरीज़ उत्कृष्ट है (और ऑनलाइन पढ़ने के लिए स्वतंत्र है)। श्रृंखला भाषा के आम तौर पर गलतफहमी वाले क्षेत्रों में जाती है और "खराब भागों" की व्याख्या करती है जो कि क्रॉकफोर्ड ने आपको बचने का सुझाव दिया है। उन्हें समझकर आप उनका सही उपयोग कर सकते हैं और नुकसान से बच सकते हैं।
" अप एंड गोइंग " पुस्तक में समानता पर एक खंड शामिल है , जिसमें इस विशिष्ट सारांश के साथ कि ढीले ( ==
) बनाम सख्त ( ===
) का उपयोग कैसे किया जाए :
कुछ सरल takeaways के लिए कई विवरणों को उबालने के लिए, और यह जानने में मदद करें कि क्या उपयोग करना है
==
या===
विभिन्न स्थितियों में, यहाँ मेरे सरल नियम हैं:
- यदि तुलना में मूल्य (उर्फ पक्ष)
true
याfalse
मूल्य हो सकता है , तो बचें==
और उपयोग करें===
।- एक तुलना में या तो मूल्य इन विशिष्ट मूल्यों (की हो सकता है
0
,""
या[]
, से बचने के - खाली सरणी)==
और उपयोग===
।- में सभी अन्य मामलों, आप सुरक्षित उपयोग करने के लिए
==
। न केवल यह सुरक्षित है, बल्कि कई मामलों में यह आपके कोड को इस तरह से सरल बनाता है जिससे पठनीयता में सुधार होता है।
मैं अभी भी डेवलपर्स के लिए क्रॉकफोर्ड की बात की सिफारिश करता हूं जो वास्तव में जावास्क्रिप्ट को समझने के लिए समय का निवेश नहीं करना चाहते हैं - यह एक डेवलपर के लिए अच्छी सलाह है जो केवल कभी-कभी जावास्क्रिप्ट में काम करता है।
if (typeof foo == "string")
===
ऑपरेटर का उपयोग करने के लिए बहुत बेहतर है और कभी भी "मैं वास्तव में, पूरी तरह से, 100% निश्चित है कि ==
यह कैसे व्यवहार करेगा कि मुझे लगता है कि यह होगा?"
++
/ --
) का उपयोग न करें ।
++
या --
या एक पंक्ति if/else
बयान या continue
या new
ऑपरेटर या पूरी तरह से वैध कोड प्रथाओं के किसी अन्य संख्या कि Crockford समझा गया है "हानिकारक"। और निश्चित रूप से कभी भी उपयोग के बारे में सोचने पर भी विचार नहीं करते हैं eval
या with
यहां तक कि अगर उनके नुकसान अच्छी तरह से समझे जाते हैं। और क्या आपने जेएस का अगला संस्करण देखा है? स्ट्रिकटर सिंटैक्स और कुछ मुट्ठी भर सहायक, कुछ जो सालों से तैर रहे हैं, इन सभी के बारे में हमें इस समय के बाद मिलता है। वाक्य-विन्यास बिल्कुल विकसित नहीं हुआ है। अगर क्रॉकफोर्ड इसके पीछे है, तो यह एक बुरी बात है।
यदि आप जानते हैं कि वे तार हैं, तो प्रकार की जाँच करने की कोई आवश्यकता नहीं है।
"a" == "b"
हालांकि, ध्यान दें कि स्ट्रिंग ऑब्जेक्ट्स समान नहीं होंगे।
new String("a") == new String("a")
झूठा लौटेगा।
स्ट्रिंग ऑब्जेक्ट के लिए एक आदिम में कनवर्ट करने के लिए valueOf () विधि को कॉल करें,
new String("a").valueOf() == new String("a").valueOf()
सच हो जाएगा
new String("a") == "a"
सच है (लेकिन साथ नहीं होगा ===
), क्योंकि बाएं हाथ की तरफ एक आदिम स्ट्रिंग मूल्य में परिवर्तित हो जाएगा।
new String("a") == new String("a")
, new String("a") === new String("b")
, new String("a") === new String("a")
होगा सभी वापसी false
, जब से तुम की वस्तुओं के संदर्भ के साथ काम कर रहे String
वर्ग, नहीं प्रकार के पुरातन string
।
new String(foo)
एक स्ट्रिंग ऑब्जेक्ट बनाता है , और फू को एक स्ट्रिंग आदिम में String(foo)
परिवर्तित करता है ।
जवाब देने के लिए बस एक जोड़: यदि ये सभी तरीके झूठे हैं, भले ही तार बराबर लग रहे हों, यह संभव है कि एक स्ट्रिंग के बाईं और दाईं ओर एक व्हाट्सएप हो। इसलिए, .trim()
तुलना करने से पहले तार के अंत में बस रखें :
if(s1.trim() === s2.trim())
{
// your code
}
मैंने यह जानने की कोशिश में घंटों खो दिए कि क्या गलत है। आशा है कि यह किसी की मदद करेगा!
fetch
)। बहुत बहुत धन्यवाद।
क्या मुझे इस सवाल का नेतृत्व किया है padding
औरwhite-spaces
मेरे मामले की जाँच करें
if (title === "LastName")
doSomething();
और शीर्षक था " LastName"
तो शायद आपको
trim
इस तरह से फंक्शन का उपयोग करना होगा
var title = $(this).text().trim();
.toString().trim()
टाइपस्क्रिप्ट में इस्तेमाल किया
जब तक आप वास्तव में नहीं जानते हैं कि ज़बरदस्ती कैसे काम करती है, आपको इसके बजाय ==
पहचान ऑपरेटर से बचना चाहिए और उसका उपयोग करना चाहिए ===
। लेकिन आपको यह समझने के लिए इसे पढ़ना चाहिए कि यह कैसे काम करता है ।
यदि आप उपयोग ==
करते हैं, तो आप उदाहरण के लिए भाषा को किसी प्रकार का ज़बरदस्ती करने देते हैं, उदाहरण के लिए:
"1" == 1 // true
"0" == false // true
[] == false // true
डगलस क्रॉकफोर्ड ने अपनी पुस्तक में कहा:
पहचान ऑपरेटर का उपयोग करना हमेशा बेहतर होता है।
{}==" "
मुझे Unexpected token ==
यह करने का सही तरीका क्या है?
वास्तव में दो तरीके हैं जिनसे स्ट्रिंग को जावास्क्रिप्ट में बनाया जा सकता है।
var str = 'Javascript';
यह एक आदिम स्ट्रिंग मान बनाता है।
var obj = new String('Javascript');
यह एक आवरण प्रकार की वस्तु बनाता है String
।
typeof str // string
typeof obj // object
तो समानता की जांच करने का सबसे अच्छा तरीका ===
ऑपरेटर का उपयोग करना है क्योंकि यह मूल्य और साथ ही दोनों ऑपरेंड के प्रकार की जांच करता है।
यदि आप दो वस्तुओं के बीच समानता की जांच करना चाहते हैं तो String.prototype.valueOf
सही तरीका है।
new String('javascript').valueOf() == new String('javascript').valueOf()
ट्रिक Objects
का उपयोग करके स्ट्रिंग को चेक किया जा सकता है JSON.stringyfy()
।
var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);
console.log(isEquel);
ऐसा करने का सबसे आसान तरीका यह है कि एक टर्नरी ऑपरेटर का उपयोग करें:
"was" == "was" ? true : false
लेकिन यदि आप जिस स्ट्रिंग की तुलना करना चाहते हैं वह एक सरणी में है, तो आप es6 फ़िल्टर का उपयोग करेंगे
let stringArray = ["men", "boys", "girls", "sit", "can", "gotten"]
stringArray.filter(I=> I === boys ?
stringArray.pop(indexOf(I)) : null)
उपरोक्त आपके स्ट्रिंग की जांच करेगा और जो भी स्ट्रिंग उसे सरणी से मेल खाता है जो हमारे मामले में हमने "लड़कों" को चुना था
मैं परीक्षण के दौरान एक वैकल्पिक समाधान के साथ आया था। आप स्ट्रिंग प्रोटोटाइप पर फ़ंक्शन का उपयोग कर सकते हैं।
String.prototype.betwenStr = function(one){
return JSON.stringify(new String(this)) === JSON.stringify(new String(one));
}
//call it
"hello world".betweenStr("hello world"); //returns boolean
//value
क्रोम ब्राउज़र में ठीक काम करता है
==
।