জাভাস্ক্রিপ্টে নাল, অপরিজ্ঞাত বা ফাঁকা ভেরিয়েবলগুলি পরীক্ষা করার জন্য কি কোনও স্ট্যান্ডার্ড ফাংশন রয়েছে?


2257

সেখানে একটি সার্বজনীন জাভাস্ক্রিপ্ট ফাংশন যা চেকের একটি পরিবর্তনশীল যে এটা না একটি মান আর নিশ্চিত রয়েছে undefinedবা null? আমি এই কোড পেয়েছি, তবে আমি নিশ্চিত নই যে এটি সমস্ত ক্ষেত্রে কভার করে:

function isEmpty(val){
    return (val === undefined || val == null || val.length <= 0) ? true : false;
}


78
প্রতিবাদ করুন, কখনই করবেন না (truthy statement) ? true : false;। শুধু কর (truthy statement);
ডেভিড বাউকুম

5
@ জর্জজেম্পি একটি দ্বিধা নয়, যেহেতু অন্য উত্তরগুলি বিশেষত স্ট্রিং সম্পর্কে জিজ্ঞাসা করে, যেখানে এইটি ভেরিয়েবল সম্পর্কে জিজ্ঞাসা করে ।
ম্যাডব্রেকস

2
এই প্রশ্নের সঠিক কোনও উত্তর আপনি "ফাঁকা" কীভাবে সংজ্ঞায়িত করেন তার উপর সম্পূর্ণ নির্ভর করে।
ম্যাডব্রেকস

3
@ জায়ে এটি আপনার কোডটি কার্যকর করা পর্যন্ত কোনও ক্ষতি করে না। এটি মাত্রাতিরিক্ত ভার্জোজ। আপনি বলবেন না, "তুমি কি ক্ষুধার্ত সত্য?" আপনি কেবল "আপনি ক্ষুধার্ত" তাই কোডের if (hungry) …পরিবর্তে কেবল বলুন if (hungry === true) …। এই পদ্ধতিতে সমস্ত কোডিংয়ের মতো, এটি কেবল স্বাদের বিষয়। ওপি কর্তৃক প্রদত্ত উদাহরণের সাথে আরও সুনির্দিষ্ট তিনি আরও মৌখিকভাবে বলে চলেছেন, "যদি এটি সত্য হয়, তবে সত্য, তবে মিথ্যা না হলে" তবে এটি যদি সত্য হয় তবে এটি ইতিমধ্যে সত্য। এবং, যদি এটি মিথ্যা হয় তবে এটি ইতিমধ্যে মিথ্যা। এটি "আপনি যদি ক্ষুধার্ত হন তবে আপনি হন এবং যদি না হন তবে আপনি নন" অনুরূপ।
ডেভিড বাউকুম

উত্তর:


4375

ভেরিয়েবলের কোনও truthyমান আছে কি না তা আপনি কেবল পরীক্ষা করতে পারেন । এর মানে

if( value ) {
}

trueযদি না হয় তবে valueতা মূল্যায়ন করবে :

  • খালি
  • অনির্দিষ্ট
  • NaN
  • খালি স্ট্রিং ("")
  • 0
  • মিথ্যা

উপরের তালিকাটি falsyECMA- / জাভাস্ক্রিপ্টে সমস্ত সম্ভাব্য মান উপস্থাপন করে। এটা খুঁজুন স্পেসিফিকেশনToBooleanঅধ্যায়।

তদ্ব্যতীত, যদি আপনি জানেন না যে কোনও চলক বিদ্যমান কিনা (তার অর্থ, এটি যদি ঘোষিত হয়েছিল ) আপনার typeofঅপারেটরের সাথে চেক করা উচিত । এই ক্ষেত্রে

if( typeof foo !== 'undefined' ) {
    // foo could get resolved and it's defined
}

আপনি যদি নিশ্চিত হতে পারেন যে কোনও ভেরিয়েবল কমপক্ষে ঘোষিত truthyহয়েছে তবে আপনার উপরে সরাসরি দেখানো মত এর মান আছে কিনা তা সরাসরি পরীক্ষা করা উচিত ।

আরও পড়ুন: http://typeofnan.blogspot.com/2011/01/typeof-is-fast.html


110
মানটি যদি একটি মিথ্যা বুলিয়ান হয় যা উদ্দেশ্য ছিল। কখনও কখনও আপনি মান না থাকলে একটি ডিফল্ট মান দিতে চান, যা মিথ্যা
বুলেটিয়ান

99
@ ট্রুম্যান 1: এই জাতীয় ক্ষেত্রে (যেখানে আপনার যুক্তি বৈধকরণের আদেশ দেয়) আপনাকে যেতে হবে if( value || value === false )। সমস্ত মিথ্যা মানগুলির জন্য একই , আমাদের সেগুলি স্পষ্টভাবে বৈধ করতে হবে।
jAndy

28
মানটি একটি অ্যারে ব্যতীত। এর ব্যাখ্যাটি truthyবিভ্রান্তিকর হতে পারে। সেক্ষেত্রে আমাদের value.length != 0খালি খালি অ্যারে পরীক্ষা করা উচিত ।
ব্যবহারকারী 21

12
শুধু যোগ করার জন্য যে আপনি যদি মনে করেন আপনি চান ifকনস্ট্রাক্ট চিহ্নগুলি সিন্টেক্সের খুবই ভারী হয়, তাহলে আপনি তাই মত তিন অপারেটর, ব্যবহার করতে পারে: var result = undefined ? "truthy" : "falsy"। অথবা আপনি যদি শুধুমাত্র একটি বুলিয়ান মান নিগৃহীত করতে চাই, ব্যবহার !!অপারেটর, যেমন !!1 // true, !!null // false
কেএফএল

7
এছাড়াও মনে রাখবেন যে এটি স্ট্রিংগুলির জন্য যাচাই করবে না যার মধ্যে কেবল শ্বেতস্পেসের অক্ষর রয়েছে।
ক্রিস্টোফ রাউসি

220

মানটি অপরিশোধিত বা নাল কিনা তা পরীক্ষা করার জন্য ভার্বোজ পদ্ধতিটি:

return value === undefined || value === null;

আপনি ==অপারেটরটিও ব্যবহার করতে পারেন তবে এটি একটি সমস্ত নিয়ম জানতে আশা করে :

return value == null; // also returns true if value is undefined

33
শুধুমাত্র জন্য চেক করা হচ্ছে nullবা undefinedতাই মত করা সম্ভব: if (value == null)। মনে করবেন ==অপারেটর coerces পারে। আপনি যদি এটির মতো চেক করেন তবে আপনি if (value === null || value === undefined)কীভাবে জাভাস্ক্রিপ্ট coerces জানেন / ভুলে গেছেন। webreflection.blogspot.nl/2010/10/…
ক্রিশ্চিয়ান ওয়েস্টারবিক

32
@ ক্রিশ্চিয়ান ওয়েস্টারবীক: আপনার পয়েন্ট যা arg == nullএকই ফলাফল দেয় arg === undefined || arg === null। যাইহোক, আমি পরবর্তী উদাহরণটি আরও পাঠযোগ্য বলে বিবেচনা করি।
সালমান এ

10
arg == nullআমার অভিজ্ঞতায় বেশ সাধারণ common
ব্রায়ান ডাউনিং

