কেন! {} [সত্য] জাভাস্ক্রিপ্টে সত্যের মূল্যায়ন করে?


131

{}[true]হয় [true]এবং ![true]হওয়া উচিত false

তাহলে !{}[true]মূল্যায়ন কেন true?


30
var o = {}; o[true] === undefined
Azz

2
এখানে ব্যাখ্যা সম্ভবত পূর্ববর্তী প্রশ্নটি
মতভেদগুলির

45
"কারণ জাভাস্ক্রিপ্ট নিরীহ" সম্ভবত আপনি যে উত্তরটি সন্ধান করছেন তা নয়।
জর্জি

2
যেমনটি উল্লেখ করা হয়েছে, আপনি যদি {}[true] === [true]কনসোল থেকে পান তবে এটি কারণ যে এটি {}কোনও অবজেক্ট নয়, খালি কোড ব্লক হিসাবে আচরণ করছে ।
Azz

3
যদি এটি সহায়তা করতে পারে তবে তুলনা করার চেষ্টা করুন {}এবং ({})আপনার কনসোলটিতে (বা {}[true]এবং ({})[true])। এছাড়াও, যেমন কেউ এটি উল্লেখ করেনি, বস্তুর [সত্য] "[সত্য"] আপত্তি জানার জন্য মূল্যায়ন করা হয়।
বিআইআইবি

উত্তর:


172

আমি বিশ্বাস করি যে এর কারণ স্পষ্ট {}[true]একটি খালি বিবৃতি ব্লক (না একটি বস্তু আক্ষরিক) একটি অ্যারের ধারণকারী দ্বারা অনুসরণ হিসাবে পার্স করা হয় trueযা, true

অন্যদিকে, !অপারেটর প্রয়োগ করে পার্সারটিকে {}কোনও বস্তু আক্ষরিক হিসাবে ব্যাখ্যা করে তোলে , সুতরাং নিম্নলিখিতটি {}[true]একটি সদস্য অ্যাক্সেস হয়ে যায় যা প্রত্যাবর্তন করে undefinedএবং !{}[true]প্রকৃতপক্ষে true(যেমন !undefinedহয় true) হয়।


25
অপরিবর্তিত সত্য, অন্যদিকে, এখনও অনর্থক ex
অ্যাসক্র্যান্ডিবাগ

87
@ ইভিলকান্দিবাগ: একেবারে তা নয়। undefinedমিথ্যাচার (এমন কিছু যা আমরা প্রায়শই নির্ভর করি - if (obj.maybeExists) ...), তাই এটি সঠিক লজিক্যাল বোধ তৈরি করে !undefinedযা সত্য।
josh3736

8
@ জোশ, আমার কাছে মনে হয় দুষ্টু ব্যাধিটি সমান হওয়ার nullসাথে কিছু ভাষায় অনুরূপ আচরণকে পছন্দ করবে । যদিও জাভাস্ক্রিপ্টে এটি হয় না। !undefinedundefined
ফ্রিডরিক হামিদি

6
@ আইভিলক্যান্ডিবাগ: এটি কেবলমাত্র যুক্তিযুক্তভাবে বোঝায় যে এমন কিছু not undefined( !undefined) তাই সংজ্ঞায়িত করা উচিত। যদি কিছু সংজ্ঞায়িত হয় তবে এটি সাধারণত হিসাবে ব্যাখ্যা করা হয় true
OozeMeister

7
টুইটার বিশেষত যখন দুটি ভেরিয়েবলের একমাত্র পরিচিত বৈশিষ্ট্যটি হুবহু একই রকম হয়।
LJ2

44

কারণ {}[true]ফিরে আসে না true, তবে undefined, এবং undefinedএরূপ হিসাবে মূল্যায়ন করা হয় false:

http://jsfiddle.net/67GEu/

'use strict';
var b = {}[true];
alert(b); // undefined
b = !{}[true];
alert(b); // true

21
আপনি যদি {}[true]কনসোলে মূল্যায়ন করেন তবে আপনি পাবেন [true], কারণ {}খালি কোড ব্লক হিসাবে ব্যাখ্যা করা হয়েছে, কোনও বস্তু নয়। এটি সমস্ত প্রসঙ্গে এবং এর অস্পষ্টতা সম্পর্কে {}
আইএমএসওপি

1
@ আইএমএসওপি কিন্তু কেন {key:"value"}[1,2,3];মূল্যায়ন করে [1,2,3]?
t.niese

