জেএস অবজেক্টে কী (স্ট্রিং) এর দৈর্ঘ্যের কোনও সীমা রয়েছে?


85

সুতরাং আমাদের একটি কেস হয়েছিল যেখানে আমাদের কোনও অবজেক্ট থাকবে, যেখানে কীটি আইডি (ইন্ট) এবং মানটি স্ট্রিং। তবে আমরা লক্ষ্য করেছি যে বেশিরভাগ সময় আমরা স্ট্রিংয়ের উপর ভিত্তি করে আইডি সন্ধান করি, সুতরাং আমরা সিদ্ধান্ত নিয়েছি যে এটির বিপরীত হবে এবং একটি স্ট্রিংটি কী তৈরি করুন এবং মানটি আইডি। কারণ যে ভাবে পরিবর্তে প্রতিটি আইটেমের মাধ্যমে চালু এবং মান তুলনা, আমরা শুধু কাজ করতে পারে var id = storage[text];। নীচে আমরা কী করেছি তার উদাহরণ দেওয়া হল।

পুরানো বাস্তবায়নের উদাহরণ এখানে:

var storage = {
  0 : null,
  1 : "Hello",
  2 : "world!",
  3 : "How are you?"
}

নতুন বাস্তবায়নের উদাহরণ এখানে:

var storage = {
  "null" : 0,
  "Hello" : 1,
  "world!" : 2,
  "How are you?" : 3
}

আমি বুঝতে পারি যে এখন স্ট্রিংটি কী এবং একই স্ট্রিংগুলির জন্য একই আইডি পাওয়া ঠিক। তবে এখন থেকে স্ট্রিংটি সম্ভাব্য বেশ বিশাল হতে পারে (পাতলা সম্ভাবনা, তবে সম্ভবত স্ট্রিং প্রতি সর্বাধিক 1KB), জেএস বা অ্যান্ড্রয়েড ওয়েবভিউ অবজেক্ট কীগুলিতে কোনও দৈর্ঘ্যের সীমা রাখে?

এবং এছাড়াও, এই বাস্তবায়ন অসুবিধা আছে? আমি এখনও অবধি কোনও সমস্যা লক্ষ্য করিনি, তবে আপনি কখনই জানেন না।

উত্তর:


98

আমি এটি কিছুটা গবেষণা করেছি।

এমডিএন ইস্যুতে নীরব , এবং অনুরূপটিও রয়েছে ( ES5 , ES6 )। তারা কেবলমাত্র জানায় যে সম্পত্তির অ্যাক্সেসরের অবশ্যই কোনও স্ট্রিং হওয়া উচিত, কোনও যোগ্যতা ছাড়াই - অন্য কথায়, স্পেস সম্পর্কিত যতদূর সীমাবদ্ধতা নেই। এটি খুব কমই অবাক হয়।

ব্রাউজারগুলি কীভাবে এটি পরিচালনা করে তা অন্য বিষয়। আমি একটি পরীক্ষা সেট আপ করেছি এবং এটি বেশ কয়েকটি ব্রাউজারে চালাচ্ছি। ক্রোম 40 (ডেস্কটপ), ক্রোম 40 (অ্যান্ড্রয়েড 5.1), ফায়ারফক্স 36, অপেরা 27, এবং আই 9 + 2 পর্যন্ত 27 টি অক্ষরের একটি সম্পত্তি নাম নিয়ে কাজ করতে পারে । সাফারি 8 (ওএস এক্স ইয়োসেমাইট) এমনকি 2 30 টি অক্ষরের সম্পত্তির নাম পরিচালনা করতে পারে ।

IE ব্যতীত সমস্ত ব্রাউজারের জন্য, সর্বোচ্চ সম্পত্তি দৈর্ঘ্য সর্বাধিক স্ট্রিং দৈর্ঘ্যের সমান। আইই 9 + সর্বাধিক স্ট্রিং দৈর্ঘ্যের ~ 2 30 টি অক্ষর পরিচালনা করতে পারে তবে অন্যান্য ব্রাউজারগুলির মতো অবজেক্ট কীগুলির সীমা 2 27 অক্ষর হতে পারে।

আইও 8 তে আইই 8 এবং সাফারিতে পরীক্ষাটি কার্যকর হয়নি, সম্ভবত পরীক্ষার কোডের কারণে সৃষ্ট মেমরি সমস্যার কারণে due

সংক্ষেপে, চূড়ান্ততার দিকে নিয়ে যাওয়ার পরেও দীর্ঘ সম্পত্তির নাম ব্যবহার করা নিরাপদ। যতক্ষণ স্ট্রিংগুলি ব্রাউজারগুলি পরিচালনা করতে পারে তার সীমার মধ্যে থাকবে যতক্ষণ না আপনি এগুলিকে সম্পত্তির নাম হিসাবেও ব্যবহার করতে পারেন।


