2012-01-18 9 views
8

किसी ने मुझे यह ईमेल भेजा:दो समान तार एक-दूसरे के बराबर कैसे नहीं होते हैं?

इन दोनों चेतावनी झूठी क्यों हैं?

alert('a‌' == 'a'); 
alert('a‌' === 'a'); 

यहाँ एक डेमो

JSFiddle DEMO

+4

हा-हा ... लगता है कि आप अन्य भाषा में एक और 'ए' लिखते हैं xD –

+3

कॉपी और एक फ़ाइल में चिपकाया। हेक्स संपादक के साथ देखा गया। हां, प्रत्येक तरफ एक 'ए' 61 ई 2 80 8 सी ('ए' + कुछ यूनिकोड चार) है। –

+0

ई 2808 सी यूनिकोड 'शून्य चौड़ाई गैर-योजक' चरित्र है और यह अदृश्य है जब दिए गए पाठ से प्रासंगिक नहीं है। हालांकि, यह एक स्ट्रिंग में काफी मान्य है। – Rushyo

उत्तर

14

यह एक चाल है है? क्या आपने कुछ विशेष यूनिकोड जादू के साथ उन a's उत्पन्न किए? मैं, नष्ट कर दिया जितना वे

Updated Fiddle

+0

@ ट्रिबर्बेस्ट - वे अभी भी मेरे लिए सच दिखाते हैं http://jsfiddle.net/sQrST/3/ –

14

प्रत्येक के पहले a वास्तव में एक सरल a नहीं है a's और फिर से टाइप किया उन्हें, और अब दोनों अलर्ट true दिखा। यदि आप इसके बाद कर्सर को सही स्थिति में रखते हैं और बैकस्पेस हिट करते हैं, तो आप "कुछ" हटाते हैं, और फिर यह true देता है।

मैं अपने a स्ट्रिंग की नकल की है, यह मैं जब इस कोड को चल क्या मिलता है:

$a='a‌'; 
var_dump($a); 

string(4) "a‌" 

देखें यहाँ क्या गलत है?

echo base64_encode($a); 

..returns:

YeKAjA== 

है, पत्र a के साथ एक सरल स्ट्रिंग के लिए, यह केवल YQ== होना चाहिए स्ट्रिंग लंबाई 4.

इसके अलावा, यह है।

अतिरिक्त चरित्र को "ZERO WIDTH NON-JOINER" कहा जाता है।

6

पहले 'एक' सांत्वना के लिए कहते हैं:

'a‌'.charCodeAt(0) 
97 
'a‌'.charCodeAt(1) 
8204 

8204 पल के लिए जबकि के लिए Zero-width non-joiner

एक यूनिकोड मान प्रतीत हो रहा है इसकी:

'a'.charCodeAt(0) 
97 
'a'.charCodeAt(1) 
NaN 

यह है कि विभिन्न स्वाभाविक है तार अलग हैं :)।

+0

वह क्या है? एक शून्य चरित्र? – qwertymk

+0

@qwertymk इसे "शून्य-चौड़ाई गैर-योजक" कहा जाता है - इसका आमतौर पर अरबी भाषाओं में उपयोग किया जाता है। – Li0liQ

संबंधित मुद्दे