জাভাস্ক্রিপ্টে কেন `নালার মান আছে?


116

জাভাস্ক্রিপ্টে দুটি মান রয়েছে যা মূলত বলে 'আমার অস্তিত্ব নেই' - undefinedএবং null

একটি সম্পত্তি যা প্রোগ্রামার নিয়োগ হয়নি কিছু হতে হবে undefinedএকটি সম্পত্তি, কিন্তু অনুক্রমে পরিণত null, nullস্পষ্টভাবে এটি নির্ধারিত করা আবশ্যক।

আমি একবার ভেবেছিলাম যে এর দরকার ছিল nullকারণ undefinedএটি একটি আদিম মান এবং nullএকটি অবজেক্ট। এটি না এমনকি যদি typeof nullসমর্পণ করা হবে 'object': বাস্তবিক, উভয় আদিম মান - যা উপায়ে তন্ন তন্ন undefinedনা null, একটি কন্সট্রাকটর ফাংশন থেকে ফেরত পাঠানো যাবে উভয় একটি খালি বস্তুর রূপান্তরিত হবে (এক কনস্ট্রাকটর ঘোষণা ব্যর্থতা একটি ত্রুটি নিক্ষেপ করা আছে)।

তারা উভয়ই falseবুলিয়ান প্রসঙ্গে মূল্যায়ন করে । কেবলমাত্র আসল পার্থক্যটিই আমি ভাবতে পারি তা হ'ল একটিতে মূল্যায়ন করা হয় NaN, অন্যটি 0সংখ্যাগত প্রসঙ্গে।

সুতরাং কেন উভয়ই আছে undefinedএবং nullযদি এটি কেবল প্রোগ্রামারগুলিকে বিভ্রান্ত করে যারা nullকোনও সম্পত্তি সেট করা হয়েছে কিনা তা অনুসন্ধানের জন্য যখন ভুলভাবে চেক করছে?

আমি যা জানতে চাই তা হ'ল কারও কাছে যদি যুক্তিযুক্ত উদাহরণ থাকে যেখানে এটি ব্যবহার করা প্রয়োজন nullযা undefinedপরিবর্তে ব্যবহার করে প্রকাশ করা যায় না।

সুতরাং সাধারণ sensক্যমত্য বলে মনে হয় যে এর undefinedঅর্থ 'এরকম কোনও সম্পত্তি নেই' এর nullঅর্থ 'সম্পত্তিটি বিদ্যমান আছে তবে তার কোনও মূল্য নেই'।

আমি জাভাস্ক্রিপ্ট বাস্তবায়ন যদি এই আচরণটি বাস্তবায়িত করতে পারে তবে আমি তার সাথে বেঁচে থাকতে পারি - তবে undefinedএটি পুরোপুরি বৈধ আদিম মান, সুতরাং এটি সহজেই এই চুক্তিটি ভঙ্গ করার জন্য বিদ্যমান বৈশিষ্ট্যগুলিকে অর্পণ করা যেতে পারে। অতএব, আপনি যদি কোনও সম্পত্তি বিদ্যমান কিনা তা নিশ্চিত করতে চান তবে আপনাকে inঅপারেটরটি বা hasOwnProperty()যাইহোক ব্যবহার করতে হবে । আবার একবার: পৃথক মানগুলির ব্যবহারিক ব্যবহার কী undefinedএবং null?

আমি undefinedযখন ব্যবহার করি এমন বৈশিষ্ট্যের মানগুলি আর ব্যবহার করতে চাই না তবে আমি চাই না তখন আমি ব্যবহার করি deletenullপরিবর্তে আমার ব্যবহার করা উচিত?


3
আপনার শেষ প্রশ্নের উত্তর দেওয়ার জন্য: না, আপনি এতে বৈশিষ্ট্য নির্ধারণ করবেন না undefined
শোগ 9

4
"অপরিজ্ঞাত" আদিম মান "অপরিজ্ঞাত" সহ বৈশ্বিক সুযোগে কেবল একটি পরিবর্তনশীল। ভেরিয়েবলের জন্য অন্য মানটি সংজ্ঞায়িত করা সম্ভব: {অপরিবর্তিত = "হ্যালো"; সতর্কতা (অপরিজ্ঞাত); und অপরিজ্ঞাতকরণের জন্য পরীক্ষার আরও নির্ভরযোগ্য উপায়: {যদি (টাইফফ মাইভার === "অপরিজ্ঞাত") সতর্কতা ("অপরিজ্ঞাত")}
কিছু

1
ইকো- ইন্টারন্যাশনাল.আর.পি. / প্রজাতন্ত্র / ফাইলস / এ.সি.এম.এ.এস.টি. / একমা -262.pdf বিভাগে 4.3.9 - 12 দেখুন এবং বৈশ্বিক পরিসরে "অপরিজ্ঞাত" পরিবর্তনশীলটির জন্য 15.1.1.3 দেখুন।
কিছু

1
আপনার কোনও একটি বিষয় মুছে ফেলা উচিত বা এটি নালায় সেট করা উচিত যদি এটি আরও অর্থবোধ করে তবে এটি অপরিবর্তিত নয়।
কিছু

4
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.না, কেবল undefinedএটিই বলে।
অরবিটে

উত্তর:


78

প্রশ্নটি আসলে "জেএসে কেন নাল মান হয় না" - বেশিরভাগ ভাষায় কোনও ধরণের নাল মান রয়েছে এবং এটি সাধারণত খুব দরকারী বলে বিবেচিত হয়।

প্রশ্নটি হল, " জেএসে কেন একটি অপরিবর্তিত মান আছে"। প্রধান স্থান যেখানে এটি ব্যবহৃত হয়:

  1. যখন আপনি ঘোষণা করেন var x;কিন্তু এটি বরাদ্দ করেন না, অপরিবর্তিত xথাকে;
  2. যখন আপনার ফাংশনটি ঘোষণার চেয়ে কম যুক্তি পায়;
  3. যখন আপনি অস্তিত্বের অবজেক্টের সম্পত্তি অ্যাক্সেস করেন।

nullঅবশ্যই (1) এবং (2) * এর জন্য ঠিক একইভাবে কাজ করত। (3) সত্যই অবিলম্বে একটি ব্যতিক্রম ছুঁড়ে ফেলা উচিত এবং এটি সত্য যে এটি অদ্ভুত undefinedযে পরে ব্যর্থ হবে ফিরে আসার পরিবর্তে এটি ডিবাগিংয়ের অসুবিধার একটি বড় উত্স।

*: আপনি তর্ক করতে পারেন যে (২) একটি ব্যতিক্রম ছুঁড়ে ফেলা উচিত, তবে তারপরে আপনাকে ডিফল্ট / ভেরিয়েবল আর্গুমেন্টগুলির জন্য আরও ভাল, আরও সুস্পষ্ট পদ্ধতি সরবরাহ করতে হবে।

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

আমি যখন ব্যবহারের সম্পত্তিগুলির মানগুলি আর ব্যবহার করতে চাই না তবে যা আমি মুছতে চাই না তখন আমি প্রকৃতপক্ষে অপরিজ্ঞাত ব্যবহার করি। পরিবর্তে আমি নাল ব্যবহার করা উচিত?

হ্যাঁ. undefinedসংকেত দেওয়ার জন্য একটি বিশেষ মান হিসাবে রাখুন যখন অন্য ভাষাগুলি পরিবর্তে তার ব্যতিক্রম করতে পারে throw

nullসাধারণত কোনও আই ডম ইন্টারফেস বাদে আরও ভাল যেখানে কিছু সেট করা nullআপনাকে ত্রুটি দিতে পারে। প্রায়শই এই ক্ষেত্রে খালি স্ট্রিংয়ের সেটিংটি কাজ করতে ঝোঁক।


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

মজার একটি প্রশ্নের উত্তর কীভাবে "এটি আসলেই প্রশ্ন নয় ..." দিয়ে শুরু হয়
ফিলিপ

@ ববিন্স জেএস এর প্রাথমিক সংস্করণগুলিতে inঅপারেটর ছিল না বা hasOwnProperty? কারণ কোনও জিনিসে obj.hello !== undefinedকোনও সম্পত্তি রয়েছে কিনা তা যাচাই করার চেয়ে তারা নিরাপদ way
অ্যান্ডি

কিছু নয়, আমি আমার নিজের প্রশ্নের উত্তর দিয়েছি। এমডিএন অনুসারে, তারা দু'জনই ইএস 3-তে প্রবর্তিত হয়েছিল।
অ্যান্ডি

37

এখানে বর্ণিত সেরা , তবে সংক্ষেপে:

অপরিজ্ঞাত হ'ল একটি প্রকার এবং মানের অভাব এবং শূন্যতা একটি মানের অভাব।

তদ্ব্যতীত, আপনি যদি সাধারণ '==' তুলনা করছেন, আপনি ঠিক বলেছেন, সেগুলিও প্রকাশিত হয়। তবে চেষ্টা করুন ===, যা উভয় প্রকার এবং মানকে তুলনা করে এবং আপনি পার্থক্যটি লক্ষ্য করবেন।


1
আমি জানি যে null !== undefined- আমার প্রশ্ন ছিল কেন দুটি বিষয় প্রয়োজন যা একই শব্দার্থক ধারণাটি প্রকাশ করে; এছাড়াও, আপনার লিঙ্কটিতে উল্লেখ করা হয়েছে যে 'নাল একটি জিনিস' - এটি ভুল, এটি একটি আদিম ...
ক্রিস্টোফ

2
এগুলি একই শব্দার্থক ধারণা নয়। আমার পক্ষে কমপক্ষে, কোনও সম্পত্তি নাল মান নির্ধারণ করা এবং একটি সম্পত্তি বিদ্যমান নেই তার মধ্যে একটি উল্লেখযোগ্য পার্থক্য রয়েছে।
ড্যানিয়েল শেফার

তবে এটি ঠিক, এগুলি একই শব্দার্থক ধারণা নয়। প্রোগ্রামারটির সুবিধার্থে একই জিনিসকে == ব্যবহার করার সময় নাল জোর হয়ে যায়।
এডি পার্কার

1
@ এরিকেলিয়ট: typeofমিথ্যা - অনুমানটি পড়ুন বা nullকোনও নির্মাণকারীর কাছ থেকে ফিরে আসার চেষ্টা করুন
ক্রিস্টোফ

5
@ এরিকেলিয়ট: কনস্ট্রাক্টরদের রিটার্ন মানটির মিথ্যা-নেসের সাথে কিছুই করার নেই, তবে অবজেক্ট-নেসের সাথে: যদি রিটার্ন মান কোনও বস্তু হয়, ফিরে আসুন; যদি এটি আদিম nullবা মত 42হয় তবে, প্রত্যাবর্তনের মানটি বাতিল করুন এবং পরিবর্তে নতুন নির্মিত বস্তুটি ফিরিয়ে দিন
ক্রিস্টোফ

17

আমি মনে করি না যে উভয়ই আছে nullএবং এর কোনও কারণ আছে undefined, কারণ একমাত্র কারণেই অনেকে পরামর্শ দিয়েছেন ("এর undefinedঅর্থ এই জাতীয় কোনও পরিবর্তনশীল / সম্পত্তি নেই") অন্তত জাভাস্ক্রিপ্টে বৈধ নয়। undefinedভেরিয়েবল / সম্পত্তি বিদ্যমান কিনা তা আপনাকে বলতে পারব না।

console.log(foo);               // "ReferenceError: foo is not defined"
                                // foo does not exist
var foo;
console.log(foo);               // "undefined", a different response
console.log(foo === undefined); // "true", but it does exist

var obj = {};
console.log(obj.hasOwnProperty("foo")); // "false", no such property
obj.foo = undefined;
console.log(obj.hasOwnProperty("foo")); // "true", it exists and has the value "undefined"
console.log(obj.foo === undefined);     // "true", but it does exist

obj.bar = "delete me";
obj.bar = undefined;
console.log(obj.hasOwnProperty("bar")); // "true", not actually deleted
delete obj.bar;
console.log(obj.hasOwnProperty("bar")); // "false", deleted

যেমন আপনি দেখতে পাচ্ছেন, চেকিং foo === undefinedআপনাকে fooবিদ্যমান কিনা তা জানায় না এবং সেটিংটি obj.bar = undefinedআসলে মুছবে না bar

এটি জাভাস্ক্রিপ্ট লেখকের মূল অভিপ্রায় যা undefined"অস্তিত্ব" উপস্থাপন করা উচিত। তবে, বাস্তবায়নটি সেভাবে পরিণত হয়নি।


1
আপনার উপরের কোড উদাহরণগুলির undefinedসাথে প্রতিস্থাপন করুন nullএবং প্রতিক্রিয়াগুলি সমস্ত একই। আমি নিশ্চিত না যে এটি কীভাবে প্রশ্নের উত্তর দেয়। এটি কি অন্য কারও উত্তরের মন্তব্য হিসাবে বোঝানো হয়েছিল?
এরিক এলিয়ট

1
@ এরিকেলিয়ট এই প্রশ্নের আমার উত্তর হ'ল উভয়ই থাকার কোনও কারণ নেই nullএবং undefinedকারণ অনেক লোকের একমাত্র যুক্তিটি বৈধ নয়।
লেই ঝাও

আপনার নিজের উত্তরটি সম্পাদনা করা উচিত এবং এটি আসলে বলা উচিত। আপনি যদি উত্তরটি দিয়ে থাকেন তবে আমি আপতিত হতে পারি। =)
এরিক এলিয়ট

@ এরিক এলিয়ট আমার মনে হয় আপনি ঠিকই আছেন আমি আমার উত্তর সম্পাদনা করেছি। ধন্যবাদ!
Lei Zhao

3
এই উদাহরণটি আসলে দেখায় যে আপনি যদি কোনও ভেরিয়েবল বরাদ্দ না করেন তবে তা ফিরে আসে undefined। তবে আপনি যদি undefinedএটি অর্পণ করেন, এটি আসলে নয় undefined- এটি সংজ্ঞায়িত হয়েছিল undefinedএবং এর সাথে উল্লেখ রয়েছে। শুধুমাত্র মধ্যে পার্থক্য undefinedএবং nullতাদের ব্যবহার এবং ঐতিহাসিক উদ্দেশ্য। এরা দুটোই পারমাণবিক।
আলেকসেজ কমারভ

6

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


6

আমি মনে করি যে জাভাস্ক্রিপ্টটিকে undefined"এরকম কোনও সম্পত্তি নেই" এবং null"সম্পত্তিটির কোনও মূল্য নেই" হিসাবে সংজ্ঞায়িত করা আপনার সিদ্ধান্তটি পুরোপুরি সঠিক। এবং জাভাস্ক্রিপ্ট হিসাবে গতিশীল একটি ভাষায় এটি একটি খুব গুরুত্বপূর্ণ পার্থক্য। হাঁসের টাইপিংয়ের ব্যবহারের অর্থ হল যে আমাদের উপস্থিতি নেই এবং মান নেই তার মধ্যে পার্থক্য করতে সক্ষম হওয়া দরকার। এটি ধরণের তথ্য আহরণের প্রাথমিক মাধ্যম। স্থিতিযুক্ত টাইপিত ভাষায় ক্ষেত্রটি শূন্য হওয়া এবং একটি ক্ষেত্র বিদ্যমান না থাকার মধ্যে একটি নির্দিষ্ট পার্থক্য রয়েছে। জাভাস্ক্রিপ্টে এটি আলাদা নয়। তবে এটি রানটাইমে চেক করা হয়, এবং এটি অবধি সংশোধন করা যায়।

আমি একমত হতে চলেছি যে পার্থক্যটি অস্পষ্ট হওয়ার সাথে সাথে বাস্তবায়নটি অদ্ভুত। তবে আমি মনে করি জাভাস্ক্রিপ্টে পার্থক্যটি গুরুত্বপূর্ণ। এবং বরাদ্দ করতে সক্ষম হওয়া undefinedঅপরিহার্য।

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


আপনি কি এই আরপিজি ভাগ করে নিতে পারেন?
মাইকেল

3

শব্দার্থকভাবে তারা বিভিন্ন জিনিস বোঝায়। নাল টাইপটির ডোমেনে ঠিক একটি মান রয়েছে, নাল এবং একটি সম্পত্তি এই নির্দিষ্ট মান নির্ধারিত হতে পারে। নির্ধারিত কোনও মান নির্ধারিত হওয়ার একটি স্বতন্ত্র অভাব উপস্থাপন করে।


1
তবে আপনি undefinedসম্পত্তি হিসাবে বরাদ্দের জন্য ঠিক জরিমানা ব্যবহার করতে পারেন , তাই এই চুক্তিটি (কেবলমাত্র undfinedএমন কোনও সম্পত্তি না থাকলে কেবল ফেরত দেওয়া ) প্রোগ্রামার সহজেই ভেঙে যেতে পারে ...
ক্রিস্টোফ

2
আপনি পারেন , তবে আপনার অবশ্যই করা উচিত নয়। অপরিবর্তিত জাভাস্ক্রিপ্টে ব্যতিক্রমের খুব বেসিক / সরলাত্মক ফর্ম হিসাবে ব্যবহৃত হয় - এটি কোনও মান হিসাবে ব্যবহার করবেন না এবং এটি কোনও সম্পত্তিতে বরাদ্দ করবেন না! এ তো পাগল মানুষ।
rfunduk

3

একটি জাভা প্রোগ্রামার হিসাবে, আমি অপরিজ্ঞাত এবং নাল মধ্যে একটি বিশাল পার্থক্য দেখতে। কোডিং জাভাস্ক্রিপ্ট, এত বেশি নয়, কারণ জাভাস্ক্রিপ্ট দৃ strongly়ভাবে টাইপ করা হয় না এবং অপরিজ্ঞাত ও নাল মধ্যে পার্থক্যগুলি রান-টাইম দ্বারা প্রায়শই সঞ্চালিত স্বয়ংক্রিয় রূপান্তর দ্বারা ঝাপসা হয়ে যায়। বিটিডাব্লু, আমি এই রূপান্তরগুলির ঘন ঘন সুবিধা গ্রহণ করি; তারা আমার জেএস কোডটি আরও কমপ্যাক্ট এবং পঠনযোগ্য করে তোলে।

আপনার প্রশ্নের জবাব দেওয়ার জন্য, অপরিবর্তিত হওয়া মানে কোনও মান কখনও সেট করা হয়নি। ব্যবহারিকভাবে বলতে গেলে, এটি সাধারণত একটি বাগের দিকে নির্দেশ করে। যদি আপনারঅজেক্ট.প্রপ্টিটি অপরিজ্ঞাত করা হয়, তার অর্থ আপনি কোনও কারণে সম্পত্তিটি সেট করেননি বা আমি এমন কিছু সন্ধান করছি যা এর অস্তিত্ব নেই। একাধিক কোডার সহ কোনও প্রকল্পে কাজ করার সময় এটি আসল সমস্যা।

নাল মানে "কোনও মান" স্পষ্টভাবে সেট করা হয়নি। ব্যবহারিকভাবে বলতে গেলে, আপনি আমাকে সম্পত্তি সম্পর্কে কিছু বলছেন, সম্ভবত যে এটি এই প্রসঙ্গে ব্যবহৃত হয়নি, বা কোনও মান এখনও নির্ধারণ করা হয়নি।

জাভাতে, অপরিজ্ঞাত কোন ক্ষেত্রটি অ্যাক্সেস করার প্রচেষ্টা সর্বদা একটি ব্যতিক্রম হতে পারে। আসলে, সংকলকটি আপনার কোডে আপনাকে এ সম্পর্কে সতর্ক করতে তৈরি করা যেতে পারে।


0

এই উদাহরণটি ব্যবহার করে দেখুন:

<html>
<head>
    <script type="text/javascript">
        function ShowObjProperties(obj) {
            var property, propCollection = "";

            for(property in obj) {
                propCollection += (property + ": " + obj[property] + "\n");
            }

            alert(propCollection);
        }

        var obj = {
            userid: 3,
            name: 'me!',
            speak: function() { alert('Hi! My name is ' + this.name + ' and my ID is ' + this.userid + '.'); }
        }

        //Shows all properties
        ShowObjProperties(obj);

        //The Speak function is no longer in the list!
        delete obj.speak;
        alert(typeof obj.speak);
        ShowObjProperties(obj);

        //The UserID is still listed, it just has no value!
        obj.userid = null;
        ShowObjProperties(obj);
    </script>
</head>
<body>

</body>
</html>

আমি মনে করি যে এখানে 2 টি বিভিন্ন ধরণের জন্য খুব বাস্তব ব্যবহার রয়েছে।


এবং প্রোটোটাইপগুলিতে আমি মনে করি, এটি একটি সদস্য নাল বা কেবল অপরিজ্ঞাত।
কেভ

তবে এটি কেবল ততক্ষণ কাজ করে যতক্ষণ না কেউ এটি ভাঙার চেষ্টা করে - যদি আমি সেট করি তবে obj.userid = undefinedএটি ব্যর্থ হবে - আমার প্রশ্নের শেষ সম্পাদনাটি দেখুন
ক্রিস্টোফ

0

যা নেমে আসে তা হ'ল জাভাস্ক্রিপ্টগুলি গতিশীল প্রকৃতি।

বিষয়গুলি অপরিজ্ঞাত করা যেতে পারে যাতে সেগুলি পরবর্তীতে যুক্ত করা যায়। এটি যুক্তিযুক্ত কারণেই জাভাস্ক্রিপ্ট এত শক্তিশালী এবং বর্ধমান ible


এবং এটি আমার প্রশ্নের সাথে কীভাবে প্রাসঙ্গিক?
ক্রিস্টোফ

2
এটি প্রাসঙ্গিক কারণ এটি আপনার প্রশ্নের উত্তর দেয়। 'নাল' হ'ল ধরণের 'সিঙ্গলটন' যার অর্থ 'কোনও মূল্য নেই'। 'অপরিবর্তিত' আপনাকে বলছে যে কিছু হ'ল ... মর্মাহত, আমি জানি ... সংজ্ঞায়িত হয়নি। তারা সম্পূর্ণ আলাদা জিনিস।
rfunduk

0

আপনি যদি জাভাস্ক্রিপ্টের সন্নিবেশিত দৃষ্টান্তের মধ্যে আপনার প্রোগ্রামটি মুড়িয়ে রাখেন তবে এটি একটি গুরুত্বপূর্ণ ভাষার বৈশিষ্ট্য।

// a key exists as a placeholder for something
if(obj[name] === null) 
// no key exists int eh hashtable that is in this object
if(obj[name] === undefined)

এটি খুব কার্যকর যদি আপনি ডেটা সংকলনের সাথে ডিল করছেন যা ডিফল্ট ক্রিয়াকে নির্দেশ করতে 'কিছুই না' ব্যবহার করে কিছু ক্রিয়াকলাপের থেকে আলাদা বোঝাতে 'কিছুই না' উপস্থাপনের জন্য একটি মান প্রয়োজন।

filter_func_pt = {
  date:function(d){ return Math.round(d.getTime()/1000);},
  user: null,
}

function transform(obj){
    var ret = {};
    for( var prop in obj){
       var f = filter_func_pt[prop];
       if(f)
          ret[prop] = f(obj);
       else if(filter_func_pt[prop] === null)
         continue;
       else
         ret[prop] == obj;
    }
  return ret;
}

var a = {
   date: new Date(),
   user: 'sam'
   votes: [23, 41, 55] 
};

var b = transform(a);

/* b = {
 *    date: 1298582417
 *    votes: [23, 41, 55]
 * }
 */

উপরের কোডে নাল কীওয়ার্ড এবং অপরিজ্ঞাত সার্ভারটি খুব স্পষ্ট এবং বিভিন্ন উদ্দেশ্যে। লুকআপ যে filter_func_pt বস্তুর ফেরৎ পাওয়া যায় না অনির্ধারিত আগমন বস্তু সম্পত্তি যোগ করার জন্য হয়, যেহেতু একটি উপায় নাল মান নির্দেশ করে যে মান বলা করা উচিত, এবং যোগ, এবং এই যে কোন সত্য মান উপস্থিতিতে কেসটি ret অবজেক্টে যোগ করার আগে মানটিকে রূপান্তর করতে ব্যবহৃত একটি ফাংশন প্রতিনিধিত্ব করে ।


এই উদাহরণটি স্বীকৃত এবং কিছুটা অযৌক্তিক। নাল আপনার উদ্দেশ্যটি মোটেও পরিষ্কার করে না - বরং এটি মুখোশ দেয়। অর্থটি স্পষ্ট করতে আপনি আরও স্পষ্ট স্ট্রিং ব্যবহার করতে পারেন। পছন্দ করুন, 'আটকে থাকুন' বা 'স্ট্রিপ' এবং তারপরে আপনি ফাংশনের ধরণ সম্পর্কে আরও সুস্পষ্টরূপে জানতে পারেন এবং কার্যকারিতা উপস্থিতি পরীক্ষা করতে পারেন।
এরিক এলিয়ট

0

নাল সুন্দর

লাইভ স্ক্রিপ্টের অন্যান্য প্রকারের মতো।

উদ্ধৃতি: জাভাস্ক্রিপ্টে দুটি মান রয়েছে যা মূলত বলে 'আমার অস্তিত্ব নেই' - অপরিজ্ঞাত এবং নাল।

আপনি কেন ভুল জিনিস বলতে চান ?!

"নাল" হ'ল "খালি অবজেক্ট" ঠিক যেমন "0" একটি "খালি সংখ্যা" । 0, কিছুই নয় - এটি একটি সংখ্যা জিনিসের ধরণ হিসাবে বিদ্যমান। নাল অবশ্যই খালি তবে এটি "এটি" এবং এটি একটি অবজেক্ট টাইপের একটি ভাল সংজ্ঞায়িত জিনিস ।

এই জিনিসগুলিকে "প্রকার" হিসাবে কথা বলা সাধারণ, যখন তা না থাকে। আসলে তারা "বিভাগ"। তবে এখনই শেষ।

সুতরাং এটির সাথে এটি আটকে থাকবে যে "নাল" কোনও প্রকারের ছাড়াই অবজেক্টের ধরণ। এবং "নাল" বলে "আমার খুব উপস্থিতি আছে [!], তবে আমার ধরণের বিষয়বস্তু আমার কাছে নেই"।

যেখানে অনির্ধারিত উভয় প্রকার এবং ধরনের যেখানে অভাব আছে অনির্ধারিত তার ধরণ সংজ্ঞা হতে হবে। একটি অপরিবর্তিত ধরণের প্রকারটি তার স্বতন্ত্র টাইপোলজিতে পরিণত হয়। একটি ধরণের [কি "কিছুই না" বিদ্যমান এবং আপনি "কিছুই না" কীভাবে সংজ্ঞায়িত করবেন?] প্রশ্ন।

উদ্ধৃতি: কনস্ট্রাক্টর ফাংশন থেকে অপরিজ্ঞাত বা নাল ফেরানো যাবে না, কারণ উভয়ই একটি খালি বস্তুতে রূপান্তরকারী হবে

আপনি আবার একটি ভুল জিনিস বলতে পরিচালিত করেছেন। অবশ্যই না, "অপরিজ্ঞাত" কোনও অবজেক্ট নয়, এটি একটি সরল টোকেন যা আমরা মানুষ বুঝতে পারি; তবে সেই শূন্যের বিপরীতে - এবং এটি আপনাকে বলে দিচ্ছে: এর ধরণটি সঠিক, তবে আপনি যে ধরনের সন্ধান করছেন তা এর মধ্যে নেই বা অন্তত এই মুহুর্তে নেই। পরে আমাদের সাথে দেখা করুন যখন আমরা এটিতে some কিছু বিষয় নির্ধারণ করি।

উদ্ধৃতি: আমি কেবলমাত্র আসল পার্থক্যটিই ভাবতে পারি তা হ'ল একজন এনএএনকে মূল্যায়ন করেন, অন্যটি সংখ্যাগত প্রসঙ্গে to

এটাই তাদের কোর প্রভেদ পুরো পয়েন্ট করে তোলে, হিসাবে উল্লেখ করেছে: undefined স্ট্রিং, [+ + অনির্ধারিত] অপারেশন ইচ্ছা হাঁস-ধর্মান্তরিত এটি: একটি প্লেইন টোকেন হয় এবং যেহেতু এটা তার দূরবর্তী আত্মীয় হিসাবে একই 'জেনেটিক' উপাদান গঠিত নান এর একভাবে নাল ইচ্ছা অবশ্যই নিজেই একটি সঠিক ধরনের 0 \ নম্বরে পরিবর্তে রূপান্তর, এবং উল্টোদিকে undefined যে একটি স্ট্রিং মধ্যে রূপান্তর হবে (! যা খালি না থাকে!) এবং যে ঠিক কেন এটা উৎপাদ এর NaN পরিবর্তে। যেখানে: + অপরিজ্ঞাত >> + "অপরিজ্ঞাত" >> NaN। যেহেতু সাংখ্যিক প্রসঙ্গটি সুস্পষ্ট মান আশা করে।

বুলিয়ান প্রসঙ্গটি রেফারেন্সের প্রত্যাশা করার সময় - রূপান্তর করার মতো কিছুই খুঁজে পায় না এবং 'মিথ্যা' দেয়।

এখনই কাটা যাক ...

উদ্ধৃতি: আবার একবার: অপরিজ্ঞাত এবং নাল জন্য পৃথক মান জন্য ব্যবহারিক ব্যবহার কি?

আমি আপনাকে কেবল দুটি অভিজ্ঞতামূলক উদাহরণ দেওয়ার চেষ্টা করব এবং যথেষ্ট হবে বলে আশা করি

oElement.onclick >> null

// এর অর্থ - সম্পত্তি বিদ্যমান; এর প্রত্যাশিত মানটি প্রকার: অবজেক্টের , এবং সেই অ্যালিমেন্টটি "অনক্লিক" ইভেন্টটিকে সমর্থন করে!

oElement.innerText >> ""

// মানে - সম্পত্তি বিদ্যমান; : তার প্রত্যাশিত মান প্রকার হল স্ট্রিং যে oElement "innerText" সম্পত্তি সমর্থন, যার মানে।

উভয় ক্ষেত্রে-যদি আপনি "অপরিজ্ঞাত" পান তবে এর অর্থ সম্পত্তিটি বিদ্যমান নেই; সমর্থিত নয় বা একটি ভুল (ইউএ বিক্রেতা) বাস্তবায়ন করেছে।

ফ্রস্ট থাকুন এবং মজা করুন।


আপনার পোস্টগুলিকে ভাঙচুর করবেন না। আপনি যদি আপনার অবদান অপসারণ করতে চান তবে এগুলি মুছুন ( এই মন্তব্যের ঠিক উপরে থাকা মুছুন বোতামটি ব্যবহার করে )।
মাইকেল পেট্রোটা

কোনও মুছুন বোতাম নেই - তবে আপনি যদি এটি দেখতে পান তবে দয়া করে এটি ক্লিক করুন!

0

অপরিবর্তিত বনাম নাল সম্পর্কে আশ্চর্যজনক আলোচনা পড়ার পরে, গুগলে সামান্য অনুসন্ধান আমাকে মজিলা ডকুমেন্টেশনগুলিতে নিয়ে যায় https://developer.mozilla.org/en-US/docs/Web/JavaScript/References/Global_Objects/null উল্লেখ করা হয়েছে - নাল প্রায়শই হয় এমন জায়গায় পুনরুদ্ধার করা যেখানে কোনও বস্তুর প্রত্যাশা করা যেতে পারে তবে কোনও বস্তু প্রাসঙ্গিক নয়।

নাল অবজেক্টের ধরণের https://en.wikedia.org/wiki/ নাল_বজেক্ট_প্যাটার্নের মতো নয়

সুতরাং আমি অনুমান করি যে নাল ডাটা টাইপটি বোধগম্য।

নথি // নাল // "অবজেক্ট" হিসাবেও উল্লেখ করা হয়েছে (উত্তরাধিকারের কারণে "নাল" নয়)

উত্তরাধিকারের কারণগুলি নিশ্চিত না Not

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