जवाबों:
ब्रैकेट नोटेशन अब IE7 और उसके अलावा सभी प्रमुख ब्राउज़रों पर काम करता है।
// Bracket Notation
"Test String1"[6]
// charAt Implementation
"Test String1".charAt(6)
इन कारणों से ( स्रोत ):
IE7 में यह नोटेशन काम नहीं करता है। पहला कोड स्निपेट IE7 में अपरिभाषित वापस आ जाएगा। यदि आप अपने कोड में स्ट्रिंग के लिए ब्रैकेट नोटेशन का उपयोग करते हैं और आप माइग्रेट करना चाहते हैं
.charAt(pos), तो यह एक वास्तविक दर्द है: ब्रैकेट्स का उपयोग आपके कोड पर किया जाता है और यह पता लगाने का कोई आसान तरीका नहीं है कि क्या यह एक स्ट्रिंग या एक सरणी के लिए है / वस्तु।आप इस संकेतन का उपयोग करके वर्ण सेट नहीं कर सकते। जैसा कि किसी भी प्रकार की कोई चेतावनी नहीं है, यह वास्तव में भ्रमित और निराशाजनक है। यदि आप
.charAt(pos)फ़ंक्शन का उपयोग कर रहे थे , तो आपको ऐसा करने के लिए लुभाया नहीं गया होगा।
से MDN :
एक स्ट्रिंग में एक व्यक्ति के चरित्र तक पहुंचने के दो तरीके हैं। पहला
charAtतरीका है, ECMAScript 3 का हिस्सा:return 'cat'.charAt(1); // returns "a"दूसरा तरीका स्ट्रिंग को एक सरणी की तरह वस्तु के रूप में व्यवहार करना है, जहां प्रत्येक व्यक्तिगत वर्ण एक संख्यात्मक सूचकांक के अनुरूप हैं। यह IE के अलावा उनके पहले संस्करण के बाद से अधिकांश ब्राउज़रों द्वारा समर्थित किया गया है। इसे ECMAScript 5 में मानकीकृत किया गया था:
return 'cat'[1]; // returns "a"दूसरे तरीके के लिए ECMAScript 5 समर्थन की आवश्यकता होती है (और कुछ पुराने ब्राउज़रों में समर्थित नहीं)।
दोनों ही मामलों में, एक व्यक्ति के चरित्र को बदलने की कोशिश नहीं की जाएगी, क्योंकि तार अपरिवर्तनीय हैं, अर्थात, उनके गुण न तो "लिखने योग्य" हैं और न ही "कॉन्फ़िगर करने योग्य" हैं।
str.charAt(i) यदि IE6 / IE7 संगतता की आवश्यकता है, तो एक संगतता परिप्रेक्ष्य से बेहतर है।str[i] अधिक आधुनिक है और IE8 + और अन्य सभी ब्राउज़रों (सभी एज / फ़ायरफ़ॉक्स / क्रोम, सफारी 2+, सभी आईओएस / एंड्रॉइड) में काम करता है।वे किनारे के मामलों में अलग-अलग परिणाम दे सकते हैं।
'hello'[NaN] // undefined
'hello'.charAt(NaN) // 'h'
'hello'[true] //undefined
'hello'.charAt(true) // 'e'
CharAt समारोह कैसे सूचकांक एक में संख्या में बदल जाती है पर निर्भर करता है कल्पना ।
'hello'[undefined] // undefinedऔर'hello'.charAt(undefined) //h
nullकी तरह काम करता है undefined, लेकिन इसे देखें: "hello"["00"] // undefinedलेकिन "hello".charAt("00") // "h"और"hello"["0"] // "h"
[]।
.charAt()अपने पैरामीटर के लिए एक अतिरिक्त रूपांतरण करता है Number। FYI करें, आजकल लगभग कोई प्रदर्शन अंतर नहीं है।
String.charAt () मूल मानक है और सभी ब्राउज़रों में काम करता है। IE 8+ और अन्य ब्राउज़रों में, आप वर्णों तक पहुँचने के लिए ब्रैकेट नोटेशन का उपयोग कर सकते हैं, लेकिन IE 7 और नीचे ने इसका समर्थन नहीं किया है।
अगर कोई वास्तव में IE 7 में ब्रैकेट नोटेशन का उपयोग करना चाहता है, तो स्ट्रिंग को एक सरणी में परिवर्तित करने के लिए बुद्धिमान है str.split('')और फिर इसे किसी भी ब्राउज़र के साथ संगत, सरणी के रूप में उपयोग करें।
var testString = "Hello";
var charArr = testString.split("");
charArr[1]; // "e"
बहुत दिलचस्प परिणाम जब आप charAt()विधि बनाम स्ट्रिंग इंडेक्स एक्सेसर का परीक्षण करते हैं । लगता है क्रोम एकमात्र ब्राउज़र है जो charAtअधिक पसंद करता है।
indexतेजी से क्रोम में तेजी से, भी है
जब आप किसी इंडेक्स को एक्सेस करने की कोशिश करते हैं, जो सीमा से बाहर होता है या पूर्णांक नहीं होता है, तो अंतर होता है।
string[x]यदि 0 और , के बीच पूर्णांक है x, stringतो वें स्थान पर वर्ण लौटाता है और अन्यथा लौटता है।xstring.length-1undefined
string.charAt(x)यहांx बताई गई प्रक्रिया का उपयोग करके एक पूर्णांक में धर्मान्तरित (जो मूल रूप से एक पूर्णांक संख्या होने पर नीचे की ओर घूमता है और 0 यदि है तो) और फिर पूर्णांक और 0 के बीच में वर्ण को उस स्थिति में लौटाता है, और कोई रिक्त स्ट्रिंग लौटाता है अन्यथा ।xxparseInt(x)NaNstring.length-1
यहाँ कुछ उदाहरण हैं:
"Hello"[313] //undefined
"Hello".charAt(313) //"", 313 is out of bounds
"Hello"[3.14] //undefined
"Hello".charAt(3.14) //'l', rounds 3.14 down to 3
"Hello"[true] //undefined
"Hello".charAt(true) //'e', converts true to the integer 1
"Hello"["World"] //undefined
"Hello".charAt("World") //'H', "World" evaluates to NaN, which gets converted to 0
"Hello"[Infinity] //undefined
"Hello".charAt(Infinity) //"", Infinity is out of bounds
एक और अंतर यह है कि string[x]कुछ भी नहीं करने के लिए असाइन करना (जो भ्रामक हो सकता है) और असाइन करना string.charAt(x)एक त्रुटि है (जैसा कि अपेक्षित है):
var str = "Hello";
str[0] = 'Y';
console.log(str); //Still "Hello", the above assignment did nothing
str.charAt(0) = 'Y'; //Error, invalid left-hand side in assignment
कारण यह है कि string[x]काम नहीं करने का कारण यह है कि जावास्क्रिप्ट तार अपरिवर्तनीय हैं ।
"😃".charAt(0)