8
return value === (void 0)পরীক্ষার চেয়ে এটির চেয়ে নিরাপদ undefinedযার বিরুদ্ধে সুযোগের ক্ষেত্রে বৈধ পরিবর্তনশীলও হতে পারে, দুঃখের বিষয়।
x0n

4
@ শার্কি একটি পরিবর্তনশীল যা অপরিজ্ঞাত
Christiaan

79
function isEmpty(value){
  return (value == null || value.length === 0);
}

এটি সত্য ফিরে আসবে

undefined  // Because undefined == null

null

[]

""

এবং শূন্য আর্গুমেন্ট ফাংশন যেহেতু কোনও ফাংশন এর lengthঘোষিত প্যারামিটারগুলির সংখ্যা।

পরবর্তী বিভাগটি বাতিল করতে, আপনি কেবল ফাঁকা স্ট্রিংগুলি পরীক্ষা করতে চাইতে পারেন

function isEmpty(value){
  return (value == null || value === '');
}

7
undefined == nullতবেundefined !== null
ইয়ান বয়ড

2
@ আইয়ানবয়েড এর কারণ আপনি == থেকে === তুলনা করছেন। এর অর্থ অনির্দিষ্ট == নাল (সত্য) অপরিজ্ঞাত! = নাল (মিথ্যা) অপরিজ্ঞাত === নাল (মিথ্যা) অপরিজ্ঞাত! == নাল (সত্য) সাহায্যকারী হতে এবং মানুষকে ধাক্কা দেওয়ার জন্য আরও কিছু তথ্য দেওয়া আরও ভাল give সঠিক দিকে। পার্থক্য Moz ডক developer.mozilla.org/en-US/docs/Web/JavaScript/...
কোরি ইয়াং

43

এটি সবচেয়ে নিরাপদ চেক এবং আমি এখানে এটি ঠিক এখানে পোস্ট করতে দেখিনি:

if (typeof value !== 'undefined' && value) {
    //deal with value'
};

এটি এমন কেসগুলিকে কভার করবে যেখানে মান কখনই সংজ্ঞায়িত হয়নি এবং এর মধ্যে কোনওটি:

  • খালি
  • অপরিজ্ঞাত (অপরিজ্ঞাতকৃত মানটি কখনই সংজ্ঞায়িত হয়নি এমন প্যারামিটারের সমান নয়)
  • 0
  • "" (খালি স্ট্রিং)
  • মিথ্যা
  • NaN

সম্পাদিত: কঠোর সমতাতে পরিবর্তিত হয়েছে (! ==) কারণ এটি এখনকার আদর্শ;)


10
আমি downvote না কিন্তু কঠোর সমতা তুলনা শুভেচ্ছা সঙ্গে, সাধারণ নিয়ম যে, যদি না আপনি নেই প্রয়োজন অন্তর্নিহিত টাইপ রূপান্তর চেয়ে কঠোর তুলনা ব্যবহার করা উচিত।
জে.স্টেভ

2
আপনার মন্তব্যের জন্য ধন্যবাদ স্টিভ। যে সাধারণ নিয়ম ঠিক ঠিক। আমি কেবল পিপিএল থেকে বুঝতে পারি যে তারা কেন এক বা অন্য ব্যবহার করে understand আপনি যেভাবে পিপিএল দেখছেন সেটিকে "সর্বদা সর্বদা কঠোরভাবে ব্যবহার করুন" - সম্পর্কে প্রচার করতে পেরে আনন্দিত হবে যেমন জাভাস্ক্রিপ্টের মধ্যে এটি সবচেয়ে গুরুত্বপূর্ণ বিষয়। আমি যেমন (ভাল! == নাল) এর মতো অনেকগুলি কেস দেখেছি যা অবশ্যই অবাঞ্ছিত ফলাফলের দিকে নিয়ে যায়। এটি সন্দেহজনক যে বলা উচিত - কঠোর ব্যবহার করুন, তবে সন্দেহ না করাই ভাল।
গুয়া

6
আমি মনে করি যে এখানে বিন্দুটি হ'ল আমরা আশা করি typeofঅপারেটর একটি স্ট্রিং ফিরে আসবে তাই কঠোর সাম্যতা চেক ব্যবহার করে প্রযুক্তিগতভাবে আরও নির্ভুল, আরও সুনির্দিষ্ট এবং দ্রুত হয়। সুতরাং সত্যই, looseিলে comparisonালা তুলনাটি ব্যবহার করার কোনও কারণ নেই, অন্য উপায় নয় way এছাড়াও val !== nullঅনেক ক্ষেত্রে পুরোপুরি বৈধ - আমি এটি সর্বদা করি। আমি আপনার অ-সঙ্গতিপূর্ণ যুক্তির সাথে একমত, তবে আমি মনে করি এটি এটি করার জন্য এটি একটি দৃষ্টান্ত। আপনাকে ট্রল করার চেষ্টা করছে না
ব্রায়ান ডাউনিং

ব্রায়ান আপনার মন্তব্যের জন্য থ্যাঙ্কস, আপনি ভাল ব্যবহার করেন! == নাল কারণ আপনি জানেন যে আপনি কী করছেন। একটি শিক্ষানবিস যখন ভ্যালস ফালসি হয় তখন তার ফ্যালব্যাক পেতে চাইবে। তবে, ভাল কখনই নাল হবে না এটি অপরিজ্ঞাত হবে। কেবলমাত্র যদি তিনি "সর্বদা কঠোরভাবে ব্যবহার করুন" এই পরামর্শটি না মানেন তবে তার কম বাগ থাকবে। আমি দেখেছি প্রযোজনা কোডে এটি ঘটে। টাইপফ সর্বদা একটি স্ট্রিং ফেরত দেয় এবং গতির পার্থক্য অপ্রয়োজনীয় হবে। সুতরাং, উপরের ক্ষেত্রে কঠোর ব্যবহারের একমাত্র যুক্তি হ'ল ধারাবাহিকতা। আমি বলেছি "কঠোর সাম্যের দরকার নেই"। এর অর্থ এই নয় যে আপনি চাইলে বা এটি আপনার কোডটিকে আরও সুসংগত করে তুলতে পারলে আপনি পারবেন না।
গুয়া

28

আপনি নিম্নলিখিত ফাংশন দরকারী খুঁজে পেতে পারেন:

function typeOf(obj) {
  return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}

অথবা ES7 এ (আরও উন্নতি হলে মন্তব্য করুন)

function typeOf(obj) {
  const { toString } = Object.prototype;
  const stringified = obj::toString();
  const type = stringified.split(' ')[1].slice(0, -1);

  return type.toLowerCase();
}

ফলাফল:

typeOf(); //undefined
typeOf(null); //null
typeOf(NaN); //number
typeOf(5); //number
typeOf({}); //object
typeOf([]); //array
typeOf(''); //string
typeOf(function () {}); //function
typeOf(/a/) //regexp
typeOf(new Date()) //date
typeOf(new WeakMap()) //weakmap
typeOf(new Map()) //map

"নোট করুন যে বাইন্ড অপারেটর (: :) ES2016 (ES7) এর অংশ নয় বা ECMAScript স্ট্যান্ডার্ডের কোনও পরবর্তী সংস্করণ নয়। এটি বর্তমানে ভাষার সাথে পরিচয় করানোর জন্য পর্যায়ে 0 (স্ট্রোম্যান) প্রস্তাব proposal" - সাইমন কেজেলবার্গ লেখক রাজকীয় আরোহণ পাওয়ার জন্য এই সুন্দর প্রস্তাবটির জন্য তার সমর্থন যুক্ত করতে চান।