3
@ t.niese, কারণ এটি লেবেল ( key:) এবং একটি স্ট্রিং আক্ষরিক ( "value") সহ একটি স্টেটমেন্ট ব্লক হিসাবে বিশ্লেষণ করা হয়েছে , তারপরে অ্যারে অনুসরণ করবে। পার্সার এখনও কোনও বস্তু আক্ষরিক দেখতে পাবে না।
ফ্রেডেরিক হামিদি

1
@ ফ্রাডেরিক হামিদি হ্যাঁ, এটি হ'ল আমি লেবেলগুলি দমন করেছি
t

1
@ ডুক্স অন্যান্য উত্তর পড়ুন; এটি সমস্ত প্রসঙ্গে যা এর ব্যাখ্যা করা হয়। আপনি যদি এটিকে মোড়ানো alert()বা console.log(), বা কোনও ভেরিয়েবলের কাছে নির্ধারণ করেন, আপনি প্রসঙ্গটি পরিবর্তন করছেন, যার কারণে এটি কনসোলে নিজের মতো টাইপের মতো আচরণ করে না।
আইএমএসওপি

27

কারণ

{}[true]

মূল্যায়ন undefined, এবং !undefinedহয় true

@ শ্লিংগেল থেকে:

trueকী এবং {}হ্যাশ ম্যাপ হিসাবে ব্যবহৃত হয় । কীটি দিয়ে কোনও সম্পত্তি নেই trueতাই এটি ফিরে আসে undefined। না undefinedহয় true, যেমন প্রত্যাশিত।

কনসোল সেশন ( নোড.জেএস [0.10.17] ):

> {}[true]
undefined
> !{}[true]
true
> [true]
[ true ]
> ![true]
false
>

তবে গুগল ক্রোম কনসোলে:

> !{}[true]
true

সুতরাং, কোনও অসঙ্গতি নেই। আপনি সম্ভবত জাভাস্ক্রিপ্ট ভিএম এর একটি পুরানো সংস্করণ ব্যবহার করছেন। যাদের আরও প্রমাণ প্রয়োজন:

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

হালনাগাদ

ফায়ারফক্সের সাথে এটি মূল্যায়নও করে true:

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


আপনি যদি তা করেন eval('{}[true]')বা কনসোল করতে টাইপ করেন তা নয়। তারপরে যেমন ALS {}"test"হয় testবা {key:"value"}"test"হয় test
t.niese

আকর্ষণীয়, আপনি কোন জেএস ইঞ্জিনটি পরীক্ষা করেন?
t.niese

@ t.niese আমি কেবল এটি আমার নোড কনসোলে টাইপ করেছি এবং এটি আমার কাছে পাওয়া গেছে।
গেমস ব্রেনিয়াক

শুধু কৌতূহল জন্য। {}[true];(সাথে ;) কি আপনার [true]জন্য ফিরে আসে , কারণ এখানে এটি রয়েছে?
t.niese

2
ডাউনভোট ছেলেদের কারণ? 8 টি ভোট দিয়ে এইটির একটি প্রায় অনুরূপ উত্তর আছে, এবং আমি ডাউনটি পেয়েছি? আমি কি ভুল করছি?
গেমস Brainiac

23

বিভ্রান্তির কারণটি আপনার প্রথম দাবির ভুল বোঝাবুঝির কারণ:

{}[true] হয় [true]

এটি চালানোর সময় আপনি যা দেখছেন তা অস্পষ্টতার ফল। জাভাস্ক্রিপ্টের এইরকম অস্পষ্টতাগুলি কীভাবে পরিচালনা করতে হবে তার বিধিবিধানের একটি সংজ্ঞায়িত সেট রয়েছে এবং সেক্ষেত্রে এটি আপনি যা দেখছেন তাতে সিগন্যাল স্টেটমেন্ট হিসাবে দুটি পৃথক বিবৃতি বিভক্ত করে।

সুতরাং জাভাস্ক্রিপ্ট উপরের কোডটিকে দুটি পৃথক বিবৃতি হিসাবে দেখবে: প্রথমত, এখানে একটি {}আছে এবং তারপরে সম্পূর্ণ আলাদা [true]। দ্বিতীয় বিবৃতিটি আপনাকে ফলাফলটি দিচ্ছে [true]। প্রথম বিবৃতি {}কার্যকরভাবে সম্পূর্ণ উপেক্ষা করা হয়।

