শূন্য না জন্য জাভাস্ক্রিপ্ট চেক


133

নীচে একটি কোড স্নিপেট রয়েছে, যেখানে আমরা একটি ফর্ম মান পুনরুদ্ধার করি। আরও প্রক্রিয়া করার আগে মানটি নাল নয় কিনা তা পরীক্ষা করে দেখুন ..

var val = document.FileList.hiddenInfo.value;
alert("val is " + val);  // this prints null which is as expected
if (val != null)
{
   alert("value is "+val.length); // this returns 4
}
else
{
   alert("value* is null");
}

কোনও ধারণা কেন এমন হয় .. ??


2
সিডব্লিউ ঘটেছে কারণ 6+ ব্যবহারকারী প্রশ্নটি সম্পাদনা করেছেন।
আপনি

! == এর পরিবর্তে! =
getBackerZ

উত্তর:


78

এটি কারণ ভ্যাল নয় null, তবে 'null'একটি স্ট্রিং হিসাবে রয়েছে ।

'নাল' দিয়ে পরীক্ষা করার চেষ্টা করুন

if ('null' != val)

কখন এবং কেন এটি কাজ করে তার ব্যাখ্যার জন্য নীচের বিশদটি দেখুন


2
হওয়া উচিত যদি (নাল! = ভাল) কোনওভাবে এটি উদ্ধৃতিগুলির সাথে কাজ করে না
আনন্দ

মিঃ প্রশ্নে, নালটি স্ট্রিংয়ের মতোই ছিল ... আপনার ক্ষেত্রে সম্ভবত অন্যরকম
আর্সেন এমক্রিচায়ান

145

এটি আপনার জন্য কৌশলটি করবে

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}

22
প্রযুক্তিগতভাবে এটি কাজ করার সময়, একটি দ্বিগুণ নয় (!!) হ'ল একটি প্রোগ্রামিং ভুল-পাস। এটি সত্যিই এর সমতুল্য if(val), যা পড়ার জন্য আরও পরিষ্কার। আমি সেটির সাথে লেগে থাকব
উইল বাক

2
কীভাবে যদি (! বুলিয়ান (ভাল))
থডজানেই

1
!! এটি কেবল একটি ডাবল নেতিবাচক, সুতরাং এটি আক্ষরিকভাবে বলছে যদি (ভাল.এক্সজিস্ট)। আমি এখনও দেখতে এটি দেখতে ভাল লাগে!
কুরাই বঙ্কুসু

12
এটি ব্যর্থ হবে val = 0যেহেতু !!0মিথ্যা হিসাবে মূল্যায়ন করেছে
পাঙ্ক্রোকপলি

3
এটি সাধারণ ডাবল নেগেটিভ নয়। এটি ট্রান্সফর্মিং ডাবল নেগেটিভ। আপনি মূলত ভেরিয়েবলটিকে বুলিয়ান রূপান্তর করছেন। বিষয় বলার কিন্তু এটা বলার জন্য যথেষ্ট যে ক্ষেত্রে অনেক যেখানে আপনার পরিবর্তনশীল এর 0, false, null, undefinedঅথবা কিছু যেমন মান সমাধান করা যে trueএক সঙ্গে!, আপনি পেতে যাচ্ছেন falseজন্য !!। এটি কিছুটা হলেও অল্প ব্যবহার করা উচিত।
গাই প্যাসি

83

"নাল নয়" জন্য চেক করার জন্য 3 টি উপায় রয়েছে। আমার সুপারিশটি হ'ল স্ট্রিক্ট নট ভার্সনটি ব্যবহার করা।

1. কঠোর নয় সংস্করণ

if (val !== null) { ... }

স্ট্রাইক নট ভার্সনটি "স্ট্রাইক ইক্যুয়ালিটি তুলনা অ্যালগরিদম" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6 ব্যবহার করে!==দ্রুত কর্মক্ষমতা রয়েছে চেয়ে !=কারণ যথাযথ সমতা তুলনা অ্যালগরিদম মান typecast না অপারেটর।