'1 regexp ' ,' অ্যারে 'এবং' ফাংশন ' টাইপটির অবজেক্টটি জানার জন্য এটি সহায়ক
যশ

@ ভিক্স, ES7 সংস্করণটি আরও ভাল কেন?
গলিজার

এটি নয়, একই কার্যকারিতাটি ব্যবহার করে যেমন: ডিস্ট্রাকচারিং অ্যাসাইনমেন্ট, বাইন্ড অপারেটর প্রকাশের আরও পাঠযোগ্য উপায় নিয়ে পরীক্ষা-নিরীক্ষা করছিল।
ভিক্স

2
নোট করুন যে বাইন্ড অপারেটর ( ::) ES2016 (ES7) এর অংশ নয় বা ECMAScript স্ট্যান্ডার্ডের কোনও পরবর্তী সংস্করণ নয়। এটি বর্তমানে একটি পর্যায়ে 0 (স্ট্রোম্যান) ভাষার সাথে পরিচয় করানোর প্রস্তাব।
সাইমন কেজেলবার্গ

25

সেরা রেটিং সহ প্রথম উত্তরটি ভুল। মানটি যদি অপরিজ্ঞাত হয় তবে এটি আধুনিক ব্রাউজারগুলিতে একটি ব্যতিক্রম ছুঁড়ে দেবে। আপনাকে ব্যবহার করতে হবে:

if (typeof(value) !== "undefined" && value)

অথবা

if (typeof value  !== "undefined" && value)

3
ee ... আমার মনে হয় এটি ভুল হিসাবে মনে হচ্ছে (মান) যথেষ্ট (খালি জিনিস / অ্যারে ব্যতীত)। মানটি যদি 'অপরিজ্ঞাত' হয় তবে 'যদি' কনফিশনটি পাস না হয়।
ওসকার জিজুরা

3
এটি ভেরিয়েবলগুলি সংশ্লেষ করে যা সংজ্ঞায়িত হয় না (যা মূল্যায়নের উপর একটি রেফারেন্সর ফেলে দেয়), যা undefinedমান সহ ভেরিয়েবলের চেয়ে পৃথক ।
কান্টাস 94 ভারী

2
আমি এখানেও একই ত্রুটি পেয়েছি। যদি (এক্স), যদি (! এক্স), ((এক্স)) এক্স অপরিজ্ঞাপিত থাকে তবে সমস্ত ত্রুটি নিক্ষেপ করবে।
shaosh

if(value === 0) gameOver(); ;)
ম্যাডব্রেক্স

এই উত্তরটিও ভুল কারণ এটি valueশূন্য হলে মিথ্যা প্রত্যাবর্তন করে , যা অপ্টটি সন্ধান করে না
ম্যাডব্রেকস

17

এই শর্তটি পরীক্ষা করুন

if (!!foo) {
    //foo is defined
}

আপনার যা দরকার তা হল।


আমি ধরে নিই যে এটি কেবল একটি স্নিপেট। তবে ifইতিমধ্যে একটি মিথ্যা চেক করেছে, যা এটি কেবল বুলিয়ান রূপান্তরিত করে। এটি কি এমন কোনও পরিস্থিতি if(foo)ধরা দেয় যা সাধারণভাবে ধরা দেয় না?
দান ভ্যান হুলস্ট

1
যখন আপনি কিছু ইনলাইন প্রয়োজন, উদাহরণস্বরূপ আমি অ্যাট্রিবিউট (সক্রিয় বলা হয়) প্রতিক্রিয়া প্রয়োজন জন্য নির্ভুল সত্যি যে যখন একটি স্ট্রিং খালি না থাকে - একটি যদি বিবৃতিতে Overkill হবে তাই আমি ঠিক ব্যবহার করতে পারেনactive={!!foo}
বেন Kolya Mansley

16

! জন্য চেক খালি স্ট্রিং ( ""), নাল, undefined মিথ্যা এবং নম্বর 0 এবং NaN। বলুন, যদি কোনও স্ট্রিং ফাঁকা থাকে var name = ""তবে console.log(!name)ফিরে আসে true

function isEmpty(val){
  return !val;
}

এই ফাংশন সত্য ফিরে আসবে যদি Val হয় খালি, নাল, অনির্দিষ্ট, মিথ্যা, সংখ্যা 0 বা NaN

অথবা

আপনার সমস্যা ডোমেন অনুযায়ী আপনি ঠিক মত !valবা ব্যবহার করতে পারেন !!val


ভেরিয়েবলটি খালি থাকলে এটি সত্যই বলে না, যেহেতু মিথ্যা এবং 0 টি কার্যকর মান হতে পারে এবং খালি মান গঠন করে না। ইস্পটি ফাংশন থাকার মান হ'ল খালি প্রত্যাবর্তন সত্য বলে নিশ্চিত হওয়া মানগুলি নিশ্চিত করা। আমার মতে নাল, অপরিজ্ঞাত, NaN এবং একটি খালি স্ট্রিং হ'ল মানগুলি যা অর্থকে খালি মনে করে।
কোরি ইয়ং

9
isEmpty(val)আপনি শুধু করতে পারলে কেন ব্যবহার করবেন !val?
অ্যালেন লিন্যাটোক

এটা আপনার উপরে। আপনি এটি পঠনযোগ্যতা বাড়াতে ব্যবহার করতে পারেন। অন্যথায় যদি আপনি ভাবেন যে দলটি আপনি কাজ করেন তারা আরও অগ্রিম কোডার, তবে আপনি কেবলমাত্র !valবা !!valআপনার সমস্যার ডোমেন অনুযায়ী ব্যবহার করতে পারেন ।
আরিফ

15

আমি একটি সমাধান অনেক পছন্দ:

আসুন নির্ধারণ করি যে একটি ফাঁকা পরিবর্তনশীল null, বা undefined, বা এর দৈর্ঘ্য রয়েছে, এটি শূন্য, বা এটি কোনও বস্তু থাকলে এর কী নেই:

function isEmpty (value) {
  return (
    // null or undefined
    (value == null) ||

    // has length and it's zero
    (value.hasOwnProperty('length') && value.length === 0) ||

    // is an Object and has no keys
    (value.constructor === Object && Object.keys(value).length === 0)
  )
}

রিটার্নস:

  • সত্য: undefined , null, "", [],{}
  • মিথ্যা: true , false, 1, 0, -1, "foo", [1, 2, 3],{ foo: 1 }

14

আপনি এটি কিছুটা অতিরিক্ত করছেন। কোনও ভেরিয়েবলের কোনও মান দেওয়া হয় না তা পরীক্ষা করতে আপনাকে কেবল অপরিজ্ঞাত এবং নাল বিরুদ্ধে পরীক্ষা করতে হবে।

function isEmpty(value){
    return (typeof value === "undefined" || value === null);
}

এটি ধরে নেওয়া হচ্ছে 0, ""এবং অবজেক্টস (এমনকি খালি বস্তু এবং অ্যারে) বৈধ "মান"।


10

