টাইপফুল নাল "অবজেক্ট" কেন?


241

আমি 'ওয়েব বিকাশকারীদের জন্য পেশাদার জাভাস্ক্রিপ্ট' অধ্যায় 4 পড়ছি এবং এটি আমাকে বলে যে পাঁচ প্রকারের আদিমগুলি হ'ল: অপরিজ্ঞাত, নাল, বুলিয়ান, সংখ্যা এবং স্ট্রিং।

যদি nullআদিম হয় তবে typeof(null)ফিরে আসবে কেন "object"?

তার মানে কি এই নয় যে এটি nullরেফারেন্সের মাধ্যমে পাস হবে (আমি এখানে ধরে নিচ্ছি যে সমস্ত বস্তু রেফারেন্স দিয়ে পাস হয়েছে), তাই এটি একে আদিম নয়?


50
উত্তর: কারণ অনুমান তাই বলে। এটি সাধারণত একটি ভুল হিসাবে বিবেচিত হয়।
এসএলএক্স

5
দ্রষ্টব্য, টাইপফ একটি অপারেটর, কোনও ফাংশন নয় (এবং আসলে আপনি এর পরে কী ঘটবে তা পেরে উঠতে পারেন), সুতরাং এখানে রেফারেন্স দিয়ে যাওয়ার বিষয়ে কথা বলার কোনও মানে হয় না। "জাভাস্ক্রিপ্ট: দ্য গুড পার্টস" বইটিতে প্রকৃতপক্ষে 'আউফুল পার্টস' শিরোনাম পরিশিষ্ট এ এর ​​পরিচ্ছেদ A.6 এর বিভাগে নাল === 'অবজেক্ট' উল্লেখ করা হয়েছে।
জন সন্ডারসন

5
আমি মনে করি আমি '
আউফুল

1
বিশাল ভুল, অবর্ণনীয়! :)
আলেকজান্ডার মিলস

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

উত্তর:


219

অপারেটরের আচরণ সম্পর্কে MDN পৃষ্ঠাtypeof থেকে :

null

// এটি জাভাস্ক্রিপ্টের শুরু থেকেই দাঁড়িয়েছে
টাইপফুল নাল === 'অবজেক্ট';

জাভাস্ক্রিপ্টের প্রথম প্রয়োগের ক্ষেত্রে, জাভাস্ক্রিপ্ট মানগুলি একটি টাইপ ট্যাগ এবং একটি মান হিসাবে উপস্থাপিত হয়েছিল। অবজেক্টের জন্য টাইপ ট্যাগ 0 nullছিল NULL পয়েন্টার হিসাবে প্রতিনিধিত্ব করা হয়েছিল (বেশিরভাগ প্ল্যাটফর্মে 0x00)। ফলস্বরূপ, নালটির টাইপ ট্যাগ হিসাবে 0 ছিল, সুতরাং "অবজেক্ট" typeofরিটার্ন মান। ( রেফারেন্স )

ইসমাস্ক্রিপ্টের জন্য একটি বিকল্প প্রস্তাব করা হয়েছিল (একটি অপ্ট-ইন-এর মাধ্যমে), তবে তা প্রত্যাখ্যান করা হয়েছিল । এটির ফলস্বরূপ হত typeof null === 'null'


137
এটি লজ্জার বিষয় যে এই পরিবর্তনটি এটি কমপক্ষে কঠোর মোডে রূপান্তরিত করে নি ...
ইনগো বার্ক

লোকেরা দৌরাত্ম্যের সুযোগ নিয়েছে, এবং অনেকগুলি কোডই যদি এটি প্রত্যাখ্যান না করা হয় তবে তাদের পরিবর্তন করতে হবে, আমার ধারণা
কোল্ড সেরবেরাস

বাকি কিছু বিকাশকারীদের শিখতে না পারার চেয়ে কয়েক জন জীবিত মানুষ যারা এই কোডটি তাদের কোড পরিবর্তন করতে চান তাদের পক্ষে এটি আরও সার্থক করে তোলে। যেহেতু কোনও ব্যক্তি এখনও বিদ্যমান নেই, অগত্যা তার অর্থ এই নয় যে তারা কোনও ব্যাপার না, এর অর্থ হ'ল তারা প্রতিরক্ষামহীন less
সেফ রিড

লোকেরা কেন এটিকে নাল চেক হিসাবে ব্যবহার করবে তা বোঝা যায় না। এটি স্বজ্ঞাত জ্ঞান করে না তাই তারা কেন এটি ব্যবহার করবে? খারাপ কোডিংয়ের কারণে এখন পরিবর্তনটি যুক্ত করা যায় না।
ইমোব

69

যদি nullআদিম হয় তবে typeof(null)ফিরে আসবে কেন "object"?

কারণ অনুমান তাই বলে

11.4.3 দ্য typeofঅপারেটর

উত্পাদন UnaryExpression : typeof UnaryExpression নিম্নলিখিত হিসাবে মূল্যায়ন করা হয়:

  1. যাক Val মূল্যায়নের ফলও হতে UnaryExpression
  2. তাহলে প্রকার ( Val ) হল রেফারেন্স , তারপর
       ক। তাহলে IsUnresolvableReference ( Val ) হল সত্য ফিরে " undefined"।
       খ। যাক Val হতে GetValue ( Val )।
  3. টেবিল 20 অনুযায়ী টাইপ ( ভ্যাল ) দ্বারা নির্ধারিত একটি স্ট্রিং ফিরিয়ে দিন

এখানে চিত্র বর্ণনা লিখুন