আপনি নিম্নলিখিত চেষ্টা করে প্রমাণ করতে পারেন:

({}[true])

অর্থাত্ ব্র্যাককেটগুলিতে পুরো জিনিসটি মোড়ানো এবং দোভাষীকে এটি একক বিবৃতি হিসাবে পড়তে বাধ্য করে।

এখন আপনি দেখতে পাবেন যে আপনার বক্তব্যের আসল মান undefined। (এটি পরের অংশটি বুঝতে আমাদের পরবর্তী সময়ে সহায়তা করবে)

এখন আমরা জানি যে আপনার প্রশ্নের প্রাথমিক অংশটি একটি লাল রঙের হেরিং, সুতরাং আসুন আমরা প্রশ্নের চূড়ান্ত অংশে চলে যাই:

তাহলে কেন! {} [সত্য] সত্যের মূল্যায়ন করে?

এখানে, আমরা একই বক্তব্য আছে, কিন্তু !এটির সামনে যুক্ত করা আছে।

এই ক্ষেত্রে জাভাস্ক্রিপ্টের নিয়মগুলি একে সম্পূর্ণ বিবরণটিকে একক বিবৃতি হিসাবে মূল্যায়ন করতে বলে।

যখন আমরা পূর্ববর্তী বিবৃতিটি বন্ধনীতে আবৃত করি তখন কী ঘটেছিল তা প্রত্যাহার করুন; আমরা পেয়েছিলাম undefined। এবার, আমরা কার্যকরভাবে একই জিনিসটি করছি, তবে !এটি সামনে রেখে দিচ্ছি । সুতরাং আপনার কোড হিসাবে সরলীকৃত করা যেতে পারে !undefined, যা true

আশা করি এটি কিছুটা ব্যাখ্যা করেছে।

এটি একটি জটিল জন্তু, তবে এখানে শিখার পাঠটি হ'ল আপনার বিবৃতিগুলির চারপাশে বন্ধনীগুলি কনসোলে মূল্যায়ন করার সময় ব্যবহার করা, এটির মতো উদ্দীপক ফলাফল এড়াতে।


2
আমি মনে করি না {}[true]হয় অবৈধ ঠিক শুধু দ্ব্যর্থক । এটি "ফাঁকা কোড ব্লক এর পরে অ্যারে আক্ষরিক" বা "কোনও সম্পত্তি ছাড়াই অবজেক্ট আক্ষরিক, যার মধ্যে কোনও সম্পত্তি অ্যাক্সেস করা হচ্ছে" হিসাবে ব্যাখ্যা করা যেতে পারে। আমি জানি না যে প্রযুক্তিগতভাবে প্রথমটি এএসআই-র একটি মামলা (অনেকগুলি ভাষা সেভাবে সেখানে আধা-কোলন রাখবে না) তবে এটি প্রসঙ্গ-সংবেদনশীল ব্যাখ্যা যা ইস্যুটির কেন্দ্রস্থল।
আইএমএসওপি

@ আইএমএসওপি - আপনি মন্তব্য পোস্ট করার আগেই আমি উত্তরটি ইতিমধ্যে সম্পাদনা করেছিলাম। :)
স্পডলি

1
এটি এখনও বলে যে উত্তরের শুরুতে ডান "{} [সত্য] আসলেই মোটেই বৈধ নয়"।
আইএমএসওপি

এছাড়াও, ওপি " {}[true]হ'ল true" তারা বলেছে " {}[true]আছে [true]" বলে নি, যা অস্পষ্ট বিবৃতিটির দুটি বৈধ ব্যাখ্যার মধ্যে একটি।
আইএমএসওপি

14

{}[true]হয় undefined। এটি লিখতে এটি লিখুন:

a = {};
a[true] === undefined // true

বা সহজভাবে:

({})[true] === undefined // true

আমরা জানি যে !undefinedহয় true


থেকে @Benjamin Gruenbaum এর উত্তর :