আপনি যদি সরল জাভাস্ক্রিপ্ট পছন্দ করেন তবে এটি ব্যবহার করে দেখুন:

  /**
   * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
   * length of `0` and objects with no own enumerable properties are considered
   * "empty".
   *
   * @static
   * @memberOf _
   * @category Objects
   * @param {Array|Object|string} value The value to inspect.
   * @returns {boolean} Returns `true` if the `value` is empty, else `false`.
   * @example
   *
   * _.isEmpty([1, 2, 3]);
   * // => false
   *
   * _.isEmpty([]);
   * // => true
   *
   * _.isEmpty({});
   * // => true
   *
   * _.isEmpty('');
   * // => true
   */

function isEmpty(value) {
    if (!value) {
      return true;
    }
    if (isArray(value) || isString(value)) {
      return !value.length;
    }
    for (var key in value) {
      if (hasOwnProperty.call(value, key)) {
        return false;
      }
    }
    return true;
  }

অন্যথায়, আপনি যদি ইতিমধ্যে আন্ডারস্কোর বা লোডাশ ব্যবহার করছেন তবে চেষ্টা করুন:

_.isEmpty(value)

3
আপনার কোড চেষ্টা করেছেন। কনসোলে আমি একটি ত্রুটি বার্তা পেয়েছি যা বলে যে: "আনকচড রেফারেন্স ত্রুটি: isArray () সংজ্ঞায়িত করা হয়নি"। অন্যথায়, যদি এটি কাজ করে তবে দুর্দান্ত হবে।
ক্রম্প্রোগদেব

11
কমপক্ষে লোডাশের ক্ষেত্রে, _.isNilআপনি যে ফাংশনটি সন্ধান করছেন তা কি নয় _.isEmptyএই নিল ডকুমেন্টেশন , ismpty ডকুমেন্টেশন
স্নিস্টর

মানটি বুলিয়ান এবং মানটি সত্য হলে এটি ব্যর্থ হবে।
কল্যাণবাইক

3
সরল জাভাস্ক্রিপ্টের নেই isArrayবা এর isStringউপর ফাংশন রয়েছে window
GFoley83

@ জিএফলে ৩৩ - আপনি আমাকে ধরেছেন! আমার উইন্ডোজ ব্যবহার না করার জন্য আমার কারণ রয়েছে। আমি প্রকৃতপক্ষে যে অধ্যায়ে সফটওয়্যার ভাষার ইতিহাস এবং অগ্রগতি সম্পর্কে আলোচনা করেছি সেই বিষয়টিকে আমি আচ্ছাদন করি। আরও প্রাসঙ্গিক তথ্য সম্ভবত আমার বই, ফাংশনাল প্রোগ্রামিং ইন গোয়ে গ্রন্থে মোনাডিক ত্রুটি হ্যান্ডলিংয়ে প্রদর্শিত আলোচনা / কোড হবে। চিয়ার্স!
l3x

9

এখানে আমার - মানটি শূন্য, অপরিজ্ঞাতকৃত ইত্যাদি বা ফাঁকা (যদি কেবল ফাঁকা জায়গা থাকে) মান সত্য হয়:

function stringIsEmpty(value) {

    return value ? value.trim().length == 0 : true;

}

1
আমি এখানে বেশ কয়েকটি পদ্ধতিতে একটি পরীক্ষা করেছি। অপরিশোধিত জন্য একটি চেক সঙ্গে, আপনার ফাংশন দুর্দান্ত কাজ করে। সুতরাং আমি যদি (টাইপফুল মান! == 'অপরিজ্ঞাত' &&! ইস্পেটি (মান)) ব্যবহার করি বা আপনি যদি খালি পরীক্ষা করতে চান তবে আপনি যদি (টাইপফ মান === 'অপরিবর্তিত' || ইসেম্পটি 2 (মান) ব্যবহার করতে পারেন তবে )। এটি নালার জন্য কাজ করবে; অনির্ধারিত; 0; ""; ""; মিথ্যা
যৌক্তিক

6
return val || 'Handle empty variable'

এটি বেশ কয়েকটি জায়গায় হ্যান্ডেল করার সত্যিই দুর্দান্ত এবং পরিষ্কার উপায়, ভেরিয়েবলগুলি বরাদ্দ করতেও ব্যবহার করা যেতে পারে

const res = val || 'default value'

স্থান অনেক কিন্তু যখন ডিফল্ট trueএবং আপনি সরবরাহ বা ফিরে যাওয়ার চেষ্টা করছেন valএর false
মলম্বি

@ মলম্বি এটি একটি খুব নির্দিষ্ট প্রান্তের কেস তবে এটি সহজেই পরিচালনা করা হয়const res = falsyValue ? true : falsyValue
কিউবক্স

5

যদি ভেরিয়েবলটি ঘোষণা না করা হয় তবে আপনি কোনও ফাংশন ব্যবহার করে অপরিজ্ঞাত জন্য পরীক্ষা করতে পারবেন না কারণ আপনি একটি ত্রুটি পাবেন।

if (foo) {}
function (bar) {}(foo)

Foo ঘোষণা না করা হলে উভয়ই একটি ত্রুটি তৈরি করবে।

কোনও ভেরিয়েবল ঘোষিত হয়েছে কিনা তা পরীক্ষা করতে চাইলে আপনি ব্যবহার করতে পারেন

typeof foo != "undefined"

আপনি যদি foo ঘোষণা করা হয়েছে কিনা তা পরীক্ষা করতে চান এবং এর একটি মান রয়েছে যা আপনি ব্যবহার করতে পারেন

if (typeof foo != "undefined" && foo) {
    //code here
}

5

ডিফল্ট মানটি পরীক্ষা করতে

function typeOfVar (obj) {
      return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}
function isVariableHaveDefaltVal(variable) {
    if ( typeof(variable) === 'string' ) {  // number, boolean, string, object 
        console.log(' Any data Between single/double Quotes is treated as String ');        
        return (variable.trim().length === 0) ? true : false;
    }else if ( typeof(variable) === 'boolean' ) {
      console.log('boolean value with default value \'false\'');
        return (variable === false) ? true : false;
    }else if ( typeof(variable) === 'undefined' ) {
        console.log('EX: var a; variable is created, but has the default value of undefined.'); 
        return true;
    }else if ( typeof(variable) === 'number' ) { 
        console.log('number : '+variable);
        return (variable === 0 ) ? true : false;
    }else if ( typeof(variable) === 'object' ) {
   //   -----Object-----
        if (typeOfVar(variable) === 'array' && variable.length === 0) {
            console.log('\t Object Array with length = ' + [].length); // Object.keys(variable)
            return true;
        }else if (typeOfVar(variable) === 'string' && variable.length === 0 ) {
            console.log('\t Object String with length = ' + variable.length);
            return true;
        }else if (typeOfVar(variable) === 'boolean' ) {
            console.log('\t Object Boolean = ' + variable);
            return (variable === false) ? true : false;
        }else if (typeOfVar(variable) === 'number' ) {
            console.log('\t Object Number = ' + variable);
            return (variable === 0 ) ? true : false;
        }else if (typeOfVar(variable) === 'regexp' && variable.source.trim().length === 0 ) {
       console.log('\t Object Regular Expression : ');
        return true;
        }else if (variable === null) {
       console.log('\t Object null value');
        return true;
        }
    }
    return false;
}
var str = "A Basket For Every Occasion";
str = str.replace(/\s/g, "-");
//The "g" flag in the regex will cause all spaces to get replaced.

