string.charAt (x) বা স্ট্রিং [এক্স]?


উত্তর:


243

ব্র্যাকেট স্বরলিপি এখন আই 7 এবং নীচে বাদে সমস্ত বড় ব্রাউজারগুলিতে কাজ করে।

// Bracket Notation
"Test String1"[6]

// charAt Implementation
"Test String1".charAt(6)

এই কারণগুলির জন্য বন্ধুত্বগুলি ব্যবহার করা খারাপ ধারণা হিসাবে ব্যবহৃত হয়েছিল ( উত্স ):

এই স্বরলিপি আই 7 তে কাজ করে না। প্রথম কোড স্নিপেট আইই 7 এ অপরিবর্তিত থাকবে। যদি আপনি আপনার সমস্ত কোডে স্ট্রিংয়ের জন্য বন্ধনী চিহ্নিতকরণ ব্যবহার করতে চান এবং আপনি এতে স্থানান্তর করতে চান তবে .charAt(pos)এটি একটি আসল ব্যথা: বন্ধনগুলি আপনার কোডের সমস্ত ব্যবহৃত হয় এবং এটি কোনও স্ট্রিং বা অ্যারে / এর জন্য অনুসন্ধান করার কোনও সহজ উপায় নেই detect অবজেক্ট।

আপনি এই চিহ্নটি ব্যবহার করে চরিত্রটি সেট করতে পারবেন না। যেহেতু কোনও ধরণের সতর্কতা নেই, এটি সত্যই বিভ্রান্তিকর এবং হতাশাব্যঞ্জক। আপনি যদি .charAt(pos)ফাংশনটি ব্যবহার করে থাকেন তবে এটি করার জন্য আপনাকে প্রলুব্ধ করা হত না।


21
সত্য, স্বরলিপি আই 7 তে কাজ করে না, তবে এটি আজকাল কোনও বিশাল অসুবিধা নয়। এদিকে, আমি যখন বেঞ্চমার্কগুলিতে কোনও বস্তুতে স্ট্রিংটি বাক্স করা হয় তখন ক্রোমে চারএট বনাম সূচক ব্যবহার করার সময় পারফরম্যান্সে তিনবারের হ্রাস দেখিয়েছিলাম। আমি জানি এটি সত্যিই প্রাসঙ্গিক নয়, তবে এখনও লক্ষণীয়। jsfiddle.net/mdasxxd2
সিডারাইট জ্যাকওয়েডেক্স

5
আরও নির্ভুল পরীক্ষা (বেঞ্চমার্ক.জেএস) esbench.com/bench/579609a0db965b9a00965b9e
NoNameProdided

3
সর্বাধিক রান হওয়া সত্ত্বেও এই উত্তরটি এখন (2019) তারিখের উল্লেখযোগ্যতার বাইরে। MDN এর উদ্ধৃতি দিয়ে নীচের উত্তরগুলি পরিবর্তে উল্লেখ করা উচিত।
স্কট মার্টিন

97

এমডিএন থেকে :

স্ট্রিংয়ে পৃথক চরিত্রটি অ্যাক্সেস করার দুটি উপায় রয়েছে। প্রথমটি হ'ল charAtপদ্ধতি, ইসমাস্ক্রিপ্ট 3 এর অংশ:

return 'cat'.charAt(1); // returns "a"

অন্য উপায়টি হ'ল অ্যারে-এর মতো অবজেক্ট হিসাবে স্ট্রিংকে আচরণ করা, যেখানে প্রতিটি স্বতন্ত্র অক্ষর একটি সংখ্যিক সূচকের সাথে মিল রাখে। এটি আইআই ব্যতীত বেশিরভাগ ব্রাউজারগুলি তাদের প্রথম সংস্করণ থেকে সমর্থন করেছে। এটি ECMAScript 5 তে প্রমিত করা হয়েছিল:

return 'cat'[1]; // returns "a"

দ্বিতীয় উপায়ে ECMAScript 5 সমর্থন প্রয়োজন (এবং কিছু পুরানো ব্রাউজারগুলিতে সমর্থিত নয়)।

উভয় ক্ষেত্রেই, একটি স্বতন্ত্র চরিত্র পরিবর্তন করার চেষ্টা করা কার্যকর হবে না, কারণ স্ট্রিংগুলি পরিবর্তনযোগ্য, যেমন, তাদের বৈশিষ্ট্যগুলি "লিখনযোগ্য" বা "কনফিগারযোগ্য" নয়।

  • str.charAt(i) যদি আই 6 / আই 7 সামঞ্জস্যতা প্রয়োজন হয় তবে একটি সামঞ্জস্যের দৃষ্টিভঙ্গি থেকে ভাল।
  • str[i] আরও আধুনিক এবং IE8 + এবং অন্যান্য সমস্ত ব্রাউজারগুলিতে (সমস্ত এজ / ফায়ারফক্স / ক্রোম, সাফারি 2+, সমস্ত আইওএস / অ্যান্ড্রয়েড) কাজ করে।