ক্রোম ডাফলার সরঞ্জামগুলি নিম্নলিখিতগুলি করে :

  try {
      if (injectCommandLineAPI && inspectedWindow.console) {
          inspectedWindow.console._commandLineAPI = new CommandLineAPI(this._commandLineAPIImpl, isEvalOnCallFrame ? object : null);
          expression = "with ((window && window.console && window.console._commandLineAPI) || {}) {\n" + expression + "\n}";
      }
      var result = evalFunction.call(object, expression);
      if (objectGroup === "console")
          this._lastResult = result;
      return result;
  } 
  finally {
      if (injectCommandLineAPI && inspectedWindow.console)
          delete inspectedWindow.console._commandLineAPI;
  }

সুতরাং মূলত, এটি callএক্সপ্রেশন দিয়ে বস্তুর উপর একটি সম্পাদন করে। প্রকাশ হচ্ছে:

with ((window && window.console && window.console._commandLineAPI) || {}) {
    {}+{};// <-- This is your code
}

সুতরাং, যেমন আপনি দেখতে পাচ্ছেন, অভিব্যক্তিটি মোড়ানো প্যারেনেসিস ছাড়াই সরাসরি বিবর্তিত হচ্ছে।

এই প্রশ্নে আরও তথ্য পাওয়া যাবে ।


10

এখানে উত্তরগুলি ভাল, সিউডো-কোডে একটি ব্রেকডাউন এখানে:

  • {}['whatever'] = খালি ব্লক, নিউআর্রে ('যাই হোক না কেন') = নিউআররে ('যাই হোক না কেন')
  • {}[true] = খালি ব্লক, নিউআররে (সত্য) = নিউআররে (সত্য)
  • !{}['whatever'] = লজিক্যালনট (রূপান্তরকোবুল (নিউওবজেক্ট.উইভিনিস)) = লজিক্যালনট (রূপান্তরটোবুল (অপরিজ্ঞাত)) = লজিক্যালনট (মিথ্যা) = সত্য
  • ({}['whatever']) = দলবদ্ধকরণ (নিউওবজেক্ট.উইভিনিউস) = গ্রুপিং (অপরিজ্ঞাত) = অপরিবর্তিত

8

এটি ঘটে কারণ {}আপনার অর্থের আক্ষরিক উপস্থাপনা নয় Object, খালি সুযোগ (বা খালি কোড ব্লক):

{ var a = 1 }[true] // [true] (do the same thing)

এটি কেবল স্কোপের অভ্যন্তরের কোডটি মূল্যায়ন করে এবং তারপরে আপনাকে আপনার অ্যারে দেখায়।

এবং আপনার থেকে

!{}[true]

এই স্কোপটিতে কেবল রূপান্তরিত হয় এবং একই অ্যারেটিকে সত্য করে দেয়। এই কোডটিতে কোনও বুল চেক নেই।

আর তুমি ফলাফলের চেক করতে থেকে চেষ্টা করবে যদি {}[true]আপনি পাবেন আপনার false:

{}[true] -> [true] -> ![true] -> false

যেহেতু আর কোনও সুযোগ নেই।

সুতরাং !আপনার প্রশ্নে একই কাজ করুন:

!function() {
   //...
}

এটি করলে আরও সহজেই দেখা যায় var x = {}; x[true]
ক্রিস হেইস

1
আমি নিশ্চিত না যে আপনি "এই সুযোগে রূপান্তর" দ্বারা কী বোঝাতে চেয়েছেন; আমি নেতৃস্থানীয় সঙ্গে মনে হয় !এটা করা হয় একটি খালি বস্তু, না সুযোগ হিসেবে ব্যাখ্যা, এবং এই অমিল নেই।
আইএমএসওপি

6
  • {} কোন সম্পত্তি সহ একটি বস্তু।
  • যেহেতু []অবিলম্বে কোনও অবজেক্ট অনুসরণ করে, এর অর্থ "এই নামের একটি সম্পত্তি অ্যাক্সেস করুন" এবং "অ্যারে তৈরি করুন" না
  • trueএকটি বুলিয়ান, তবে এটি একটি সম্পত্তি নাম হিসাবে ব্যবহৃত হচ্ছে যাতে এটি স্ট্রিংয়ে ফেলে দেওয়া হয় ( "true")
  • বস্তুর একটি সম্পত্তি বলা নেই true(যেহেতু এটা কোন বৈশিষ্ট্য আছে) তাই {}['true']হয়undefined
  • !undefinedundefinedএকটি বুলিয়ান কাস্ট ( false)
  • অপারেটর পরিণত falseহয় না true