ফলাফল চেক করুন:

isVariableHaveDefaltVal(' '); // string          
isVariableHaveDefaltVal(false); // boolean       
var a;           
isVariableHaveDefaltVal(a);               
isVariableHaveDefaltVal(0); // number             
isVariableHaveDefaltVal(parseInt('')); // NAN isNAN(' '); - true         
isVariableHaveDefaltVal(null);              
isVariableHaveDefaltVal([]);               
isVariableHaveDefaltVal(/ /);              
isVariableHaveDefaltVal(new Object(''));               
isVariableHaveDefaltVal(new Object(false));            
isVariableHaveDefaltVal(new Object(0)); 
typeOfVar( function() {} );

কোন ধরণের অবজেক্টটি পরীক্ষা করতে আমি @ ভিক্স ফাংশন () ব্যবহার করেছি।

ইনস্ট্যানসফ ব্যবহার করে «

var prototypes_or_Literals = function (obj) {
    switch (typeof(obj)) {
        // object prototypes
        case 'object':
            if (obj instanceof Array)
                return '[object Array]';
            else if (obj instanceof Date)
                return '[object Date]';
            else if (obj instanceof RegExp)
                return '[object regexp]';
            else if (obj instanceof String)
                return '[object String]';
            else if (obj instanceof Number)
                return '[object Number]';

            else
                return 'object';
        // object literals
        default:
            return typeof(obj);
    }   
};
output test «
prototypes_or_Literals( '' ) // "string"
prototypes_or_Literals( new String('') ) // "[object String]"
Object.prototype.toString.call("foo bar") //"[object String]"        

তুলনা অপারেটর চেক == [ডেটা]। === [তথ্য, অবজেক্টের ধরণ] জেএস নম্বর সর্বদা আন্তর্জাতিক আইইইই 754 মান অনুসরণ করে ডাবল নির্ভুলতা ভাসমান পয়েন্ট সংখ্যা হিসাবে সঞ্চিত থাকে। // Number Type [int, float literals ] var int = 77; var float = 77.7; console.log( int.toFixed(10) + '\t' + float.toFixed(10) ); // Object Type var number = new Number( 77 ); if( int != float ) console.log('Data Not Equal'); if( int == number && int !== number ) console.log('Data is Equal & Types vary');
যশ

5
function isEmpty(obj) {
    if (typeof obj == 'number') return false;
    else if (typeof obj == 'string') return obj.length == 0;
    else if (Array.isArray(obj)) return obj.length == 0;
    else if (typeof obj == 'object') return obj == null || Object.keys(obj).length == 0;
    else if (typeof obj == 'boolean') return false;
    else return !obj;
}

ES6 এ সাদা স্থানের স্ট্রিংগুলি পরিচালনা করতে ট্রিম সহ:

const isEmpty = value => {
    if (typeof value === 'number') return false
    else if (typeof value === 'string') return value.trim().length === 0
    else if (Array.isArray(value)) return value.length === 0
    else if (typeof value === 'object') return value == null || Object.keys(value).length === 0
    else if (typeof value === 'boolean') return false
    else return !value
}

1
দুর্দান্ত ফাংশন, আপনাকে ধন্যবাদ! প্রতিটি ধরণের মান হ্যান্ডেল করে - অন্যান্য সমস্ত সমাধানে সংখ্যাগুলি বাকী থাকে!
ফ্যাবিয়ান ভন এলার্টস

1
@ ফ্যাবিভনএলার্টস দয়া করে অন্য কারও উত্তরে অতিরিক্ত কোড সম্পাদনা করার চেষ্টা করবেন না। এটিকে নিজের উত্তর হিসাবে, উত্তরের মত একটি মন্তব্য হিসাবে পোস্ট করুন বা একটি মন্তব্যে অনুরোধ করুন যে তারা উত্তরটি নিজেরাই আপডেট করে।
টাইলারহহ

5

এটি দরকারী হতে পারে।

অ্যারেতে থাকা সমস্ত মানগুলি আপনি কী (নাল, অপরিজ্ঞাত বা অন্য কোনও জিনিস) হতে চান তা উপস্থাপন করে এবং আপনি এতে কী চান তা অনুসন্ধান করুন।

var variablesWhatILookFor = [null, undefined, ''];
variablesWhatILookFor.indexOf(document.DocumentNumberLabel) > -1

2
আপনি দয়া করে ব্যাখ্যা করতে পারেন সেখানে কী চলছে
জোশকিসব

অ্যারেতে কিছু ভেরিয়েবল রয়েছে যা আপনি খালি বলে ধরে নিয়েছেন।
ddagsan

@ জোশকিসব অ্যারেতে সমস্ত মান আপনি যা চান তা উপস্থাপন করে (নাল, অপরিজ্ঞাত বা অন্য কোনও জিনিস) এবং আপনি এতে কী চান তা অনুসন্ধান করুন search
ddagsan

1
@ ডিডগসন যদিও জোশকিসব আপনার উত্তরটির প্রশংসা করতে পারে, আপনার মন্তব্যে না থেকে উত্তরটি নিজের উত্তর দেওয়া উচিত
নিক

4

যদি আপনি ব্যবহার করে থাকেন TypeScriptএবং "মানগুলি সেগুলির জন্য হয় false" তার জন্য অ্যাকাউন্ট করতে না চান তবে এটি আপনার জন্য সমাধান:

প্রথম: import { isNullOrUndefined } from 'util';

তারপর: isNullOrUndefined(this.yourVariableName)

দয়া করে নোট করুন: নীচে উল্লিখিত হিসাবে এটি এখন অবচয় করা হয়েছে, value === undefined || value === nullপরিবর্তে ব্যবহার করুন। সুত্র


2
আমি ভেবেছিলাম এটি দুর্দান্ত ছিল তাই আমি প্রাথমিকভাবে উদ্বিগ্ন, কিন্তু এটি একটি নোড.জেএস জিনিস যা অবমূল্যায়ন করা হয়েছে। টাইপ সংজ্ঞা ফাইল বলে:/** @deprecated since v4.0.0 - use "value === null || value === undefined" instead. */
atomictom

@atomictom আমি এটি একটি typescriptজিনিস মনে করেছি । আপনি কি দয়া করে এর ডকুমেন্টেশনের লিঙ্কটি সরবরাহ করতে পারেন?
ব্ল্যাকবিয়ার্ড

এখানে: nodejs.org/api/util.html#util_util_isnullorund परिभाषित_বজেক্ট । এছাড়াও: "আমি এই ছিল শান্ত তাই আমি প্রথমে upvoted " যে পড়া উচিত :)
atomictom

কেন এই জাতীয় উপকারী সাধারণ জিনিসটিকে অবমূল্যায়ন করবে? geeeeees।
টিকটক

3

ভাবলেশহীনতা

