('বি' + 'এ' + + 'এ' + 'এ') কেন রয়েছে? লোয়ারকেস () 'কলা' এর ফলাফল কেন?


575

আমার কিছু বন্ধু যখন এই জাভাস্ক্রিপ্ট কোডটি পেয়েছিল তখন আমি কিছু জাভাস্ক্রিপ্ট অনুশীলন করছিলাম:

document.write(('b' + 'a' + + 'a' + 'a').toLowerCase());

উপরের কোড উত্তর "banana"! কেন কেউ ব্যাখ্যা করতে পারেন?


22
যে দ্বিতীয় প্লাস একটি unary অপারেটর: +"a"হয় NaN
জেরার্ডো ফুর্তাদো

8
একটি কনসোলে +'a'নিজে থেকে লিখুন এবং দেখুন কী ঘটে।
কিছু প্রোগ্রামার ড্যুড

23
এবং যারা আরও বেশি আগ্রহী তাদের জন্য। দেখুন পূর্ণ মজা তালিকা
ঘূর্ণায়মান নয়া

4
দৃ related ়ভাবে
কিল

উত্তর:


566

+'a'থেকে সমাধান করা NaN( "নেই একটি সংখ্যা" দেখুন) কারণ এটি একটি নম্বরে একটি স্ট্রিং coerces, যখন অক্ষর aএকটি সংখ্যা হিসাবে বিশ্লেষণ করা যায় না।

document.write(+'a');
লোয়ারকেস করতে গেলে তা হয়ে যায় banana

টাইপ রূপান্তর কারণে স্ট্রিং মধ্যে বাঁক যোগ NaNকরা , দেয় । এবং তারপর একটি পিছনে আছে, দেওয়া ।"ba"NaN"NaN"baNaNabaNaNa

এর মধ্যে স্থানটি + +হ'ল প্রথম এক স্ট্রিংকে সংক্ষিপ্তকরণ এবং দ্বিতীয়টি একটি আনরি প্লাস (অর্থাত্ "ইতিবাচক") অপারেটর। আপনি যদি একইভাবে ব্যবহার করেন তবে এর 'ba'+(+'a')+'a'সমাধান করেছেন 'ba'+NaN+'a', যা 'ba'+'NaN'+'a'টাইপ জাগলের কারণে সমান ।

document.write('ba'+(+'a')+'a');


90
'b' + 'a' + + 'a' + 'a'

... হিসাবে মূল্যায়ন করা হয় ....

('b') + ('a') + (+'a') + ('a')

(দেখুন: অপারেটর অগ্রাধিকার )

(+'a')আনরি প্লাস অপারেটরটি'a' ব্যবহার করে কোনও সংখ্যায় রূপান্তর করার চেষ্টা করে । কারণ কোনও সংখ্যা নয়, ফলাফলটি ( "নন-এ-সংখ্যা" ):'a'NaN

'b'  +  'a'  +  NaN  + 'a'

যদিও NaNএটি "একটি নম্বর নয়" এর অর্থ, এটি এখনও একটি সংখ্যাসূচক প্রকার ; যখন স্ট্রিংগুলিতে যুক্ত করা হয়, এটি অন্য যে কোনও সংখ্যার মতোই সংক্ষিপ্ত করে:

'b'  +  'a'  +  NaN  + 'a'  =>  'baNaNa'

অবশেষে, এটি নিম্নতর:

'baNaNa'.toLowerCase()      =>  'banana'

36
('b' + 'a' + + 'a' + 'a').toLowerCase()

স্পষ্টতার জন্য, আসুন এটি দুটি ধাপে বিভক্ত করুন। প্রথমত, আমরা প্রথম বন্ধনীযুক্ত এক্সপ্রেশনটির মান পাই এবং তারপরে আমরা ফলাফলটিতে toLowerCase()ফাংশনটি প্রয়োগ করি ।

প্রথম ধাপ

'b' + 'a' + + 'a' + 'a'