2
ক্ষেত্রে {}[true](অন্য কোন প্রসঙ্গকে), {}হয় না কোন বৈশিষ্ট্য সঙ্গে একটি বস্তু, এটি একটি খালি কোড ব্লক আছে।
আইএমএসওপি


4

এবার আরও কিছু খেলি!

প্রথমে কিছু মজা করা যাক!

//----------#01#-----------
{}[true]; //[true]

//----------#02#-----------
var a = {}[true]; 
      console.log(a); //undefined

//----------#03#-----------
{ b: 12345 }[true]; //[true]

//----------#04#-----------
{ b: 12345 }["b"]; //evaluates to ["b"] ?!?

//----------#05#-----------
{ b: 12345 }.b; // "Unexpected token ."

//----------#06#-----------
({ b: 12345 }).b; //12345

//----------#07#-----------
var c = { b: 12345 }.b; 
      console.log(c); //12345

//----------#08#-----------
var c = { b: 12345 }["b"];
      console.log(c); //12345

//----------#09#-----------
{ true: 54321 }[true]; // "SyntaxError: Unexpected token : "

//----------#10#-----------
var d = { true: 54321 }[true]; //No error here ¬¬
      console.log(d); //54321

//----------#11#-----------
!{}[true]; // true

ঠিক আছে, আসুন একের পর এক এই পাগল আচরণগুলি বোঝার চেষ্টা করি:

1) এখানে, {}খালি কোড ব্লক হিসাবে পার্স করা হয়েছে। কোনও অ্যাসাইনমেন্ট, অবহেলা, দলবদ্ধকরণ (বন্ধনী সহ) বা কোনও সিনট্যাক্স যা পার্সারকে নির্দেশ করে যে {}এটি একটি বস্তু আক্ষরিক, ডিফল্ট অনুমান এটি কেবল একটি অকেজো ফাঁকা ব্লক বলে মনে করে।

এটি এই আচরণের একটি প্রমাণ:

{ alert(123) }[true]

উপরের কোডটি সাধারণত সতর্কতা প্রদর্শন করবে [true]এবং একইভাবে যেমন মূল্যায়ন করা হবে {}[true]

সেমিকোলন ছাড়াই ব্লক স্টেটমেন্ট

একটি ব্লক-টাইপ স্টেটমেন্টের পরে সেমিকোলনের প্রয়োজন হয় না।

এই ক্ষেত্রে:

for(var i=0; i < 1; i++){}function a(){};alert("Passed here!");if(true){}alert("Passed here too!")

উভয় সতর্কতা প্রদর্শিত হয়।

সুতরাং, আমরা দেখতে পাচ্ছি যে একটি খালি ব্লক স্টেটমেন্ট, সেমিকোলন ব্যতীত, বৈধ এবং কেবল কিছুই করে না। এইভাবে, আপনি যখন {}[true]বিকাশকারী সরঞ্জাম (বা ফায়ারব্যাগ) কনসোলে প্রবেশ করবেন তখন মূল্যায়িত মানটি সর্বশেষ অভিব্যক্তিটির বিবৃতিটির মান হবে । এই ক্ষেত্রে, সর্বশেষ প্রকাশের বিবৃতিটি [true]

2) একটি কার্যনির্বাহী প্রসঙ্গে পার্সার এটি নিশ্চিত করবে যে {}এটি কোনও বস্তু আক্ষরিক। যখন আপনি var a = করেন {}[true], আপনি যে কোনও দ্বিধাহীনতা সরিয়ে ফেলবেন এবং পার্সারটিকে টিপবেন এটি {}কোনও ব্লক বিবৃতি নয়।
সুতরাং, এখানে, আপনি "true"একটি খালি বস্তু থেকে একটি কী দিয়ে একটি মান পাওয়ার চেষ্টা করছেন । স্পষ্টতই, এই কী নামের সাথে কোনও মূল-মানের জুড়ি নেই। এইভাবে, ভেরিয়েবল অপরিজ্ঞাত হয়।

অবজেক্ট কী হিসাবে শব্দ সংরক্ষণ করা

ECMAScript 5 অবজেক্ট কীগুলিকে সংরক্ষিত শব্দ রাখতে দেয়। সুতরাং, নিম্নলিখিত কীগুলি আইনী:

var obj = {if: 111, for: 222, switch: 333, function: 444, true: 555}

