জাভাস্ক্রিপ্ট শর্টহ্যান্ড টার্নারি অপারেটর


102

আমি জানি যে এই অপ্রয়োজনীয় টার্নারি অপারেটর সিনট্যাক্সটি ব্যবহার করার পরিবর্তে পিএইচপি 5.3 এ:

startingNum = startingNum ? startingNum : 1

... আমরা যেখানে প্রযোজ্য সেখানে আমাদের টেনারি অপারেটরগুলির জন্য একটি শর্টহ্যান্ড সিনট্যাক্স ব্যবহার করতে পারি:

startingNum = startingNum ?: 1

এবং আমি জাভাস্ক্রিপ্টে টের্নারি অপারেটর সম্পর্কে জানি:

startingNum = startingNum ? startingNum : 1

... তবে সেখানে কি শর্টহ্যান্ড আছে?

উত্তর:


175
var startingNumber = startingNumber || 1;

আপনি যা সন্ধান করছেন এরকম কিছু, যেখানে অপরিজ্ঞাত থাকলে এটি ডিফল্ট হয়?

var foo = bar || 1; // 1
var bar = 2;
foo = bar || 1;     // 2

যাইহোক, এটি অবজেক্টস সহ প্রচুর দৃশ্যের জন্য কাজ করে:

var foo = bar || {}; // secure an object is assigned when bar is absent

প্রকৃতপক্ষে, এই সকালে বাড়া। স্থির, কিন্তু লক্ষ্য করার জন্য ধন্যবাদ।
ব্র্যাড ক্রিস্টি

1
এর ||বদলে তুমি বোঝাতে ??চাও না ?
রকেট হাজমত

2
ধন্যবাদ! আপনি এটি পেরেক দিয়েছিলেন। আমি আসলে এই উদাহরণে একটি অবজেক্ট ব্যবহার করছি। :)
ওয়েব_ ডিজাইনার

8
কৌতূহলী কারও জন্য, এটি কাজ করে কারণ ||জেএসের অপারেটর সত্য বা মিথ্যা প্রত্যাবর্তন করে না, এটি প্রথম 'সত্যবাদী' মান দেয়। আপনি বলুন val0এবং val1যেমন undefined, এবং val2হয় 2, val3হয় 3। এটি প্রথম 'সত্যবাদী' মান হিসাবে val0 || val1 || val2 || val3ফিরে আসবে 2
জ্যাক টি।

2
এই প্রতিমাটি কি কোনও বিরোধী ধাঁচ নয়? আপনি যদি 0 বা খালি স্ট্রিংটি পাস করেন তবে 'ও' এক্সপ্রেশনটি এড়িয়ে যাবে এবং আপনি যেখানে 0 বা খালি স্ট্রিং চেয়েছিলেন সেখানে ডিফল্ট মানটি ব্যবহার করবে।
পল ট্রিজিনা

24

|| এটির মুখোমুখি হওয়া প্রথম সত্যবাদী মানটি ফিরিয়ে দেবে, এবং এটি সি # এর মতো কোয়েলেসিং অপারেটর হিসাবে ব্যবহার করা যেতে পারে ??

startingNum = startingNum || 1;

আমি আপনার ব্যাখ্যাটি
অন্যগুলির

12

হ্যা এখানে:

var startingNum = startingNum || 1;

সাধারণভাবে, expr1 || expr2নিম্নলিখিত উপায়ে কাজ করে ( ডকুমেন্টেশন দ্বারা উল্লিখিত ):

রিটার্নস expr1যদি এটা কাজে রূপান্তরিত হতে পারে true; অন্যথায়, ফিরে আসে expr2সুতরাং, Booleanমানগুলির সাথে ব্যবহৃত হলে , অপারেন্ডটি যদি হয় তবে ||ফিরে আসে ; যদি উভয় , আয় ।truetruefalsefalse


if a is truthyবনাম বলা কি আরও সঠিক নয় if a is evaluated to true?
জেয়ার্ডপাড়

3
@ জারেডপার: অস্পষ্টতা এড়ানোর জন্য, আমি আমার মূল বিস্তারিত ব্যাখ্যাটি মজিলা বিকাশকারী নেটওয়ার্কের সাথে প্রতিস্থাপন করেছি। এটি কম অস্পষ্ট হওয়া উচিত।
টেডেক


2
startingNum = startingNum || 1