Going এল আর , আমরা আছে:

  • 'b' + 'a'প্রত্যাবর্তন বা , এটি নিয়মিত সংমিশ্রণ।
  • ba + + 'a'CONCATENATE প্রচেষ্টা BA সঙ্গে + 'a'। যাইহোক, ইউনারী অপারেটর +প্রচেষ্টা একটি সংখ্যা, মান মধ্যে নিজের প্রতীক রূপান্তর করতে NaN ফিরিয়ে দেওয়া হয়, যখন মূল সঙ্গে ঘনিভূত যা পরে একটি স্ট্রিং রূপান্তরিত হয় বিএ - এইভাবে ফলে baNaN
  • baNaN+ 'এ' ফেরত দেয় বন্নাকে । আবার এটি নিয়মিত কনটেন্টেশন।

এই পর্যায়ে, ধাপ এক থেকে ফল কলা

ধাপ দুই

.toLowerCase()প্রথম ধাপ থেকে প্রত্যাবর্তিত মানের উপর প্রয়োগ করা:

কলা

জাভাস্ক্রিপ্টে অনেকগুলি অনুরূপ পাংস রয়েছে যা আপনি পরীক্ষা করে দেখতে পারেন।


24

এটি কেবলমাত্র + অপারেটরের কারণে ।

আমরা এটুকু থেকে আরও জ্ঞান পেতে পারি।

=> ( ('b') + ('a') + (++) + ('a') + ('a'))
=> ( ('b') + ('a') + (+) + ('a') + ('a')) // Here + + convert it to +operator 
Which later on try to convert next character to the number.

উদাহরণ স্বরূপ

const string =  '10';

আপনি স্ট্রিংটিকে 2 উপায়ে সংখ্যায় রূপান্তর করতে পারেন:

  1. নম্বর (স্ট্রিং);
  2. + STRING;

সুতরাং মূল জিজ্ঞাসা ফিরে; এখানে এটি পরবর্তী চরটি ('এ') সংখ্যায় রূপান্তর করার চেষ্টা করে তবে হঠাৎ আমরা এনএএন ত্রুটি পেয়েছি,

( ('b') + ('a') + (+'a') + ('a'))
( ('b') + ('a') + NaN + ('a'))

তবে এটি একটি স্ট্রিং হিসাবে বিবেচনা করে কারণ পূর্ববর্তী অক্ষরটি স্ট্রিংয়ে ছিল। তাই হবে

( ('b') + ('a') + 'NaN' + ('a'))

এবং সর্বশেষে এটি এটিকে রূপান্তর করে লোভারকেসে (), সুতরাং এটি কলা হবে

আপনি যদি এর পাশে নম্বর স্থাপন করেন তবে আপনার ফলাফল পরিবর্তন হবে।

( 'b' + 'a' +  + '1' + 'a' ) 

এটি 'বাহ 1 এ' হবে

const example1 = ('b' + 'a' + + 'a' + 'a').toLowerCase(); // 'banana' 
const example2 = ('b' + 'a' + + '1' + 'a').toLowerCase(); // 'ba1a'
console.log(example1);
console.log(example2);


9

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

এক্সপ্রেশনটি ('b' + 'a' + + 'a' + 'a')সম্পূর্ণ স্ট্রিং লিটারেল এবং সংযোজন অপারেটরগুলির সমন্বয়ে গঠিত।

  • স্ট্রিং লিটারালস "একটি স্ট্রিং আক্ষরিক শূন্য বা আরও বেশি অক্ষর একক বা ডাবল উদ্ধৃতিতে আবদ্ধ।"
  • সংযোজন অপারেটর (+) "সংযোজন অপারেটর হয় স্ট্রিং কনটেনটেশন বা সংখ্যাসূচক সংযোজন করে।"