@ ইপিটার typeofআপনাকে কোনও কিছুর জন্য পদ্ধতিগুলি কল করতে পারবে কিনা সে সম্পর্কে আপনাকে কিছুই জানায় না।
ম্যাট বল

2
আমার জ্ঞানের ভিত্তিতে, আপনি nullএবং ব্যতীত অন্য কোনও কিছুর জন্য পদ্ধতিগুলি কল করতে পারেন undefined
ম্যাট বল

4
@ এর পরেও আপনি স্ট্রিং আদিম পদ্ধতিতে কল করতে পারবেন না, তবে ধন্যবাদ যে স্ট্রিং আদিম (এবং সংখ্যার আদিম এবং বুলিয়ান আদিম) স্পষ্টভাবে এবং স্বয়ংক্রিয়ভাবে স্ট্রিং, সংখ্যা এবং বুলিয়ান র‍্যাপারগুলিতে "স্বয়ংক্রিয়-বাক্সিত" যখন আপনি কোনও সম্পত্তি সহ আদিমগুলির মধ্যে একটি ব্যবহার করেন রেফারেন্স অপারেটর ( .বা [ ])।
পয়েন্টি

28

হিসাবে চিহ্নিত করা হয়েছে, চশমা তাই বলে। তবে যেহেতু জাভাস্ক্রিপ্ট বাস্তবায়ন ECMAScript বৈশিষ্টের লেখার পূর্বাভাস দেয় এবং স্পেসিফিকেশন প্রাথমিক প্রয়োগের অনুমানগুলি সংশোধন না করার বিষয়ে সতর্ক ছিল, তাই কেন এটি প্রথম স্থানে করা হয়েছিল সে সম্পর্কে এখনও একটি বৈধ প্রশ্ন রয়েছে question ডগলাস ক্রকফোর্ড এটিকে ভুল বলে অভিহিত করেছেন । কিরো রিস্ক মনে করেন যে এটিকে কিছুটা বাছাই করে বোঝায় :

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


3
যেহেতু আমি এখন ভিডিওটি খুঁজে পাচ্ছি না আমি এটি কেবল কৌতূহলী ব্যক্তিদের জন্য এবং কোনও রেফারেন্স ছাড়াই পোস্ট করব: ক্রকফোর্ড ব্যাখ্যা করেছিলেন যে কীভাবে নালাকে সমাধান করার ক্ষেত্রে একটি শূন্য মান টাইপ করে অ্যারের শূন্য সূচকযুক্ত উপাদানটির দিকে নির্দেশ করে, তাই এটি পরিষ্কার ছিল মাইক্রোসফ্ট ছেলেরা দুর্ঘটনাক্রমে তাদের ব্রাউজারের
জেএসটি সংক্ষেপণ

6

ওয়াইডিকেজেএস বইটি থেকে

এটি জেএসের একটি দীর্ঘস্থায়ী বাগ, তবে এটি সম্ভবত ঠিক করা যায় না। ওয়েবে খুব বেশি কোড বাগের উপর নির্ভর করে এবং এইভাবে এটি ঠিক করা আরও অনেক বেশি বাগের কারণ হতে পারে!


1
একটি বইতে সবকিছু লেখা আছে বিশ্বাস করবেন না। আমি সেই বইটি সত্যিই ভালোবাসি, তবে আমি এটিকে ত্রুটি হিসাবে বিবেচনা করতে পারি না কারণ জাভাস্ক্রিপ্টের জন্য ইসিএমএ স্পেসিফিকেশনটি জানিয়েছে যে নাল ধরণের একটি বস্তু হতে হবে।
andreasonny83

4

যদি nullআদিম হয় তবে কেন typeof(null)" object" ফেরত আসে ?

সংক্ষেপে: এটি ECMAScript এ বাগ রয়েছে এবং প্রকারটি হওয়া উচিত null

রেফারেন্স: https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / নাল


1
আপনার রেফারেন্সে কোথাও এটি উল্লেখ করা হয়নি যে এটি একটি বাগ।
ব্যবহারকারী 2867288

1
এবং অনুমানের কোথাও এটি বলা হয়নি যে টাইপফের "অপরিজ্ঞাত", "অবজেক্ট", "বুলিয়ান", "সংখ্যা", "স্ট্রিং", "ফাংশন", এবং "প্রতীক" (ইসমাস্ক্রিপ্ট 2015) ব্যতীত অন্য কোনও কিছু ফেরত আসা উচিত
ব্র্যাড কেন্ট

1

জাভাস্ক্রিপ্টে নাল "কিছুই নয়" " এটি এমন কিছু হতে পারে যার অস্তিত্ব নেই। দুর্ভাগ্যক্রমে, জাভাস্ক্রিপ্টে, নাল এর ডেটা ধরণের একটি অবজেক্ট। আপনি এটি জাভাস্ক্রিপ্টে একটি বাগ বিবেচনা করতে পারেন যে টাইপফুল নাল একটি বস্তু। এটি নাল হওয়া উচিত।


0

জাভাস্ক্রিপ্টে, টাইপফুল নলটি 'অবজেক্ট', যা ভুলভাবে প্রস্তাব দেয় যে নাল একটি বস্তু। এটি একটি বাগ এবং এটি দুর্ভাগ্যক্রমে স্থির করা যায় না, কারণ এটি বিদ্যমান কোডটি ভেঙে দেবে।


0

এই আচরণটি করা এমন কোনও কোডে আগ্রহী এমন লোকদের জন্য এটি আপনার লোকের লিঙ্ক is

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