angular টাইপসক্রিপ্ট/কৌণিক/ইএস 6: শেষ পর্যন্ত আমি কি "লুপের জন্য" মারা যেতে পারি?



typescript ecmascript-6 (1)

আমি সবসময় জাভাস্ক্রিপ্টে অবজেক্টগুলির উপর লুপ করার সময় hasOwnProperty() যাচাই করার প্রয়োজনীয়তাটি সর্বদা অপছন্দ করেছি:

for ( var key in object ) {
    if ( !object.hasOwnProperty( key ) ) {
        continue;
    }

    // Now I can do whatever I needed to do
}

এটি সর্বদা মনে হয় কোনও অবজেক্টের কীগুলির মধ্য দিয়ে লুপ করার জন্য উল্লম্ব স্থানটিকে নষ্ট করা এবং তারপরে স্পষ্টভাবে পরীক্ষা করতে হবে যে কীগুলি অন্য কোথাও থেকে আসে নি তা নিশ্চিত করে। আমি জাভাস্ক্রিপ্টে কেন এটি প্রয়োজনীয় ছিল তা সম্পর্কে স্পষ্টতই আমি পরিচিত, বিশেষত পুরানো লাইব্রেরিগুলির কারণে যা কখনও কখনও প্রোটোটাইপ শৃঙ্খলে ( কাশি প্রোটোটাইপ কাশি ) ইনজেক্ট করে দেয়।

যাইহোক, আমার জ্ঞানের সেরা হিসাবে, কৌণিক এমন কোনও কাজ করে না। টাইপসক্রিপ্ট অবশ্যই হয় কারণ নেই। আমি কোনও আধুনিক জাভাস্ক্রিপ্ট কাঠামো কল্পনা করতে পারি না। ফলস্বরূপ, একটি আধুনিক অ্যাংুলার অ্যাপে (বা কোনও আধুনিক জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন) এ জাতীয় চেক এড়িয়ে যাওয়ার সম্ভাব্য উত্সাহগুলি কী কী। আমি কি আমার নিজের দলটি ঘটনাক্রমে প্রোটোটাইপগুলি সংশোধন করে (বা দুর্ঘটনাক্রমে প্রোটোটাইপগুলি সংশোধন করে গ্রন্থাগারগুলি আমদানি করে) সমস্যার কারণে ঝুঁকির মধ্যে আছি, বা এমন সমস্যার জন্য আরও কিছু অবকাশ আছে যা সম্পর্কে আমি অবগত নই? যদি আমি কেবল এটি করার চেষ্টা করি তবে অন্য কোন উপায়ে প্রোটোটাইপ চেইন আমাকে কামড় দিতে পারে?

for ( let key in object ) {
}

আমার নিজের পরীক্ষাগুলি কোনও সমস্যা প্রকাশ করেনি, তবে আমি স্পষ্টত কিছু মিস করছি। এবং হ্যাঁ, আমি Object.keys( object ) জেএস / টিএসে Object.keys( object ) সম্পর্কে সচেতন। এটি কাজটি সম্পন্ন হয়েছে তবে আমি মনে করি না যে এটি for ... in মতো পরিষ্কার হিসাবে মনে for ... in , যা আমি হ'ল hasOwnProperty() মরে যেতে hasOwnProperty() আমি এটি ব্যবহার করব।


Answer #1

সমতল বস্তু এবং অন্যান্য যে আপনি জানেন যে উত্তরাধিকারসূত্রে প্রাপ্ত উত্তরাধিকারী সম্পত্তি নেই তা গণনা করার সময় এই চেকটি অন্তর্ভুক্ত করার কোনও কারণ নেই। আপনি ঠিক বলেছেন, কোনও যুক্তিসঙ্গত আধুনিক কাঠামো এটি Object.prototype

hasOwnProperty থেকে প্রকাশিত হয়েছে hasOwnProperty চেকের মৃত্যুর ঘোষণা দেওয়া হচ্ছে :-)

আমি কি কেবল নিজের দলটি দুর্ঘটনাক্রমে প্রোটোটাইপগুলি সংশোধন করে (বা ঘটনাক্রমে প্রোটোটাইপগুলি পরিবর্তনকারী লাইব্রেরিগুলি আমদানি করে) সমস্যার কারণে ঝুঁকির মধ্যে আছি?

হ্যাঁ. যদিও এই জাতীয় সমস্যার সমাধানটি প্রোটোটাইপগুলি পরিবর্তন করতে (বা সম্পত্তিটিকে অগণনীয় করে তোলার জন্য নয়), সর্বত্র hasOwnProperty চেক যোগ করার জন্য নয়।

বা ঝামেলার আরও কি জায়গা আছে যা আমি অবগত নই?

না।

প্রকৃতপক্ষে, if (!object.hasOwnProperty(key)) চেক বাদ দেওয়া কিছু সমস্যা সমাধান করতে পারে এবং সমস্যা এড়াতে পারে। আপনি যে সমস্ত অবজেক্ট গণনা করতে চাইতে পারেন তা hasOwnProperty পদ্ধতি বা আপনার প্রত্যাশা অনুযায়ী কাজ করে এমন একটি গ্যারান্টিযুক্ত নয় । সঠিকভাবে যাচাই করার উপায় - যে ক্ষেত্রে এটি প্রয়োজনীয় - সর্বদা call :

if (!Object.prototype.hasOwnProperty.call(object, key))

(যদিও অবশ্যই এখনও প্রান্তের কেস রয়েছে , তবে সেগুলি object উপর নির্ভর করে না)





ecmascript-6