দ্রুত উত্তর
জাভা স্ক্রিপ্ট অবজেক্টে বা অ্যারেতে একটি নির্দিষ্ট কী উপস্থিত আছে কিনা তা আমি কীভাবে চেক করব? যদি কোনও কী উপস্থিত না থাকে এবং আমি এটি অ্যাক্সেস করার চেষ্টা করি তবে এটি কী মিথ্যা ফিরে আসবে? নাকি ত্রুটি ছুড়ে মারবে?
(এসোসিয়েটিভ) অ্যারে স্টাইল বা অবজেক্ট স্টাইল ব্যবহার করে সরাসরি অনুপস্থিত সম্পত্তি অ্যাক্সেস করা একটি অনির্ধারিত ধ্রুবককে ফিরিয়ে দেবে ।
ধীর এবং নির্ভরযোগ্য মধ্যে অপারেটর এবং hasOwnProperty পদ্ধতি
লোকেরা ইতিমধ্যে এখানে উল্লেখ করেছে, আপনার কোনও "অপরিজ্ঞাত" ধ্রুবকের সাথে সম্পত্তির সাথে সম্পত্তি থাকতে পারে।
var bizzareObj = {valid_key: undefined};
সেক্ষেত্রে, আপনি ব্যবহার করতে হবে hasOwnProperty বা মধ্যে অপারেটর যদি চাবি সত্যিই আছে জানতে। তবে, তবে কী দামে?
তাই, আমি আপনাকে বলছি ...
মধ্যে অপারেটর এবং hasOwnProperty "পদ্ধতি" ব্যবহার জাভাস্ক্রিপ্ট সম্পত্তির বর্ণনাকারী প্রক্রিয়া (জাভা ভাষায় জাভা প্রতিফলন মতো) হয়।
http://www.ecma-international.org/ecma-262/5.1/#sec-8.10
সম্পত্তি বর্ণনাকারী প্রকারটি নামের সম্পত্তি বৈশিষ্ট্যগুলির কারসাজি এবং পুনঃসংশোধনকে ব্যাখ্যা করতে ব্যবহৃত হয়। সম্পত্তি বর্ণনাকারী টাইপের মানগুলি নামকৃত ক্ষেত্রগুলির সমন্বয়ে রেকর্ড করা হয় যেখানে প্রতিটি ক্ষেত্রের নাম একটি গুনের নাম এবং 8.6.1 তে উল্লিখিত হিসাবে এর মানটি একটি সম্পর্কিত বৈশিষ্ট্য মান। এছাড়াও, যে কোনও ক্ষেত্র উপস্থিত বা অনুপস্থিত থাকতে পারে।
অন্যদিকে, কোনও অবজেক্ট পদ্ধতি বা কী কল করা জাভাস্ক্রিপ্ট [[পান]] প্রক্রিয়াটি ব্যবহার করবে। এটাই এখন অনেক দ্রুত!
মাপকাঠি
http://jsperf.com/checking-if-a-key-exists-in-a-javascript-array
।
ব্যবহার
মধ্যে অপারেটর
var result = "Impression" in array;
ফলাফল ছিল
12,931,832 ±0.21% ops/sec 92% slower
HasOwnProperty ব্যবহার করা হচ্ছে
var result = array.hasOwnProperty("Impression")
ফলাফল ছিল
16,021,758 ±0.45% ops/sec 91% slower
সরাসরি উপাদানগুলিতে অ্যাক্সেস করা (বন্ধনী স্টাইল)
var result = array["Impression"] === undefined
ফলাফল ছিল
168,270,439 ±0.13 ops/sec 0.02% slower
সরাসরি উপাদানগুলিতে অ্যাক্সেস করা (বস্তুর শৈলী)
var result = array.Impression === undefined;
ফলাফল ছিল
168,303,172 ±0.20% fastest
সম্পাদনা: কোনও সম্পত্তিকে undefined
মূল্য নির্ধারণের কারণ কী ?
এই প্রশ্ন আমার ধাঁধা। জাভাস্ক্রিপ্টে, এই জাতীয় সমস্যা এড়াতে অনুপস্থিত বস্তুর জন্য কমপক্ষে দুটি উল্লেখ রয়েছে: null
এবং undefined
।
null
আদিম মান যা কোনও বস্তুর মানের ইচ্ছাকৃত অনুপস্থিতি বা সংক্ষিপ্ত ভাষায়, মানটির নিশ্চিত অভাবকে উপস্থাপন করে। অন্যদিকে, undefined
অজানা মান (সংজ্ঞায়িত নয়)। যদি এমন কোনও সম্পত্তি থাকে যা পরে যথাযথ মান সহ ব্যবহৃত হবে তবে null
পরিবর্তে ব্যবহারের রেফারেন্সটি বিবেচনা করুন undefined
কারণ প্রাথমিক মুহুর্তে সম্পত্তিটির কোনও মান অভাব হওয়ার বিষয়টি নিশ্চিত হয়ে গেছে।
তুলনা করা:
var a = {1: null};
console.log(a[1] === undefined); // output: false. I know the value at position 1 of a[] is absent and this was by design, i.e.: the value is defined.
console.log(a[0] === undefined); // output: true. I cannot say anything about a[0] value. In this case, the key 0 was not in a[].
পরামর্শ
undefined
মান সহ বস্তুগুলি এড়িয়ে চলুন । যখনই সম্ভব সরাসরি দেখুন এবং null
সম্পত্তি মানগুলি আরম্ভ করতে ব্যবহার করুন । অন্যথায়, ধীর in
অপারেটর বা hasOwnProperty()
পদ্ধতি ব্যবহার করুন ।
সম্পাদনা: 12/04/2018 - অন্য কোনও ক্ষেত্রে অনুমোদিত নয়
লোকেরা যেমন মন্তব্য করেছে, জাভাস্ক্রিপ্ট ইঞ্জিনগুলির আধুনিক সংস্করণগুলি (ফায়ারফক্স ব্যতিক্রম সহ) অ্যাক্সেস বৈশিষ্ট্যের জন্য দৃষ্টিভঙ্গি পরিবর্তন করেছে। বর্তমান বাস্তবায়ন এই বিশেষ ক্ষেত্রে আগেরটির তুলনায় ধীর হলেও অ্যাক্সেস কী এবং অবজেক্টের মধ্যে পার্থক্য অবহেলাযোগ্য।