জাভাস্ক্রিপ্ট - নির্ধারিত সম্পত্তি সেট করতে পারে না


108

আমার কোড:

var a = "1",
b = "hello",
c = { "100" : "some important data" },
d = {};

d[a]["greeting"] = b;
d[a]["data"] = c;

console.debug (d);

আমি নিম্নলিখিত ত্রুটি পেয়েছি:

আনকাচড টাইপ এরির: সংজ্ঞায়িতদের সম্পত্তি 'গ্রিটিং' সেট করতে পারেন না।

আমি একটি মিশুক অ্যারের অনুরূপ কিছু করার চেষ্টা করছি। কেন এটি কাজ করছে না?


1
d [a] অপরিজ্ঞাত। সংক্ষেপে ডি ["1"] অপরিবর্তিত
জোসেফ মেরিকলে

উত্তর:


159

আপনি d[a]কোন মান সেট করেন না ।

এ কারণে, d[a]মূল্যায়ন করে undefinedএবং আপনি বৈশিষ্ট্য সেট করতে পারবেন না undefined

যদি আপনি জিনিসগুলি d[a] = {}ঠিক পরে যোগ d = {}করেন তবে প্রত্যাশা অনুযায়ী কাজ করা উচিত।

বিকল্পভাবে, আপনি একটি অবজেক্ট আরম্ভকারী ব্যবহার করতে পারেন:

d[a] = {
    greetings: b,
    data: c
};

অথবা আপনি dকোনও বেনামি ফাংশন ইভেন্টে সমস্ত সম্পত্তি সেট করতে পারেন :

d = new function () {
    this[a] = {
        greetings: b,
        data: c
    };
};

আপনি যদি এমন পরিবেশে থাকেন যা ES2015 বৈশিষ্ট্যগুলিকে সমর্থন করে তবে আপনি গণনা করা সম্পত্তির নাম ব্যবহার করতে পারেন :

d = {
  [a]: {
    greetings: b,
    data: c
  }
};

এটি কাজ করে। প্যাটার্নটি
হ'ল

@ আরবার্টজওয়েল, ভাল কথা, আমি ES2015 স্বরলিপি সম্পর্কে নোটটি অন্তর্ভুক্ত করার জন্য আপডেট করেছি।
zzzzBov

আশ্চর্যজনক ব্যাখ্যা।
ফিজা খান

32

d[a]আপনাকে হয় কোনও এসোসিয়েটিভ অ্যারে বা একটি অবজেক্টে সেট করতে হবে:

  • d[a] = [];
  • d[a] = {};

সেট না করেই, যা হচ্ছে তা হচ্ছে:

d[a] == undefined, সুতরাং আপনি করছেন undefined['greeting']=b;এবং সংজ্ঞা অনুসারে, অপরিজ্ঞাত কোনও বৈশিষ্ট্য নেই। সুতরাং, আপনি প্রাপ্ত ত্রুটি।


arrayবা object। জেএসের সহকারী অ্যারে নেই, যদিও Objectসীমিত ব্যবহারের জন্য এটির মতো কাজ করতে পারে।
জেরেমি জে স্টারচার

@ জেরেমি জেস্টারচার: জানার জন্য একেবারে সঠিক এবং গুরুত্বপূর্ণ, তবে সেই স্তরের চিন্তাভাবনার দ্বারা, জাভাস্ক্রিপ্টের কোনও অ্যারে নেই; এটিতে কেবল অবজেক্ট রয়েছে
ভোলআরন

বেপারটা এমন না. সংঘবদ্ধ অ্যারেগুলির এমন দিক রয়েছে যা জাভাক্রিপ অবজেক্ট সম্পর্কে সত্য নয় যা কোডারগুলি ট্রিপ করতে পারে। (সত্যিকারের সহযোগী অ্যারেগুলি [কীগুলি স্ট্রিংগুলির জন্য প্রয়োজনীয় প্রয়োজনের দ্বারা সীমাবদ্ধ নয় inher উত্তরাধিকারসূত্রে পূর্বনির্ধারিত বৈশিষ্ট্যগুলির উপস্থিতি আরেকটি বড় পার্থক্য))) অন্যদিকে, জাভাস্ক্রিপ্ট অ্যারেগুলি যেমন একটির মতো আচরণ করে একটি সংখ্যাসূচক অ্যারের প্রত্যাশা করে। একটি হ'ল কার্যক্ষমতার একটি দিক, অন্যটি অভ্যন্তরীণ বাস্তবায়ন।
জেরেমি জে স্টারচার

6

এতে থাকা বস্তুটি d[a]কোনও কিছুর জন্য সেট করা হয়নি। সুতরাং, d[a]মূল্যায়ন undefined। আপনি কোনও সম্পত্তি বরাদ্দ করতে পারবেন না undefined:)। আপনাকে এতে কোনও অবজেক্ট বা অ্যারে নির্ধারণ করতে হবে d[a]:

d[a] = [];
d[a]["greeting"] = b;

console.debug(d);

2
কোনও বস্তু নির্ধারণের পক্ষে সেরা: d[a] = {};- অ-সংখ্যাযুক্ত কীগুলির সাথে অ্যারে ব্যবহার করা লাইনের নীচে সমস্যা দেখা দেয়।
nnnnnn

5

জাভাস্ক্রিপ্টে প্রায় সবই একটি বস্তু nullএবং undefinedব্যতিক্রম।

উদাহরণগুলি Arrayএকটি বস্তু। একটি অনির্ধারিত, কারণ এটির নয় তাই আপনি একই কারণে একটি অ্যারের সম্পত্তি সেট করতে পারেন, আপনি যা করতে পারেন সেট সম্পত্তি নয় একটি বস্তু


3

আমি [ডি] একটি উপস্থিত আছে এবং এটি আরম্ভ না করে কিনা তা দেখার জন্য কেবল একটি সাধারণ চেক করব ...

var a = "1",
    b = "hello",
    c = { "100" : "some important data" },
    d = {};

    if (d[a] === undefined) {
        d[a] = {}
    };
    d[a]["greeting"] = b;
    d[a]["data"] = c;

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