আমি জানতে চাই যে জাভাস্ক্রিপ্টের "শর্ট-সার্কিট" মূল্যায়ন সি & # তে && অপারেটরের মতো রয়েছে কিনা। যদি তা না হয় তবে আমি জানতে চাই যে এমন কোনও কর্মপদ্ধতি আছে যা গ্রহণ করার জন্য উপলব্ধি করে।
আমি জানতে চাই যে জাভাস্ক্রিপ্টের "শর্ট-সার্কিট" মূল্যায়ন সি & # তে && অপারেটরের মতো রয়েছে কিনা। যদি তা না হয় তবে আমি জানতে চাই যে এমন কোনও কর্মপদ্ধতি আছে যা গ্রহণ করার জন্য উপলব্ধি করে।
উত্তর:
হ্যাঁ, জাভাস্ক্রিপ্টের "শর্ট সার্কিট" মূল্যায়ন রয়েছে।
if (true == true || foo.foo){
// Passes, no errors because foo isn't defined.
}
if (false && foo.foo){
// Passes, no errors because foo isn't defined.
}
Short-circuit
সেই লজিক অপারেটরটির সাথে কোনও হতে পারে না । শুধু এটি চেষ্টা করুন। আমার ডেমো ব্যবহার করুন।
এই উত্তরটি কীভাবে দুর্দান্ত বিশদে যায় শর্ট সার্কিট itingজাভাস্ক্রিপ্টে সমস্ত গোটাচা এবং প্রাসঙ্গিক থিম যেমন অপারেটর অগ্রাধিকার সহ কাজ করে, আপনি যদি একটি দ্রুত সংজ্ঞা খুঁজছেন এবং শর্ট সার্কিট কীভাবে কাজ করে তা ইতিমধ্যে বুঝতে পারছেন তবে আমি অন্যান্য উত্তরগুলি পরীক্ষা করার পরামর্শ দিচ্ছি।
প্রথমে if()
ব্লকের অভ্যন্তরে আমরা যে সমস্ত আচরণের সাথে পরিচিত সেগুলি &&
পরীক্ষা করে দেখি যেখানে আমরা দুটি জিনিস কিনা তা যাচাই করতে ব্যবহার করি true
:
if (true && true) {
console.log('bar');
}
: এখন, আপনার প্রথম প্রবৃত্তি সম্ভবত বলতে হয় আহ্ হ্যাঁ, বেশ সহজ, কোড বিবৃতি উভয় যদি executes expr1
এবং expr2
যেমন মূল্যায়ন করা হয় true
'
ভাল, হ্যাঁ এবং না। আপনি প্রযুক্তিগতভাবে সঠিক, আপনি বর্ণিত আচরণটি এটাই, তবে কোডটি কীভাবে মূল্যায়ন করা হয় তা ঠিক তা নয় এবং পুরোপুরি বুঝতে আমাদের আরও গভীরভাবে আঁকতে হবে।
&&
এবং ||
ব্যাখ্যা করা হয় ?:এটি দেখার সময় "দ্য হুডের নীচে" জাভাস্ক্রিপ্ট ইঞ্জিন "। আসুন এই ব্যবহারিক উদাহরণটি বিবেচনা করুন:
function sanitise(x) {
if (isNaN(x)) {
return NaN;
}
return x;
}
let userinput = 0xFF; // as an example
const res = sanitise(userinput) && userinput + 5
console.log(res);
ঠিক আছে ফলাফল 260
.. তবে কেন? উত্তর পাওয়ার জন্য, আমাদের বুঝতে হবে শর্ট সার্কিট মূল্যায়ন কীভাবে কাজ করে।
দ্বারা MDN সংজ্ঞা
&&
মধ্যে অপারেটরexpr1 && expr2
followingly মৃত্যুদন্ড কার্যকর হয়:যদি
expr1
রূপান্তর করা যায় তবেtrue
প্রত্যাবর্তনexpr2
; অন্যথায়, ফিরে আসেexpr1
।
সুতরাং এর অর্থ হল, আমাদের ব্যবহারিক উদাহরণে const res
নিম্নলিখিত পদ্ধতিটি মূল্যায়ন করা হয়:
expr1
-sanitise(0xFF)
0xFF
250 এর জন্য একটি বৈধ হেক্সাডেসিমাল সংখ্যা, অন্যথায় আমি ফিরে আসব NaN
expr1
একটি "truthy" মান ফিরে সময় চালানো expr2
(অন্যথায় আমি বন্ধ চাই যেমন NaN
falsy হয়)userinput
সত্যবাদী (একটি সংখ্যা), তাই আমি +5
এটিতে যুক্ত করতে পারিসুতরাং এখানে আমরা অপারেটরের সাধারণ ব্যবহারের সাথে অতিরিক্ত if
ব্লক এবং আরও isNaN
চেক এড়াতে সক্ষম হয়েছি &&
।
এখন অবধি, আমাদের কমপক্ষে একটি ছবি থাকা উচিত কীভাবে শর্ট সার্কিটঅপারেটরদের কাজ। সর্বজনীন নিয়ম যায়:
(some falsy expression) && expr
মিথ্যা অভিব্যক্তি মূল্যায়ন করবে(some truthy expression) || expr
সত্যবাদী অভিব্যক্তি মূল্যায়ন করবেআরও ভাল বোঝার জন্য এখানে আরও কয়েকটি উদাহরণ দেওয়া হয়েছে:
function a() { console.log('a'); return false; }
function b() { console.log('b'); return true; }
if ( a() && b() ){
console.log('foobar');
}
//Evaluates a() as false, stops execution.
function a() { console.log('a'); return false; }
function b() { console.log('b'); return true; }
if ( a() || b() ){
console.log('foobar');
}
/* 1. Evaluates a() as false
2. So it should execute expr2, which is `b()`
3. b() returned as true, executing statement `console.log('foobar');`
*/
ভাল লাগল, আশা করছি আপনি এর ঝুলন্ত পেয়ে যাবেন! শেষ কথাটি আমাদের জানতে হবে অপারেটর অগ্রাধিকার সম্পর্কে একটি নিয়ম, তা হ'ল:
&&
অপারেটর সবসময় পূর্বে কার্যকর ||
অপারেটর।নিম্নলিখিত উদাহরণ বিবেচনা করুন:
function a() { console.log('a'); return true;}
function b() { console.log('b'); return false;}
function c() { console.log('c'); return false;}
console.log(a() || b() && c());
// returns a() and stops execution
এটি সম্ভবত কিছু হিসাবে বিভ্রান্তিকরভাবে ফিরে আসবে a()
। কারণটি বেশ সহজ, এটি আমাদের দৃষ্টি-দৃষ্টিকোণ যা আমাদের ধোকা দেওয়ার মতো, কারণ আমরা বাম থেকে ডানদিকে পড়তে অভ্যস্ত। আসুন কী console.log()
এবং কী আউট নয় এবং নিখুঁতভাবে মূল্যায়নের দিকে ফোকাস করি
true || false && false
এখন এই সম্পর্কে আপনার মাথা মোড়ানো:
আমরা বলেছিলাম যে &&
অপারেটরের প্রাধান্য রয়েছে, তাই এটি প্রথম হিসাবে মূল্যায়ন হয়। আমাদের মূল্যায়নের আরও ভাল ধারণা করতে, সংজ্ঞাটি ভাবেন
expr1 && expr2
কোথায়:
expr2
হয় false
expr1
হয় true || false
সুতরাং এটি ছিল জটিল অংশ, এখন true || false
মূল্যায়ন করা হয় (এর expr1
- বাম দিকে &&
)।
||
অপারেটর সঞ্চালনের স্টপ যদি expr1 || expr2
এ expr1
truthy যেমন মূল্যায়ণ, expr1
মৃত্যুদন্ড কার্যকর করা হয় এবং কোড এক্সিকিউশন স্টপ।প্রত্যাশিত মান true
ঠিক আছে .. বেশ অদ্ভুত নিয়ম এবং শব্দার্থবিজ্ঞানের কারণে এটি বেশ জটিল ছিল। তবে মনে রাখবেন, আপনি গণিতের মতো()
- এর সাথে সর্বদা অপারেটর প্রাধান্য থেকে রক্ষা পেতে পারেন
function a() { console.log('a'); return true;}
function b() { console.log('b'); return false;}
function c() { console.log('c'); return false;}
console.log((a() || b()) && c());
/* 1. The () escape && operator precedence
2. a() is evaluated as false, so expr2 (c()) to be executed
3. c()
*/
expr1
এবং expr2
বা condition1
বা যে কোনও বিষয়ে কথা বলবেন না , এটি কেবল বিভ্রান্তিকর। একটির জন্য সিদ্ধান্ত নিন, আপনি স্থানীয় ভেরিয়েবলগুলিও প্রবর্তন করতে পারেন, যেমন। const expr1 = true; if(expr1 && ...)
https://www.google.com/search?q=site:stackoverflow.com+%s
অনুসন্ধানগুলি গতি বাড়ানোর জন্য আমি অনুসন্ধান শর্টকাট (ক্রোম / ফায়ারফক্স) হিসাবে যুক্ত করেছি ।