আমি আজ লক্ষ্য করেছি যে NaN
আপনি {}+{}
কনসোলে টাইপ করার সময় ক্রোম 49 আর আউটপুট দেয় না। পরিবর্তে এটি স্ট্রিং আউটপুট [object Object][object Object]
।
কেন? ভাষা পরিবর্তন হয়েছে?
আমি আজ লক্ষ্য করেছি যে NaN
আপনি {}+{}
কনসোলে টাইপ করার সময় ক্রোম 49 আর আউটপুট দেয় না। পরিবর্তে এটি স্ট্রিং আউটপুট [object Object][object Object]
।
কেন? ভাষা পরিবর্তন হয়েছে?
উত্তর:
ক্রোম ডেভোলগুলি এখন স্বয়ংক্রিয়ভাবে সমস্ত কিছুই মোড় নেয় যা শুরু হয় {
এবং শেষ }
হয় একটি অভিজাত জুটির বন্ধনী ( কোড দেখুন ) এর সাথে, তার মূল্যায়নকে একটি অভিব্যক্তি হিসাবে জোর করে। এইভাবে, {}
এখন একটি খালি বস্তু তৈরি করে। আপনি যদি ইতিহাস ( ↑) এর মাধ্যমে ফিরে যান তবে আপনি এটি দেখতে পারবেন , পূর্ববর্তী লাইনটি এতে অন্তর্ভুক্ত থাকবে (…)
।
কেন? আমি জানি না, তবে আমি অনুমান করতে পারি যে এটি নবজাতকদের জন্য বিভ্রান্তি হ্রাস করে যা ব্লক-বনাম-অবজেক্ট-আক্ষরিক জিনিসটি জানে না এবং আপনি যদি কেবল কোনও অভিব্যক্তিটি মূল্যায়ন করতে চান তবে এটি আরও বেশি সহায়ক।
499864 বাগে যেমন আলোচনা করা হয়েছে তেমনি এটি যুক্তি । খাঁটি সুবিধা। এবং কারণ নোড REPL এটিও ছিল ( কোড দেখুন )।
{a:1}),({b:2}
একটি ত্রুটি নিক্ষেপ করা উচিত, একটি অবজেক্ট উত্পাদন না।
)
কোনও মন্তব্যে সন্নিবেশ করার আগে একটি নতুন লাইন যুক্ত করার বিষয়টি বিবেচনা করুন, যেমন {a:3} // :-}
এখনও কোনও বস্তু তৈরি হতে পারে।
আপনি যদি এটি যাচাই করার পরে আপ তীরটি আঘাত করেন তবে আপনি লক্ষ্য করবেন যে {} + {}
এটির পরিবর্তে এটি প্রদর্শিত হবে ({} + {})
, যার ফলস্বরূপ "[object Object][object Object]"
।
তুলনায়, ফায়ারফক্সে, {} + {}
এখনও প্রদর্শিত হয় NaN
, তবে আপনি যদি ({} + {})
এটি করেন তবে এটি প্রদর্শনও করে "[object Object][object Object]"
।
সুতরাং, দেখে মনে হচ্ছে ক্রোম যখন এই ক্রিয়াকলাপটি দেখবে তখন চারপাশের বন্ধনীগুলি স্বয়ংক্রিয়ভাবে যুক্ত হচ্ছে।
{} + {}
যখন "স্যানিটাইজড" না ({} + {})
করা হয় এমন হিসাবে ধরা হয় + {}
কারণ {}
একটি খালি ব্লক হিসাবে পার্স করা হয়েছে।
{}
কেবল একটি খালি কোড ব্লক এবং অবহেলা করা হয় যা আমাদের সাথে ছেড়ে যায় +{}
যা একটি অরিয়া +
এবং খালি অবজেক্ট সূচনাকারী। +
সংখ্যা, যা একটি আদিম (যা একটি হচ্ছে শেষ হবে বস্তুর রূপান্তর জড়িত তার যুক্তি নিগৃহীত হবে toString
এই ক্ষেত্রে, ফলে "[object Object]"
), এবং তাই আমরা পেতে +"[object Object]"
যা NaN
কারণ "[object Object]"
একটি বৈধ সংখ্যায় রূপান্তরিত করা যাবে না।
দুর্ভাগ্যক্রমে, আমি ক্লিপির উদ্ধৃতি নিজেই যুক্ত করেছি। কনসোলটি এটি আপনার জন্য কী করেছে সে সম্পর্কে কোনও তথ্য দেয় না।
নতুন নিয়মাবলী অবিশ্বাস্যরূপে সহজ এই দুটি কঠিন চার্টারের টাইপ করার সমস্যাটি o=
বা কনসোলটিতে 0,
অবজেক্ট লিটারালগুলি পেস্ট করার আগে:
{
;{wat:1}),({wat:2}
অবশেষে আবার একটি ত্রুটি।
{let i=0;var increment=_=>i++}
সঠিকভাবে অনুমোদিত, অবশেষে, যা ক্লোজারিং করার দুর্দান্ত উপায়।
তবে, নিম্নলিখিতটি ভুলভাবে একটি অবজেক্ট, এটি @ বরগি দ্বারা উল্লিখিত একটি সুবিধার মতো, এটি আপনাকে সহায়তা করার জন্য জেএসকে ভুল ব্যাখ্যা করে! অনুমানটি বলছে এটি আক্ষরিক 1 সহ লেবেলযুক্ত "foo" বিবৃতি সহ একটি ব্লক যা কোনও কিছুর জন্য বরাদ্দ করা হয়নি।
{foo:1}
উপরের মত একই হওয়া উচিত
if(1) {
foo: 1
}
নিম্নলিখিতটি একটি ব্লক হিসাবে সঠিকভাবে চিকিত্সা করা হয় ... কারণ এটির সামনে একটি মন্তব্য আছে!
//magic comment
{foo:1}
সুতরাং এটি:
{foo:1}
//also magic
এটি একটি অবজেক্ট:
{foo:
//not so magic comment
1}
এটি একটি ত্রুটি
//not so magic comment
{foo:1}.foo
সুতরাং এটি:
{foo:1}.foo
্রফ:
1..wat
undefined
সুতরাং এটি:
['foo'][0]
পরেরটি সঠিকভাবে ব্যাখ্যা করা হয় একটি বস্তুর সাথে অভিব্যক্তির অবস্থানের সাথে ঝাঁকুনি দেওয়া হয় 0,
যা সাধারণত আমরা কীভাবে নির্বিঘ্নে নিশ্চিত করতে পারি যে একটি বিবৃতি পরিবর্তে আমাদের একটি অভিব্যক্তি আছে।
0,{foo:1}.foo
কেন তারা প্যারেন্সে মানটি মুড়ে দেয় তা আমি পাই না। জেএসের কিছু হাস্যকর ডিজাইনের সিদ্ধান্ত রয়েছে, তবে এই এক পরিস্থিতিতে এটি আরও ভাল আচরণ করার চেষ্টা করা আসলেই কোনও বিকল্প নয়, কনসোলকে জেএসকে সঠিকভাবে চালানো দরকার, এবং আমাদের আত্মবিশ্বাস থাকা দরকার যে ক্রোম কেবল অনুমান করে না যে এটি আমাদের মনে করে যে সত্যিই এটি অন্য কিছু করা বোঝায়।
আপনি যদি কমা অপারেটরদের পছন্দ না করেন আপনি অ্যাসাইনমেন্ট ব্যবহার করতে পারেন
x = {foo:1}.foo
কারণ এটি যেমন দাঁড়িয়ে আছে
{} + {} + {}
"[object Object][object Object][object Object]"
;{} + {} + {}
"NaN[object Object]"
ক্রেজি এবং অবিচ্ছিন্ন আমি এর সাথে ডিল করতে পারি ... ক্রেজি এবং বেমানান আপনাকে ধন্যবাদ না!
{foo:1}
এবং {foo:1}//
একই জিনিস উত্পাদন। Chrome JS REPL এ তারা দেয় না। আরপিএল কেবল জেএসকে মূল্যায়ন করার চেয়ে আরও বেশি কিছু করছে। এটি স্ট্রিংগুলি প্রক্রিয়াজাত করছে এবং বিভিন্ন জিনিস স্থির করছে।
var x = eval('{a:1}')
বৈধ জাভাস্ক্রিপ্টে x এখন 1, আরও স্বজ্ঞাত বস্তু নয় {a: 1}} হ্যাঁ, এটি অদ্ভুত, তবে আপনি কেবল ভাষা পরিবর্তন করতে পারবেন না কারণ এটি অদ্ভুত জিনিসগুলি করে। জেএসএন স্ট্রিং ব্যতীত অন্য সমস্ত কিছুই জাভাস্ক্রিপ্ট হিসাবে ব্যাখ্যা করা হয় এবং মূল্যায়ন করা হয়। 0,
JSON পেস্ট করার আগে টাইপ করা কঠিন নয়, বিকল্প হিসাবে আমি একটি সতর্কতার সাথে খুশি হব যে স্ট্রিংটি সুবিধার্থে জাভাস্ক্রিপ্টের পরিবর্তে কোনও বস্তু হিসাবে ব্যাখ্যা করা হয়েছিল।
var e = {}; e.toString()
এবং আপনি আমার