গৃহীত একটি অন্তর্নিহিত পদক্ষেপটি একটি স্ট্রিংয়ে ToNumber এর কল

  • ToNumber স্ট্রিং প্রকারে প্রয়োগ করা হয়েছে "স্ট্রিংসে প্রয়োগ করা ToNumber ব্যাকরণটি ইনপুট স্ট্রিংয়ের জন্য প্রয়োগ করে।

দোভাষী তার বাম এবং ডান হাতের এক্সপ্রেশনগুলির উপাদানগুলিতে ভেঙে কীভাবে এক্সপ্রেশনটিকে পার্স করবেন তার বিধি রয়েছে।


ধাপ 1: 'b' + 'a'

বাম প্রকাশ: 'b'
বাম মান: 'বি'

অপারেটর: + (এক্সপ্রেশন দিকগুলির মধ্যে একটি স্ট্রিং, সুতরাং স্ট্রিং কনটেন্টেশন)

ডান অভিব্যক্তি: 'a' ডান মান: 'এ'

ফলাফল: 'ba'


ধাপ ২: 'ba' + + 'a'

বাম প্রকাশ: 'ba'
বাম মান: 'বা'

অপারেটর: + (এক্সপ্রেশন দিকগুলির মধ্যে একটি স্ট্রিং, সুতরাং স্ট্রিং কনটেন্টেশন)

ডান অভিব্যক্তি: + 'a'(এটি 'a' অক্ষরের গণিত মানকে মূল্যায়ন করে এটি ধরে নিয়েছে যে এটি + চিহ্ন থেকে ধনাত্মক সংখ্যা - বিয়োগ চিহ্নটি এখানে একটি নেতিবাচক সংখ্যা নির্দেশ করে কাজ করবে - যার ফলশ্রুতি NAN হবে)
ডান মান: নাএন (যেহেতু অপারেটর স্ট্রিং সংমিশ্রণ, টু স্ট্রিংকে সংক্ষিপ্তকরণের সময় এই মানটিতে কল করা হয়)

ফলাফল: 'বাএনএএনএন'


ধাপ 3: 'baNaN' + 'a'

বাম প্রকাশ: 'baNaN'
বাম মান: 'baNaN'

অপারেটর: + (এক্সপ্রেশন দিকগুলির মধ্যে একটি স্ট্রিং, সুতরাং স্ট্রিং কনটেন্টেশন)

ডান অভিব্যক্তি: 'a'
ডান মান: 'এ'

ফলাফল: 'বাএনএএনএ'


এর পরে গ্রুপিংয়ের অভিব্যক্তিটি মূল্যায়ন করা হয়েছে, এবং টুলওয়ারকেস বলা হয় যা আমাদেরকে কলা দিয়ে ফেলে।


7

+ ব্যবহার করে জাভাস্ক্রিপ্টে কোনও মানকে রূপান্তর করবে!

তাই ...

+জাভাস্ক্রিপ্টের যে কোনও মান ব্যবহারের আগে প্রথমে জানতে এবং শিখতে এখানে মূল জিনিসটি সেই মানটিকে একটি সংখ্যায় রূপান্তর করবে , তবে যদি সেই মানটি রূপান্তর করতে না পারে তবে জাভাস্ক্রিপ্ট ইঞ্জিন NaN ফিরিয়ে দেবে , যার অর্থ, কোনও সংখ্যা নয় (পারে না নীচে হিসাবে একটি সংখ্যায়, সাথী!) এবং বাকী গল্পে রূপান্তরিত হবেন:

('বি' + 'এ' + + 'এ' + 'এ') কেন রয়েছে? লোয়ারকেস () 'কলা' এর ফলাফল কেন?



0

যাদু এখানে দেখুন। দ্বিতীয় প্লাস একটি অ্যানারি অপারেটর যা 'NaN' দেয়

console.log(('b' + 'a' + + 'a' + 'a').toLowerCase());
console.log(('b' + 'a' + + 'a' + 'a'));
console.log(('b' + 'a' + 'a' + 'a').toLowerCase());

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