18
আধুনিক ব্রাউজারগুলিতে দীর্ঘ কীগুলির জন্য কোনও রানটাইম জরিমানা?
আহমেদ ফসিহ

@ আহমেদফ্যাসিহ আমি এটি পরীক্ষা করিনি, তাই আমি নিশ্চিতভাবে জানি না। যদি কোনও পারফরম্যান্স পেনাল্টি থাকে তবে আমি ধরে নিই যে এটি দীর্ঘ স্ট্রিংগুলির সাথে তুলনা করার সাথে করতে হবে। অনুশীলনে যে বিষয়গুলি আছে সে সম্পর্কে আমি অবাক হয়ে যাব - যদি না কীগুলি বিশাল এবং অসংখ্য হয় এবং আপনি মেমরির প্রতিবন্ধকতাগুলি, যেমন মোবাইলে আঘাত করতে না শুরু করেন।
হ্যাশচেঞ্জ

7
ES7 সুনির্দিষ্ট "উপাদানগুলি" এর 2 ^ 53 - 1 এর সীমা নির্দিষ্ট করে । তবে আমি মনে করি এটি হিপ সর্বাধিক আকারের দ্বারা সীমাবদ্ধ
মেমস

6
" এমডিএন ইস্যুতে নীরব… "। আর নেই । ;-)
রবিজি

4
সুতরাং আসল আকারগুলি 2 ^ 27 = 0.125 গিগাবাইট, এবং 2 ^ 30 = 1 জিবি। এটি আমার জন্য প্রচুর পরিমাণে :)
সোরিন সি

34

না, স্ট্রিং দৈর্ঘ্যের কোনও সীমা নেই (যতক্ষণ না এটি মেমরির সাথে ফিট করে) এবং আপনার প্রয়োগটিও ঠিক আছে বলে মনে হয়। উদাহরণস্বরূপ, বুলিয়ান মান সহ এগুলি 'ঘুরিয়ে' দেওয়া খুব তীব্র সাধারণ। এবং কী হিসাবে স্ট্রিংগুলির মতো: স্ট্রিংগুলি স্থায়ী চিহ্ন যা নির্দিষ্ট ঠিকানায় সঞ্চিত হয় এবং অ্যারেটির সূচক হিসাবে আসলে কী ব্যবহৃত হয় তা হ'ল ঠিকানা (ওরফে পয়েন্টার ওরফে রেফারেন্স) এবং স্ট্রিং নিজেই নয়।


7
"স্ট্রিংগুলি অপরিবর্তনীয় প্রতীক": আপনি এটি কোথায় শিখলেন?
অ্যান্ড্রু

4
মজাদার. আপনি সম্ভবত একটি রেফারেন্স বা উত্স যোগ করতে পারেন?
হ্যাশচেঞ্জ

8
অনেক ভাষায়, স্ট্রিং অপরিবর্তনীয়। জাভাস্ক্রিপ্ট সেই ভাষাগুলির মধ্যে একটি। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

4
অন্যের জন্য কিছুটা স্বল্প স্পষ্টতা যুক্ত করতে। এর অর্থ এই যে আপনি কোনও ক্রিয়া সম্পাদন করতে পারবেন না যা স্ট্রিং পরিবর্তন করে। আপনি কৌশল পরিবর্তন করতে এবং একটি নতুন স্ট্রিং ফিরিয়ে দিতে পারেন, তবে বাস্তবে
প্যাট্রিক

গৃহীত উত্তরটি আরও ব্যবহারিক, তবে এটিই আসল উত্তর।
TheUtherSide

6

এটি ECMAScript 2016 এর সাথে দেখা গেলেও এখন এই প্রশ্নের সুনির্দিষ্ট উত্তর রয়েছে। মতে string.length উপর MDN ওয়েব ডক্স :

ECMAScript 2016 (সংস্করণ 7) সর্বাধিক দৈর্ঘ্য 2 ^ 53 - 1 উপাদান স্থাপন করেছে। পূর্বে, কোনও সর্বাধিক দৈর্ঘ্য নির্দিষ্ট করা হয়নি।

আপনি এটি ECMAScript® 2016 ভাষা নির্দিষ্টকরণে নির্দিষ্ট করেও দেখতে পারেন :

স্ট্রিং টাইপটি সর্বাধিক 2 53 -1 উপাদানগুলির দৈর্ঘ্য পর্যন্ত শূন্য বা আরও 16-বিট স্বাক্ষরযুক্ত পূর্ণসংখ্যার মানগুলি ("উপাদানগুলি") এর অর্ডারযুক্ত ক্রমের সেট set

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