২. অ-কঠোর নয় সংস্করণ

if (val != 'null') { ... }

অ-কঠোর সংস্করণটি "অ্যাবস্ট্রাক্ট ইক্যুয়ালিটি তুলনা অ্যালগরিদম" ব্যবহার করে http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3!=ধীর কর্মক্ষমতা রয়েছে চেয়ে !==কারণ সারাংশ সমতা তুলনা অ্যালগরিদম মান typecasts অপারেটর।

৩. ডাবল নট ভার্সন

if (!!val) { ... }

!!স্ট্রিট নট ভার্সন !==এবং নন-স্ট্রাক্ট নট ভার্সন !=( https://jsperf.com/tfm-not-null/6 ) উভয়ের চেয়ে ডাবল নট ভার্সনের দ্রুত পারফরম্যান্স রয়েছে । তবে এটি "ফ্যালসি" মানগুলি টাইপকেস্ট করবে যেমন undefinedএবং NaNমিথ্যা ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ) এর ফলস্বরূপ অপ্রত্যাশিত ফলাফল হতে পারে এবং এর পাঠ্যতা আরও খারাপ হয়েছে কারণ nullস্পষ্টভাবে বলা হয় না।


এটা খুব বিজোড়। !!valআমার জন্য কাজ করেছেন কিন্তু val!==nullহয়নি। এটা কেন?
TheLogicGuy

@ দ্য লজিকগুই - এর ডেটাটাইপ কী val? console.log(typeof val)
tfmontague

সংখ্যা। কোডটি অ্যারে থেকে "খারাপ" মানগুলি সরিয়ে দেয় (নাল, 0 ইত্যাদি)। এই কোডটি এখানে: পেস্টবিন.
com

1
@ দ্য লজিকগুই - আপনার আসল সমস্যার নালার সাথে কোনও সম্পর্ক নেই। NaN সঠিকভাবে ফিল্টার করছে না - এটি সর্বদা সত্য ফিরে আসবে। এটি কাজ করা উচিত: (isNaN (ভাল) && (টাইপফোন! == "অপরিজ্ঞাত"))। জাভাস্ক্রিপ্টে একটি ধারণা আছে যা "সত্যবাদী" এবং "ফালসি" নামে পরিচিত। ডাবল-নয় অপারেটর !!স্রেফ চেয়ে আরও কিছু সরিয়ে ফেলবে null। এটি রূপান্তর করতে NaNএবং undefinedপাশাপাশি মিথ্যে রূপান্তরিত করবে । এবং এজন্য ডাবল নট অপারেটর ব্যবহার করার সময় আপনার অ্যারে সঠিকভাবে ফিল্টার করে !!
tfmontague

30

!==হিসাবে ব্যবহার করুন !=আপনাকে অযৌক্তিক জাভাস্ক্রিপ্ট সত্য টেবিলের অদ্ভুততার জগতে নিয়ে যাবে।


আপনি নির্দিষ্টভাবে undefinedবা জন্য পরীক্ষা করতে না চাইলে null। যে ক্ষেত্রে অন্যান্য মিথ্যা মানগুলির জন্য বা না val != nullফিরে আসবে । trueundefinednull0
এরিক এইচ

8

আপনার কঠোর not equalsতুলনা অপারেটরটি ব্যবহার করা উচিত !==যাতে ব্যবহারকারী যদি ইনপুট করে "null"তবে আপনি এটিকে পাবেন না else


1
সুসান নুল যদি তার নাম একটি ডেটা এন্ট্রি ফর্মটিতে স্বীকার না করা হয় তবে তিনি খুশি হবেন না
আন্দেজ


3

এটি ভাল কাজ করা উচিত ..

   if(val!= null)
    {
       alert("value is "+val.length); //-- this returns 4
    }
    else
    {
       alert("value* is null");
    }

2

আপনি যদি একটি বৈধ মান হিসাবে 0 অন্তর্ভুক্ত করতে সক্ষম হতে চান:

if (!!val || val === 0) { ... }


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