আমি কোনও ফাংশন সংজ্ঞায়িত বা ব্যবহার করার চেষ্টা করার পরামর্শ দিচ্ছি না যা পুরো পৃথিবীর কোনও মান খালি কিনা তা গণনা করে। "খালি" থাকার অর্থ কী? যদি আমি আছে let human = { name: 'bob', stomach: 'empty' }, should isEmpty(human)আসতে true? যদি আমি আছে let reg = new RegExp('');, should isEmpty(reg)আসতে true? কি সম্পর্কে isEmpty([ null, null, null, null ])- এই তালিকায় কেবল শূন্যতা রয়েছে, তাই তালিকাটি নিজেই খালি? আমি এখানে জাভাস্ক্রিপ্টে "শূন্যতা" (একটি ইচ্ছাকৃত অস্পষ্ট শব্দ, প্রাক-বিদ্যমান সংস্থাগুলি এড়াতে) সম্পর্কিত কিছু নোট এখানে রেখে দিতে চাই - এবং আমি যুক্তি দিতে চাই যে জাভাস্ক্রিপ্টের মানগুলিতে "শূন্যতা" কখনই উদারতার সাথে মোকাবেলা করা উচিত নয়।


Truthiness / Falsiness

মূল্যবোধের "শূন্যতা" কীভাবে নির্ধারণ করা যায় তার সিদ্ধান্ত নেওয়ার জন্য, আমাদের মূল্যবোধগুলি "সত্যবাদী" বা "মিথ্যা" কিনা তার অন্তর্নিহিত জাভাস্ক্রিপ্টের অন্তর্নিহিত সংস্থান প্রয়োজন। স্বাভাবিকভাবেই, nullএবং undefinedউভয়ই "মিথ্যা"। স্বভাবতই কম, সংখ্যাটি 0(এবং অন্য কোনও সংখ্যা ছাড়া NaN) এছাড়াও "মিথ্যা"। ''স্বল্পতম প্রাকৃতিক: মিথ্যা, তবে []এবং {}(এবং new Set(), এবং new Map()) সত্যবাদী - যদিও এগুলি সমস্তই সমান শূন্য বলে মনে হচ্ছে!


নাল বনাম অপরিজ্ঞাত

nullবনাম সম্পর্কিতও কিছু আলোচনা রয়েছে undefined- আমাদের প্রোগ্রামগুলিতে শূন্যতা প্রকাশ করার জন্য আমাদের কি সত্যই উভয়ের প্রয়োজন? আমি ব্যক্তিগতভাবে কখনই আমার কোডটিতে ইউ, এন, ডি, ই, এফ, আই, এন, ই, ডি বর্ণগুলি উপস্থিত থাকতে পারি। আমি সর্বদা null"শূন্যতা" বোঝাতে ব্যবহার করি । আবার, যদিও আমাদের জাভাস্ক্রিপ্টের সহজাত ধারণাটি কীভাবে nullএবং undefinedপৃথকভাবে সমন্বিত করতে হবে:

  • অস্তিত্বহীন সম্পত্তিটি অ্যাক্সেস করার চেষ্টা করছে undefined
  • সেই প্যারামিটারের কোনও ফাংশনের ফলাফলকে কল করার সময় একটি প্যারামিটার ছাড় দেওয়া undefined:

let f = a => a;
console.log(f('hi'));
console.log(f());

  • ডিফল্ট মানগুলির সাথে পরামিতিগুলি কেবল তখনই দেওয়া হয় যখন দেওয়া হয় undefinedনা null:

let f = (v='hello') => v;
console.log(f(null));
console.log(f(undefined));


অ জেনেরিক ভ্যাকুয়্যারনেস

আমি বিশ্বাস করি যে শূন্যতা কখনই জেনেরিক ফ্যাশনে মোকাবেলা করা উচিত নয়। পরিবর্তে আমাদের ডেটা শূন্য কিনা তা নির্ধারণের আগে আমাদের কাছে আরও তথ্য পাওয়ার কঠোরতা থাকা উচিত - আমি মূলত আমি কী ধরণের ডেটা নিয়ে কাজ করছি তা যাচাই করে এটি করি:

let isType = (value, Cls) => {
  try {
    return Object.getPrototypeOf(value).constructor === Cls;
  } catch(err) {
    return false;
  }
};

নোট করুন যে এই ফাংশনটি বহুবর্ষকে উপেক্ষা করে - এটি valueপ্রত্যক্ষ উদাহরণ হিসাবে প্রত্যাশা করে Cls, এর সাবক্লাসের উদাহরণ নয় Cls। আমি instanceofদুটি প্রধান কারণে এড়ানো :

  • ([] instanceof Object) === true ("একটি অ্যারে একটি বিষয়")
  • ('' instanceof String) === false ("স্ট্রিং স্ট্রিং নয়")

লক্ষ্য করুন Object.getPrototypeOfএকটি মামলা এড়াতে মত ব্যবহার করা হয় ফাংশন এখনও জন্য সঠিকভাবে ফেরৎ (মিথ্যা), এবং (সত্য)।let v = { constructor: String };isTypeisType(v, String)isType(v, Object)

সামগ্রিকভাবে, আমি isTypeএই টিপসগুলির সাথে এই ফাংশনটি ব্যবহার করার পরামর্শ দিচ্ছি :

  • অজানা প্রকারের কোড প্রসেসিং মানগুলির পরিমাণ হ্রাস করুন। উদাহরণস্বরূপ, let v = JSON.parse(someRawValue);আমাদের vচলকটি এখন অজানা ধরণের। যত তাড়াতাড়ি সম্ভব, আমাদের আমাদের সম্ভাবনাগুলি সীমাবদ্ধ করা উচিত। এটি করার সর্বোত্তম উপায়টি কোনও নির্দিষ্ট ধরণের প্রয়োজনের মাধ্যমে হতে পারে: উদাহরণস্বরূপ if (!isType(v, Array)) throw new Error('Expected Array');- এটি জেনেরিক প্রকৃতিটি সরিয়ে ফেলার একটি সত্যই দ্রুত এবং অভিব্যক্তিক উপায় vএবং এটি নিশ্চিত করা যে এটি সর্বদা একটি Array। যদিও কখনও কখনও আমাদের vএকাধিক ধরণের হতে দেওয়া প্রয়োজন । এই ক্ষেত্রে, আমাদের কোডের ব্লক তৈরি করা উচিত যেখানে vযত তাড়াতাড়ি সম্ভব জেনেরিক হয় না:

if (isType(v, String)) {
  /* v isn't generic in this block - It's a String! */
} else if (isType(v, Number)) {
  /* v isn't generic in this block - It's a Number! */
} else if (isType(v, Array)) {
  /* v isn't generic in this block - it's an Array! */
} else {
  throw new Error('Expected String, Number, or Array');
}

  • বৈধতার জন্য সর্বদা "হোয়াইটলিস্ট" ব্যবহার করুন। আপনার যদি মান, যেমন একটি স্ট্রিং, সংখ্যা বা অ্যারে প্রয়োজন হয় তবে সেই 3 "সাদা" সম্ভাবনাগুলি পরীক্ষা করে দেখুন এবং 3 টির মধ্যে কেউ সন্তুষ্ট না হলে একটি ত্রুটি নিক্ষেপ করুন। আমাদের দেখতে হবে যে "কালো" সম্ভাবনাগুলির জন্য পরীক্ষা করা খুব দরকারী নয়: বলুন আমরা লিখি if (v === null) throw new Error('Null value rejected');- এটি নিশ্চিত করার জন্য এটি দুর্দান্ত যে nullমানগুলি তা তৈরি করে না, তবে কোনও মান যদি তা তৈরি করে, আমরা এখনও শক্তভাবে জানি know এটি সম্পর্কে কিছু। একটি মান vযা এই নাল-চেককে পাশ করে তা এখনও খুব জেনেরিক - এটি কিছুই কিন্তুnull ! ব্ল্যাকলিস্টগুলি জেনেরিক-নেসকে শক্তভাবেই বিতরণ করে।
  • মান nullনা থাকলে কখনও "শূন্য মান" বিবেচনা করবেন না। পরিবর্তে, "শূন্য একটি এক্স" বিবেচনা করুন। মূলত, কখনই এর মতো কিছু করার কথা বিবেচনা করবেন না if (isEmpty(val)) { /* ... */ }- এই isEmptyফাংশনটি কীভাবে বাস্তবায়িত হয় (তা আমি জানতে চাই না ...) তা অর্থবহ নয়! এবং এটি উপায় খুব জেনেরিক! শূন্যতা কেবলমাত্র valএর ধরণের জ্ঞান দিয়ে গণনা করা উচিত । ভ্যাকুয়েন্স-চেকগুলি দেখতে এমন হওয়া উচিত:

    • "একটি স্ট্রিং, কোনও অক্ষরবিহীন": if (isType(val, String) && val.length === 0) ...
    • "0 টি প্রপস সহ একটি বস্তু": if (isType(val, Object) && Object.entries(val).length === 0) ...
    • "একটি সংখ্যা, সমান বা শূন্যের চেয়ে কম": if (isType(val, Number) && val <= 0) ...
    • "একটি অ্যারে, কোনও আইটেম নেই": if (isType(val, Array) && val.length === 0) ...

    • কেবলমাত্র ব্যতিক্রমটি যখন nullনির্দিষ্ট কার্যকারিতা বোঝাতে ব্যবহৃত হয়। এই ক্ষেত্রে এটি অর্থবহ: "একটি শূন্য মান":if (val === null) ...


আমি দেখতে পাচ্ছি আপনি এতে কিছু চিন্তাভাবনা করেছেন:>
রুই মার্কস

3

বিভিন্ন যুক্তি দিয়ে চেষ্টা করুন । শূন্য নয়, ফাঁকা নয়, অপরিজ্ঞাত নয় এবং শূন্য নয় জাভাস্ক্রিপ্ট এবং jquery এ এই কোডটি (! (! (ভেরিয়েবল))) ব্যবহারের জন্য আপনি চারটি (4) শর্ত পরীক্ষা করার জন্য বেলো কোডটি ব্যবহার করতে পারেন।

function myFunction() {
    var data;  //The Values can be like as null, blank, undefined, zero you can test

    if(!(!(data)))
    {
        alert("data "+data);
    } 
    else 
    {
        alert("data is "+data);
    }
}

3

নতুন ECMAScript নুলিশ coalescing অপারেটর একবার দেখুন

এই বৈশিষ্ট্যটি মনে করতে পারেন - ??অপারেটর - হিসাবে "পতনের পিছনে" একটি ডিফল্ট মানে একটি উপায় যখন তার আচরণ nullবা undefined

let x = foo ?? bar();

আবার উপরের কোডটি নীচের সমতুল্য।

let x = (foo !== null && foo !== undefined) ? foo : bar();

2
function isEmpty(val){
    return !val;
}

তবে এই সমাধানটি ওভার-ইঞ্জিনিয়ারড, যদি আপনি বাসস-মডেল প্রয়োজনীয়তার জন্য পরে ফাংশনটি সংশোধন না করেন তবে সরাসরি কোডে এটি ব্যবহার করা ক্লিনার:

if(!val)...

2
var myNewValue = myObject && myObject.child && myObject.child.myValue;

এটি কখনই ত্রুটি ফেলবে না। তাহলে myObject , শিশু , বা myValue নাল তাহলে myNewValue নাল হতে হবে। কোনও ত্রুটি নিক্ষেপ করা হবে না


2

এখানে সবার অনুরূপ প্রশ্ন থাকার জন্য, নিম্নলিখিতগুলি দুর্দান্ত কাজ করে এবং আমার লাইব্রেরিতে গত বছরগুলিতে এটি রয়েছে:

(function(g3, $, window, document, undefined){
   g3.utils = g3.utils || {};
/********************************Function type()********************************
* Returns a lowercase string representation of an object's constructor.
* @module {g3.utils}
* @function {g3.utils.type}
* @public
* @param {Type} 'obj' is any type native, host or custom.
* @return {String} Returns a lowercase string representing the object's 
* constructor which is different from word 'object' if they are not custom.
* @reference http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/
* http://stackoverflow.com/questions/3215046/differentiating-between-arrays-and-hashes-in-javascript
* http://javascript.info/tutorial/type-detection
*******************************************************************************/
g3.utils.type = function (obj){
   if(obj === null)
      return 'null';
   else if(typeof obj === 'undefined')
      return 'undefined';
   return Object.prototype.toString.call(obj).match(/^\[object\s(.*)\]$/)[1].toLowerCase();
};
}(window.g3 = window.g3 || {}, jQuery, window, document));

2

জেন্ডির উত্তর অনুসারে, নিম্নলিখিত মানগুলির মধ্যে যদি মানটি কোনও হয় তবে আপনি যদি সত্য হওয়া এড়াতে চান :

  • খালি
  • অনির্দিষ্ট
  • NaN
  • খালি স্ট্রিং ("")
  • 0
  • মিথ্যা

সত্যের মূল্যবোধ পাওয়া এড়াতে পারে এমন একটি সম্ভাব্য সমাধান নিম্নলিখিত:

function isUsable(valueToCheck) {
    if (valueToCheck === 0     || // Avoid returning false if the value is 0.
        valueToCheck === ''    || // Avoid returning false if the value is an empty string.
        valueToCheck === false || // Avoid returning false if the value is false.
        valueToCheck)             // Returns true if it isn't null, undefined, or NaN.
    {
        return true;
    } else {
        return false;
    }
}

এটি নিম্নলিখিত হিসাবে ব্যবহৃত হবে:

if (isUsable(x)) {
    // It is usable!
}
// Make sure to avoid placing the logical NOT operator before the parameter (isUsable(!x)) and instead, use it before the function, to check the returned value.
if (!isUsable(x)) {
    // It is NOT usable!
}

এই পরিস্থিতিগুলি ছাড়াও, আপনি যদি বস্তু বা অ্যারেটি খালি রাখেন তবে আপনি মিথ্যা ফিরতে চাইতে পারেন :

আপনি এটি সম্পর্কে এইভাবে যেতে হবে:

function isEmptyObject(valueToCheck) {
    if(typeof valueToCheck === 'object' && !Object.keys(valueToCheck).length){
        // Object is empty!
        return true;
    } else {
        // Object is not empty!
        return false;
    }
}

function isEmptyArray(valueToCheck) {
    if(Array.isArray(valueToCheck) && !valueToCheck.length) {
        // Array is empty!
        return true;
    } else {
        // Array is not empty!
        return false;
    }
}

আপনি যদি সমস্ত হোয়াইটস্পেস স্ট্রিং ("") পরীক্ষা করতে চান তবে আপনি নিম্নলিখিতগুলি করতে পারেন:

function isAllWhitespace(){
    if (valueToCheck.match(/^ *$/) !== null) {
        // Is all whitespaces!
        return true;
    } else {
        // Is not all whitespaces!
        return false;
    }
}