19
সত্য, ইসিএমএ 5 এখনও সমস্ত ব্রাউজারগুলিতে সমর্থিত নয়, তবে এটি বেশিরভাগ ব্রাউজারগুলিতে সমর্থিত: যার অর্থ IE9 এবং তারপরে এবং সমস্ত ক্রোম / ফায়ারফক্স সংস্করণ: kangax.github.io/compat-table/es5/#Property_access_on_strings কোনও জেএস বৈশিষ্ট্য আর কখনও আসবে না 100% সমর্থিত হওয়া এবং আমি অনুভব করি যে ইসমা 5 টি বৈশিষ্ট্য ব্যবহার এড়ানো আমাদের অতীতের জন্য চিরকাল ছেড়ে চলে যাবে ...
ড্যানি আর

83

প্রান্তের ক্ষেত্রে তারা বিভিন্ন ফলাফল দিতে পারে।

'hello'[NaN] // undefined
'hello'.charAt(NaN) // 'h'

'hello'[true] //undefined
'hello'.charAt(true) // 'e'

CharAt ফাংশন কিভাবে সূচক একটি সংখ্যায় রূপান্তরিত হয় উপর নির্ভর করে বৈশিষ্ট


এছাড়াও 'hello'[undefined] // undefinedএবং'hello'.charAt(undefined) //h
জুয়ান মেন্ডেস

3
nullমত কাজ করে undefined, তবে এটি দেখুন: "hello"["00"] // undefinedতবে "hello".charAt("00") // "h"এবং"hello"["0"] // "h"
পানজী

11
এই আন্তরিকভাবে আমাকে ব্যবহার চালিয়ে যেতে বিশ্বাসী []
ApproachingDarknessFish

এর অর্থ এটিও .charAt()এর পরামিতিটির জন্য একটি অতিরিক্ত রূপান্তর সম্পাদন করে Number। এফওয়াইআই, আজকাল প্রায় কোনও পারফরম্যান্সের পার্থক্য নেই।
Константин Ван

7
এই উত্তরটি উপরে উঠতে হবে, এটি আসলে ব্যাখ্যা করে যে 2 পদ্ধতির মধ্যে পার্থক্য রয়েছে। অন্যান্য উত্তরগুলি আই 7 এর সামঞ্জস্যতা সম্পর্কে কথা বলছে (আমি সত্যই বলতে চাইছি?) যখন এই উত্তরটি একটি খুব বাস্তব সমস্যা ব্যাখ্যা করে।
ঝড় মুলার

11

স্ট্রিং.সিআরএআট () হ'ল মূল স্ট্যান্ডার্ড এবং সমস্ত ব্রাউজারে কাজ করে। IE 8+ এবং অন্যান্য ব্রাউজারগুলিতে, আপনি অক্ষর অ্যাক্সেস করতে বন্ধনী স্বাক্ষর ব্যবহার করতে পারেন তবে IE 7 এবং নীচে এটি সমর্থন করে না।

যদি কেউ সত্যিই আই some তে বন্ধনী স্বরলিপি ব্যবহার করতে চান, তবে স্ট্রিংটিকে একটি অ্যারেতে রূপান্তর করা str.split('')এবং তারপরে এটি কোনও অ্যারে হিসাবে ব্যবহার করা বুদ্ধিমানের সাথে কোনও ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ।

var testString = "Hello"; 
var charArr = testString.split("");
charArr[1]; // "e"

5
আইই 8 থেকে বন্ধনীর স্বরলিপি সমর্থন করে।
মারেক


সত্যিকারের বৃহত স্ট্রিংগুলির সাথে কাজ করার সময় এই পদ্ধতিটি অকার্যকর হবে কারণ এটি মেমরির (মূল স্ট্রিং এবং অ্যারে) নকল করবে।
ড্যানিয়েল

8

স্ট্রিং সূচক অ্যাক্সেসর বনাম charAt()পদ্ধতিটি পরীক্ষা করার সময় খুব আকর্ষণীয় ফলাফল । মনে হচ্ছে ক্রোম একমাত্র ব্রাউজার যা charAtআরও বেশি পছন্দ করে।

চারআট বনাম সূচক 1

চার্টআট বনাম সূচক 2

চার্টএট বনাম সূচক 3


1
এই আর হয় না। indexক্রোমের ক্ষেত্রেও খুব দ্রুত।
মাকো-টাকো

5

আপনি যখন কোনও সূচক অ্যাক্সেস করার চেষ্টা করেন যা কোনও সংখ্যার সীমা ছাড়িয়ে যায় না বা কোনও পূর্ণসংখ্যা নয় not

string[x]0 এবং এর মধ্যে একটি পূর্ণসংখ্যা হলে অক্ষরটি xth ম স্থানে প্রদান করে এবং অন্যথায় ফিরে আসে ।stringxstring.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]না কাজ, কারণ জাভাস্ক্রিপ্ট স্ট্রিং অপরিবর্তনীয় হয়

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.