3) উদাহরণ 1 এর একই ব্যাখ্যা । তবে ... { b: 12345 }অংশটি যদি একটি ব্লক স্টেটমেন্ট হিসাবে বিবেচনা করা হয়, তবে b: 12345বিবৃতিটির প্রকারটি কী ??

... (?????)

এটি একটি লেবেল বিবৃতি , আপনি এটি ইতিমধ্যে দেখেছিলেন ... এটি লুপ এবং ইন ব্যবহৃত হয় switch। এখানে লেবেলের বিবৃতি সম্পর্কে কয়েকটি আকর্ষণীয় লিঙ্ক রয়েছে: 1 , (2) [ জাভাস্ক্রিপ্টে নেস্টেড লুপগুলি ভাঙ্গার সর্বোত্তম উপায়? , (3) [ জাভাস্ক্রিপ্টে নেস্টেড লুপগুলি কীভাবে ভাঙ্গবেন?

দ্রষ্টব্য: কেবল এটি মূল্যায়নের চেষ্টা করুন:

{a: 1, b: 2} //=>>>SyntaxError: Unexpected token :

লেবেল বিবৃতি কমা অপারেটর দ্বারা পৃথক করা যাবে না , আপনি সেমিকোলন দিয়ে তাদের পৃথক করা প্রয়োজন। সুতরাং এটি বৈধ:{a: 1; b: 2}

4) উদাহরণ 1 এবং 3 এর ব্যাখ্যা দেখুন ...

৫) আরও একবার, আমাদের { b: 12345 }একটি কোড ব্লক হিসাবে ধরা হচ্ছে এবং আপনি ডট স্বরলিপি ব্যবহার করে একটি কোড ব্লকের কোনও সম্পত্তি অ্যাক্সেস করার চেষ্টা করছেন , এবং স্পষ্টতই, এটি অনুমোদিত নয় এবং পার্সার একটি "Unexpected token :"ব্যতিক্রম ছুঁড়ে ফেলে ।

6) কোডটি উপরের উদাহরণের সাথে প্রায় অভিন্ন, তবে এক্সপ্রেশন গ্রুপিং অপারেটরের{ b: 12345 } সাথে বিবৃতিকে ঘিরে , পার্সারটি জানতে পারবে যে এটি একটি অবজেক্ট। এইভাবে, আপনি সম্পত্তিটি সাধারণত অ্যাক্সেস করতে সক্ষম হবেন ।"b"

)) উদাহরণটি মনে রাখবেন , আমাদের এখানে একটি অ্যাসাইনমেন্ট রয়েছে, পার্সার জানে যে { b: 12345 }এটি একটি অবজেক্ট।

8) উপরের উদাহরণের মতো, তবে বিন্দু চিহ্নিতকরণের পরিবর্তে, আমরা এখানে বন্ধনী চিহ্নিতকরণ ব্যবহার করছি ।

9) আমি ইতিমধ্যে বলেছি যে "identifier: value"একটি ব্লক স্টেটমেন্টের ভিতরে এই সিনট্যাক্সটি একটি লেবেল। তবে, আপনাকে আরও জানতে হবে যে একটি লেবেল নাম কোনও সংরক্ষিত কীওয়ার্ড (বস্তুর সম্পত্তির নামের বিপরীতে) হতে পারে না। আমরা যখন নামক একটি লেবেল সংজ্ঞায়িত করার চেষ্টা করেছি তখন আমরা একটি "true"পেয়েছি SyntaxError

10) আবার, আমরা একটি বিষয় নিয়ে কাজ করছি। এখানে সংরক্ষিত শব্দ ব্যবহার করে কোনও সমস্যা নেই। =)

11) অবশেষে, আমাদের এটি আছে:!{}[true]

আসুন এখানে জিনিস পৃথক:

ক) একটি অস্বীকৃতি করার মাধ্যমে আমরা পার্সার করার পরিচায়ক করছেন {}হয় একটি বস্তু

খ) উদাহরণ 2- এ প্রদর্শিত হিসাবে , কোনও {}বস্তুর কোনও সম্পত্তি বলা হয় না true, সুতরাং এই অভিব্যক্তিটি মূল্যায়ন করবে undefined

গ) চূড়ান্ত ফলাফলটি undefinedমান অবহেলা । জাভাস্ক্রিপ্ট ইম্পিলিটি ধরণের রূপান্তর সম্পাদন করে এবং undefinedমানটি মিথ্যা

d) সুতরাং, অবহেলা falseহ'ল ... true!

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