দ্রষ্টব্য: hasOwnPropertyখালি স্ট্রিংয়ের জন্য সত্য, 0, মিথ্যা, NaN, নাল এবং অপরিজ্ঞাত, যদি ভেরিয়েবল তাদের কোনও হিসাবে ঘোষিত হয়, তবে এটি ব্যবহার করা ভাল নাও হতে পারে returns এটি ঘোষিত হয়েছিল তা দেখানোর জন্য এটি ব্যবহার করতে ফাংশনটি সংশোধন করা যেতে পারে তবে ব্যবহারযোগ্য নয়।


2

গিটহাবের কোড

const isEmpty = value => (
  (!value && value !== 0 && value !== false)
  || (Array.isArray(value) && value.length === 0)
  || (isObject(value) && Object.keys(value).length === 0)
  || (typeof value.size === 'number' && value.size === 0)

  // `WeekMap.length` is supposed to exist!?
  || (typeof value.length === 'number'
      && typeof value !== 'function' && value.length === 0)
);

// Source: https://levelup.gitconnected.com/javascript-check-if-a-variable-is-an-object-and-nothing-else-not-an-array-a-set-etc-a3987ea08fd7
const isObject = value =>
  Object.prototype.toString.call(value) === '[object Object]';

দরিদ্র মানুষের পরীক্ষা 😁

const test = () => {
  const run = (label, values, expected) => {
    const length = values.length;
    console.group(`${label} (${length} tests)`);
    values.map((v, i) => {
      console.assert(isEmpty(v) === expected, `${i}: ${v}`);
    });
    console.groupEnd();
  };

  const empty = [
    null, undefined, NaN, '', {}, [],
    new Set(), new Set([]), new Map(), new Map([]),
  ];
  const notEmpty = [
    ' ', 'a', 0, 1, -1, false, true, {a: 1}, [0],
    new Set([0]), new Map([['a', 1]]),
    new WeakMap().set({}, 1),
    new Date(), /a/, new RegExp(), () => {},
  ];
  const shouldBeEmpty = [
    {undefined: undefined}, new Map([[]]),
  ];

  run('EMPTY', empty, true);
  run('NOT EMPTY', notEmpty, false);
  run('SHOULD BE EMPTY', shouldBeEmpty, true);
};

পরীক্ষার ফলাফল:

EMPTY (10 tests)
NOT EMPTY (16 tests)
SHOULD BE EMPTY (2 tests)
  Assertion failed: 0: [object Object]
  Assertion failed: 1: [object Map]

দুর্দান্ত ফাংশন, অন্যান্য উত্তরগুলির সকলের একাধিক সমস্যা ছিল যা আপনার সম্বোধনের জন্য উপস্থিত হয়েছিল, আমি কেবল নিজের ইচ্ছাটি লিখে দেওয়ার আগেই এটিটি খুঁজে পেতে চাইতাম: পি ভেবেছিল আপনি আমার কাজ স্ট্যাকওভারফ্লো.com/ এ একবার দেখে নিতে পছন্দ করবেন প্রশ্ন / 5515310 /… আমাদের উভয় ফাংশনটিতে একই আউটপুট রয়েছে বলে মনে হচ্ছে তবে আমি কোডটি কিছুটা কমিয়ে দিয়েছি। আমি কিছু মিস করেছি কিনা দয়া করে আমাকে জানান।
শান ব্যানিস্টার

You আপনি কি আমার "দরিদ্র মানুষের পরীক্ষা" দিয়েছিলেন? আমি মনে করি যে আমি মানচিত্র, উইকম্যাপ, এবং সম্ভবত তারিখ, রেজিপ্লেক্সের মতো বিশেষ ক্ষেত্রে ফাংশনে আরও পরীক্ষা যুক্ত করেছি। আপনি কি আপনার সম্পর্কে নিশ্চিত value.constructor === Object? পরীক্ষা করে দেখুন এই
পাস্কাল পলিউনাস

হ্যাঁ, আমি আপনার পরীক্ষাগুলি চালিয়েছি, তাদের জন্য ধন্যবাদ, আমাদের উভয় ফাংশনই আমাদের উভয় পরীক্ষার সাথে একই ফল দেয়। আমি ভাবছি যে এই পরীক্ষার মামলার বাইরে আমি কিছু মিস করছি কিনা। আমি বিশ্বাস করি value.constructor === Objectঠিক আছে, জাভাস্ক্রিপ্টে যদি বা বিবৃতিতে সম্পাদনের আদেশ থাকে যাতে ওআর বিবৃতি কেবল তখনই কার্যকর করা হয় যদি পূর্ববর্তী সত্যটি না ফেরায় এবং আমরা ইতিমধ্যে যাচাই করেছি Null। প্রকৃতপক্ষে এই শেষ বা বিবৃতিটির একমাত্র উদ্দেশ্য হ'ল {}এটি যা করা উচিত নয় তার জন্য সত্য ফিরিয়ে দেয় না তা সনাক্ত করা এবং তা নিশ্চিত করা।
শান বানজিস্টার

1

অনির্দিষ্ট স্থায়ী নেস্টিংয়ের পরিবর্তনশীল নির্ধারিত কিনা তা এটি পরীক্ষা করবে

function Undef(str) 
{
  var ary = str.split('.');
  var w = window;
  for (i in ary) {
    try      { if (typeof(w = w[ary[i]]) === "undefined") return true; }
    catch(e) { return true; }
  }
  return false;
}

if (!Undef("google.translate.TranslateElement")) {

গুগল অনুবাদ ফাংশন ট্রান্সলেশন এলিমেন্ট উপস্থিত থাকলে উপরের চেকগুলি করা হয়। এটি সমান:

if (!(typeof google === "undefined" 
 || typeof google.translate === "undefined" 
 || typeof google.translate.TranslateElement === "undefined")) {

1

Referenceচ্ছিক চেইনিং অপারেটর সংযুক্ত বস্তুর মাধ্যমে অ্যাক্সেসের মানগুলিকে সহজ করার একটি উপায় প্রদান করে যখন এটি সম্ভব হয় যে কোনও রেফারেন্স বা ফাংশন অপরিজ্ঞাত বা নাল হতে পারে।

let customer = {
  name: "Carl",
  details: {
    age: 82,
    location: "Paradise Falls" // detailed address is unknown
  }
};
let customerCity = customer.details?.address?.city;

নালিশ কোয়েলসিং অপারেটরটি কোনও ডিফল্ট মান তৈরি করার জন্য alচ্ছিক শৃঙ্খলার পরে ব্যবহার করা যেতে পারে:

let customer = {
  name: "Carl",
  details: { age: 82 }
};
const customerCity = customer?.city ?? "Unknown city";
console.log(customerCity); // Unknown city


0

যদিও একজন বয়স্ক, কী ভুলে যাবেন যে তাদের কোড ব্লকটি মোড়ানো উচিত এবং তারপরে ত্রুটিটি ধরা হবে এবং তারপরে পরীক্ষা করা উচিত ...

function checkup( t ){
  try{
    for(p in t){
      if( p.hasOwnProperty( t ) ){
        return true;
      }
    }
    return false;
  }catch(e){
    console.log("ERROR : "+e);
    return e;
  }
}

সুতরাং আপনাকে হাত দেওয়ার আগে কোনও সম্ভাব্য সমস্যা যাচাই করতে হবে না, আপনি কেবল এটি ধরেন এবং তারপরে কীভাবে চান তা মোকাবেলা করুন।

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