যদি নাল দিয়ে শর্ত থাকে তবে লাইক দিন

startingNum = startingNum ? startingNum : null

তুমি ব্যবহার করতে পার '&&'

startingNum = startingNum && startingNum

মিথ্যা anything && nullনা হলে তবে anythingনালায় মূল্যায়ন করবেন না ?
পেট্রুজা 21

হ্যাঁ, যদি কিছু সত্য হয় তবে তা মূল্যায়নের মূল্যায়ন করে। যদি এর মিথ্যা হয়, মিথ্যা মানটির মূল্যায়ন করে
a2441918

1

উপরের উত্তরগুলি সঠিক। জাভাস্ক্রিপ্টে, নিম্নলিখিত বিবৃতি:

startingNum = startingNum ? otherNum : 1

হিসাবে প্রকাশ করা যেতে পারে

startingNum = otherNum || 1

আপনি যদি মানটি না মিলে মিথ্যা ফেরত চান তবে এখানে আর আচ্ছাদিত আর একটি দৃশ্য নয়। এর জন্য জাভাস্ক্রিপ্ট শর্টহ্যান্ড হ'ল:

startingNum = startingNum ? otherNum : 0

তবে তা প্রকাশ করা যেতে পারে

startingNum = startingNum && otherNum

অন্যরা আরও সাধারণীকরণের উত্তরের জন্য সেক্ষেত্রে কেবল অন্য দৃশ্যের কভার করতে চেয়েছিলেন।


এর মতো কিছুর জন্য কি শর্টহ্যান্ড আছে: x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24???
ওল্ডবয়

@ অ্যান্টনি না, কারণ innerWidth * 0.0375 > 24যে if trueঅংশটি তার থেকে পৃথক innerWidth * 0.0375। শর্টহ্যান্ড কেবল তখনই ব্যবহার করা যেতে পারে যদি expression to be evaluatedএবং এর if trueমান একই হয়। একই কারণ আপনি সংক্ষিপ্ত করতে সক্ষম হবেন না x = someBoolean ? 'Heck yea!' : 'No way!'
দেদেব

@ দেদুব ঠিক আছে, আসলে একটি "শর্টহ্যান্ড" আছে (আপনি যদি এটি ডাকেন) যা হবেMath.max(innerWidth * 0.0375, 24)
ওল্ডবয়

@ অ্যান্টনি আপনি এটিকে ডাকবেন না;) তবে Math.maxআপনার ব্যবহারের ক্ষেত্রে কোনও টার্নারি অপারেটরের চেয়ে ভাল কাজ করে।
দেদেব

1
" startingNum = startingNum ? otherNum : 1হিসাবে প্রকাশ করা যেতে পারে startingNum = otherNum || 1" ভুল। আমি সবেমাত্র এটি পরীক্ষা করেছি
oldboy

0

একটি টিনারারি তৈরি করতে:

boolean_condition ? true_result : false_result

জাভাস্ক্রিপ্টে, আপনি এটি করতে পারেন:

(boolean_condition && true_result ) || false_result;

উদাহরণ:

(true && 'green') || 'red';
=> "green"
(false && 'green') || 'red';
=> "red"

সুও x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24হয়ে যাবে (innerWidth * 0.0375 > 24 && innerWidth * 0.0375) || 24?? একটি শর্টহ্যান্ড আছে, যাতে আমাকে পুনরুত্থান করতে হবে না innerWidth * 0.0375, এটি একটি ভেরিয়েবলের জন্য নির্ধারণ করা ছাড়া অন্য ???
oldboy

1
এই ক্ষেত্রে, Math.max( innerWidth * 0.0375 , 24 )মার্জিতভাবে কাজ করবে। আরও সাধারণ ক্ষেত্রে, উদাহরণস্বরূপ '' কিছুযুক্তিযুক্তউইনউইথ 'নামে একটি বর্ণনামূলক পদ্ধতি তৈরি করা ভাল যা ভেরিয়েবল তৈরির পরিবর্তে পাঠযোগ্যতার উন্নতি করে। যদিও কিছু ক্ষেত্রে এটির পরিবর্তনশীল (সেই বর্ণনামূলক নামের) থাকা আরও পঠনযোগ্য হবে, সুতরাং ভবিষ্যতে প্রশ্ন 'কেন এটি এর দ্বারা বহুগুণ হয়?' উত্থাপিত হয় না।
xxjjnn

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