জাভাস্ক্রিপ্ট isset () সমতুল্য


552

পিএইচপি আপনি করতে পারেন if(isset($array['foo'])) { ... }। জাভাস্ক্রিপ্টে আপনি প্রায়শই if(array.foo) { ... }একই কাজ করতে ব্যবহার করেন তবে এটি ঠিক একই বক্তব্য নয়। শর্তটি যদি array.fooবিদ্যমান থাকে তবে এটিও মিথ্যা হিসাবে মূল্যায়ন করবে falseবা হয় 0(এবং সম্ভবত অন্যান্য মানও)।

issetজাভাস্ক্রিপ্টে পিএইচপি এর নিখুঁত সমতুল্য কি ?

বিস্তৃত অর্থে, একটি সাধারণ, জাভাস্ক্রিপ্টের ভেরিয়েবলগুলি পরিচালনা করার সম্পূর্ণ নির্দেশিকা যা বিদ্যমান নেই, মান ছাড়া ভেরিয়েবল ইত্যাদি সুবিধাজনক হবে।


1
আমি একটি ফাংশন লিখেছি যা কোনও বস্তুর সম্পত্তির অস্তিত্বের পরীক্ষার জন্য কোয়েরীর গভীরতা ছাড়াই পরীক্ষা করবে: stackoverflow.com/a/12681101/1268003 আমার কোড ব্যবহার করে, এই থ্রেডে @ সিএমএস দ্বারা ভাগ করা কিছু জ্ঞানের সাথে মিলিয়ে আপনি সহজেই একটি বিশ্বব্যাপী লিখতে পারেন ফাংশন যা পিএইচপি: এসেটের মতো খুব বেশি কাজ করে।
মার্টিন অ্যান্ডারসন

3
আপনি ব্যবহার করেন তাহলে Underscore.js চেষ্টা_.isUndefined(arr.foo)
Vitalii Fedorenko

ঐচ্ছিক চেইনিং সম্ভবত যা বেশীর ভাগ মানুষ খুঁজছেন করা হবে stackoverflow.com/a/60845999/2100372
zoran404

উত্তর:


938

আমি সাধারণত typeofঅপারেটরটি ব্যবহার করি :

if (typeof obj.foo !== 'undefined') {
  // your code here
}

"undefined"সম্পত্তিটি বিদ্যমান না থাকলে বা এর মান না থাকলে এটি ফিরে আসবে undefined

(আরও দেখুন: সংজ্ঞায়িত হচ্ছে না এবং এর মধ্যে পার্থক্য রয়েছেundefined ))

hasOwnPropertyপদ্ধতির মতো কোনও জিনিসে কোনও সম্পত্তি রয়েছে কিনা তা সনাক্ত করার অন্যান্য উপায় রয়েছে :

if (obj.hasOwnProperty('foo')) {
  // your code here
}

এবং inঅপারেটর:

if ('foo' in obj) {
  // your code here
}

শেষ দুটির মধ্যে পার্থক্য হ'ল hasOwnPropertyপদ্ধতিটি যাচাই করবে যে সম্পত্তিটি বস্তুর উপর শারীরিকভাবে বিদ্যমান কিনা (সম্পত্তি উত্তরাধিকার সূত্রে প্রাপ্ত নয়)।

inঅপারেটর সব সম্পত্তি প্রোটোটাইপ শৃঙ্খল, যেমন আপ পৌঁছানো পরীক্ষা হবে:

var obj = { foo: 'bar'};

obj.hasOwnProperty('foo'); // true
obj.hasOwnProperty('toString'); // false
'toString' in obj; // true

যেমন আপনি দেখতে পাচ্ছেন, পদ্ধতিটি পরীক্ষা করার সময় hasOwnPropertyরিটার্ন falseএবং inঅপারেটর ফিরে আসে , এই পদ্ধতিটি প্রোটোটাইপ চেইনে সংজ্ঞায়িত করা হয়, কারণ উত্তরাধিকার সূত্রে ফর্মটি পাওয়া যায় ।truetoStringobjObject.prototype


23
এর typeofচেয়ে কেন ব্যবহার করবেন if( obj.foo !== undefined )?
ম্যাট বল

7
আহ। একদিন আমি সত্যিই ক্রস ব্রাউজার জাভাস্ক্রিপ্টের একটি টুকরো লিখব। ততক্ষণ ...
ম্যাট বল

37
এর সাথে সমস্যা হ'ল আপনি গভীর বৈশিষ্ট্যগুলি পরীক্ষা করার চেষ্টা করার সময় একটি ত্রুটি পান, উদাহরণস্বরূপ: obj.thisdoesntexist.foo! == অপরিবর্তিত। পিএইচপি-তে আপনি যে কোনও গভীরতে এসসেট বা খালি এবং নিরাপদে ব্যবহার করতে পারেন।
এনরিক


12
ঠিক যেমন, পিএইচপি isset($abc->def->ghi->jkl)জাভাস্ক্রিপ্ট typeofঅপারেটরের বিপরীতে ব্যতিক্রম বা স্ক্রিপ্টটি থামিয়ে ছাড়াই অনুমতি দেয় । আপনাকে এর মতো কিছু ব্যবহার করতে হবে try{ abc.def.ghi.jkl; isset=true } catch(e){ isset=false }
স্টিভেন প্রবিলিনস্কি

43

বয়সের পুরানো থ্রেড, তবে সমতুল্য চালানোর নতুন উপায় রয়েছে isset()

ESNext (পর্যায় 4 ডিসেম্বর 2019)

দুটি নতুন সিনট্যাক্স আমাদের ব্যবহারকে ব্যাপকভাবে সহজ করার অনুমতি দেয় isset() কার্যকারিতাটির :

দস্তাবেজগুলি পড়ুন এবং ব্রাউজারের সামঞ্জস্যের বিষয়টি মনে রাখবেন।

পূর্ববর্তী উত্তর

ব্যাখ্যা জন্য নীচে দেখুন। দ্রষ্টব্য আমি স্ট্যান্ডার্ডজেএস সিনট্যাক্স ব্যবহার করি

ব্যবহারের উদাহরণ

// IMPORTANT pass a function to our isset() that returns the value we're
// trying to test(ES6 arrow function)
isset(() => some) // false

// Defining objects
let some = { nested: { value: 'hello' } }

// More tests that never throw an error
isset(() => some) // true
isset(() => some.nested) // true
isset(() => some.nested.value) // true
isset(() => some.nested.deeper.value) // false

// Less compact but still viable except when trying to use `this` context
isset(function () { return some.nested.deeper.value }) // false

উত্তর ফাংশন

/**
 * Checks to see if a value is set.
 *
 * @param {Function} accessor Function that returns our value
 */
function isset (accessor) {
  try {
    // Note we're seeing if the returned value of our function is not
    // undefined
    return typeof accessor() !== 'undefined'
  } catch (e) {
    // And we're able to catch the Error it would normally throw for
    // referencing a property of undefined
    return false
  }
}

ব্যাখ্যা

পিএইচপি

নোট করুন যে পিএইচপি-তে আপনি যে কোনও পরিবর্তনকে যে কোনও গভীরতায় রেফারেন্স করতে পারেন - এমনকি অ্যারে হিসাবে নন-অ্যারে অ্যাক্সেস করার চেষ্টা করলে কোনও সাধারণ ফিরে আসবে trueবা false:

// Referencing an undeclared variable
isset($some); // false

$some = 'hello';

// Declared but has no depth(not an array)
isset($some); // true
isset($some['nested']); // false

$some = ['nested' => 'hello'];

// Declared as an array but not with the depth we're testing for
isset($some['nested']); // true
isset($some['nested']['deeper']); // false

জাতীয়

জাভাস্ক্রিপ্টে, আমাদের সেই স্বাধীনতা নেই, আমরা যদি একই কাজ করি তবে আমরা সবসময় একটি ত্রুটি পেয়ে যাব কারণ জেএস তত্ক্ষণাত deeper আমাদের ফাংশনটিতে এটি মোড়ানোর আগে মানটির অ্যাক্সেস করার চেষ্টা করছে isset()যাতে ...

// Common pitfall answer(ES6 arrow function)
const isset = (ref) => typeof ref !== 'undefined'

// Same as above
function isset (ref) { return typeof ref !== 'undefined' }

// Referencing an undeclared variable will throw an error, so no luck here
isset(some) // Error: some is not defined

// Defining a simple object with no properties - so we aren't defining
// the property `nested`
let some = {}

// Simple checking if we have a declared variable
isset(some) // true

// Now trying to see if we have a top level property, still valid
isset(some.nested) // false

// But here is where things fall apart: trying to access a deep property
// of a complex object; it will throw an error
isset(some.nested.deeper) // Error: Cannot read property 'deeper' of undefined
//         ^^^^^^ undefined

আরও ব্যর্থ বিকল্প:

// Any way we attempt to access the `deeper` property of `nested` will
// throw an error
some.nested.deeper.hasOwnProperty('value') // Error
//   ^^^^^^ undefined

Object.hasOwnProperty('value', some.nested.deeper) // Error
//                                  ^^^^^^ undefined

// Same goes for typeof
typeof some.nested.deeper !== 'undefined' // Error
//          ^^^^^^ undefined

এবং কিছু কার্যকরী বিকল্প যা নিরর্থক দ্রুত পেতে পারে:

// Wrap everything in try...catch
try { isset(some.nested.deeper) } catch (e) {}
try { typeof some.nested.deeper !== 'undefined' } catch (e) {}

// Or by chaining all of the isset which can get long
isset(some) && isset(some.nested) && isset(some.nested.deeper) // false
//                        ^^^^^^ returns false so the next isset() is never run

উপসংহার

অন্যান্য সমস্ত উত্তর - যদিও বেশিরভাগই কার্যকর হয় ...

  1. ধরে নিন আপনি কেবল ভেরিয়েবলটি অপরিজ্ঞাত নয় কিনা তা পরীক্ষা করে দেখছেন যা কিছু ব্যবহারের ক্ষেত্রে ঠিক আছে তবে তবুও ত্রুটি ছুঁড়ে দিতে পারে
  2. ধরে নিন আপনি কেবলমাত্র একটি শীর্ষ স্তরের সম্পত্তি অ্যাক্সেস করার চেষ্টা করছেন যা কিছু ব্যবহারের ক্ষেত্রে আবার ভাল
  3. আপনাকে পিএইচপি'র তুলনায় আদর্শের চেয়ে কম পদ্ধতির ব্যবহার করতে বাধ্য করুন isset()
    উদাহরণস্বরূপisset(some, 'nested.deeper.value')
  4. eval()যা কাজ করে তা ব্যবহার করুন তবে আমি ব্যক্তিগতভাবে এড়াতে পারি

আমি মনে করি আমি এটির অনেকটা coveredেকে রেখেছি। আমার উত্তরে আমি কিছু পয়েন্ট দিচ্ছি যা আমি স্পর্শ করি না কারণ সেগুলি - যদিও প্রাসঙ্গিক - তবে এই প্রশ্নের অংশ নয়। যদি প্রয়োজন হয় তবে আমি চাহিদার ভিত্তিতে আরও কিছু প্রযুক্তিগত দিকের লিঙ্কগুলির সাথে আমার উত্তর আপডেট করতে পারি।

আমি এটিতে অনেক সময় কাটিয়েছি তাই আশা করি এটি মানুষকে সাহায্য করবে।

পড়ার জন্য আপনাকে ধন্যবাদ!


25

SOURCE রেফারেন্স

    module.exports = function isset () {
  //  discuss at: http://locutus.io/php/isset/
  // original by: Kevin van Zonneveld (http://kvz.io)
  // improved by: FremyCompany
  // improved by: Onno Marsman (https://twitter.com/onnomarsman)
  // improved by: Rafał Kukawski (http://blog.kukawski.pl)
  //   example 1: isset( undefined, true)
  //   returns 1: false
  //   example 2: isset( 'Kevin van Zonneveld' )
  //   returns 2: true

  var a = arguments
  var l = a.length
  var i = 0
  var undef

  if (l === 0) {
    throw new Error('Empty isset')
  }

  while (i !== l) {
    if (a[i] === undef || a[i] === null) {
      return false
    }
    i++
  }

  return true
}

phpjs.org বেশিরভাগ লোকোটাসের পক্ষে অবসর নিয়েছে এখানে নতুন লিঙ্কটি http://locutus.io/php/var/isset


6
অপরিজ্ঞাত isset(abc.def.ghi)থাকলে ক্ষেত্রে ফোন করার সময় এটি একটি ব্যতিক্রম বাড়াবে abc.def। তবে এই সমাধানটির সাথে একত্রিত করে যে কোনও স্ট্রিংয়ের আকারে একটি পরিবর্তনশীল নাম গ্রহণ করে, এটি পিএইচপি সংস্করণে অভিন্ন হবে।
স্টিভেন প্রবিলিনস্কি


8
//
//  tring to reference non-existing variable throws ReferenceError 
//  before test function is even executed
//
//  example, if you do:
//    
//     if ( isset( someVar ) ) 
//        doStuff( someVar );
//   
//  you get a ReferenceError ( if there is no someVar... ) 
//  and isset fn doesn't get executed.
//
//  if you pass variable name as string, ex. isset( 'novar' );, 
//  this might work:
//
function isset ( strVariableName ) { 

    try { 
        eval( strVariableName );
    } catch( err ) { 
        if ( err instanceof ReferenceError ) 
           return false;
    }

    return true;

 } 
//
//


6

আমি এই জেনেরিক ফাংশনটি সর্বদা প্রাথমিক ভেরিয়েবলগুলির পাশাপাশি অ্যারে এবং অবজেক্টগুলিতে ত্রুটি রোধ করতে ব্যবহার করি।

isset = function(obj) {
  var i, max_i;
  if(obj === undefined) return false;
  for (i = 1, max_i = arguments.length; i < max_i; i++) {
    if (obj[arguments[i]] === undefined) {
        return false;
    }
    obj = obj[arguments[i]];
  }
  return true;
};

console.log(isset(obj));                   // returns false
var obj = 'huhu';
console.log(isset(obj));                   // returns true
obj = {hallo:{hoi:'hoi'}};
console.log(isset(obj, 'niet'));           // returns false
console.log(isset(obj, 'hallo'));          // returns true
console.log(isset(obj, 'hallo', 'hallo')); // returns false
console.log(isset(obj, 'hallo', 'hoi'));   // returns true


4

এটি ভেরিয়েবল উপস্থিত থাকলে পরীক্ষার জন্য এটি একটি সুন্দর বুলেটপ্রুফ সমাধান:

var setOrNot = typeof variable !== typeof undefined ? true : false;

দুর্ভাগ্যক্রমে, আপনি কেবল এটি কোনও ফাংশনে আবদ্ধ করতে পারবেন না।

আপনি এই জাতীয় কিছু করার কথা ভাবতে পারেন:

function isset(variable) {
    return typeof variable !== typeof undefined ? true : false;
}

তবে, ভেরিয়েবলটি variableসংজ্ঞায়িত না করা হলে এটি একটি রেফারেন্স ত্রুটি তৈরি করবে , কারণ আপনি কোনও ফাংশনে অ-বিদ্যমান ভেরিয়েবলটি পাশ করতে পারবেন না:

আনকচড রেফারেন্সএরর: foo সংজ্ঞায়িত হয়নি

অন্যদিকে, এটি আপনাকে ফাংশন প্যারামিটারগুলি পূর্বনির্ধারিত কিনা তা পরীক্ষা করার অনুমতি দেয়:

var a = '5';

var test = function(x, y) {
    console.log(isset(x));
    console.log(isset(y));
};

test(a);

// OUTPUT :
// ------------
// TRUE
// FALSE

যদিও yফাংশনটির জন্য কোনও মান পাস করা হয় না, তবুও testআমাদের issetফাংশন এই প্রসঙ্গে পুরোপুরি কাজ করে, কারণ yফাংশনে testএকটি undefinedমান হিসাবে পরিচিত ।


গৌণ নিট: `? সত্য: মিথ্যা` অতিমানবিক। এর ফলাফল !==ইতিমধ্যে একটি বুলিয়ান।
টুলমেকারস্টেভ

4
(typeof SOMETHING) !== 'undefined'

এটি ব্যবহার করার সময় লিখতে খুব দীর্ঘ। তবে আমরা কী- typeofওয়ার্ডটি কোনও ফাংশনে প্যাকেজ করতে পারি না , কারণ ফাংশন বলার আগে একটি ত্রুটি ছুঁড়ে ফেলা হবে, যেমন:

function isdef($var) {
    return (typeof $var) !== 'undefined';
}

isdef(SOMETHING); ///// thrown error: SOMETHING is not defined

সুতরাং আমি একটি উপায় খুঁজে বের করেছি:

function isdef($type) {
    return $type !== 'undefined';
}

isdef(typeof SOMETHING);

এটি পৃথক ভেরিয়েবল (ভেরিয়েবলগুলি যে একেবারেই বিদ্যমান না) বা অবজেক্ট বৈশিষ্ট্য (অস্তিত্বহীন বৈশিষ্ট্য) উভয় দিয়েই কাজ করতে পারে। এবং পিএইচপি এর চেয়ে আরও 7 টি অক্ষর isset


এটি আমার পক্ষে কাজ করে, কোনও নির্দিষ্ট জসন প্রতিক্রিয়া বিদ্যমান কিনা তা পরীক্ষা করতে এটি ব্যবহার করে।
জুলিয়াস


3
function isset(variable) {
    try {
        return typeof eval(variable) !== 'undefined';
    } catch (err) {
        return false;
    }
}

4
কিছু বিবরণ যুক্ত করুন।
শ্রী কৃষ্ণ

পূর্বের বেশ কয়েকটি উত্তরে যেমন উল্লেখ করা হয়েছে, কোনও ভেরিয়েবলের সাথে ডাকা হলে এটি একটি রেফারেন্সইরর ফেলে দেবে যা কখনও ঘোষণা করা হয়নি। যেমন isset(someVar), someVarকখনই ঘোষণা করা হয়নি। তবে আপনি যে কাজটি করেছেন তা দিয়ে evalআপনি সম্ভবত একটি স্ট্রিং উত্তীর্ণ হতে চান usage ব্যবহার দেখান। আপনার উদ্দেশ্য ব্যবহার isset('someVar')? যদি তা হয় তবে এটি আগের উত্তরটির সাথে একই রকম দেখাচ্ছে - আপনার উত্তরটি নতুন কী?
টুলমেকারস্টেভ

3
window.isset = function(v_var) {
    if(typeof(v_var) == 'number'){ if(isNaN(v_var)){ return false; }}
    if(typeof(v_var) == 'undefined' || v_var === null){ return false;   } else { return true; }
};

প্লাস টেস্ট:

https://gist.github.com/daylik/24acc318b6abdcdd63b46607513ae073


পূর্বের বেশ কয়েকটি উত্তরে যেমন উল্লেখ করা হয়েছে, কোনও ভেরিয়েবলের সাথে ডাকা হলে এটি একটি রেফারেন্সইরর ফেলে দেবে যা কখনও ঘোষণা করা হয়নি।
টুলমেকারস্টেভ

3

ওয়েদার এইচটিএমএল ব্লকটি বিদ্যমান কিনা তা পরীক্ষা করতে আমি এই কোডটি ব্যবহার করছি:

if (typeof($('selector').html()) != 'undefined') {
    // $('selector') is existing
    // your code here
}

2

স্ট্রিং হিসাবে অবজেক্ট পাথটি সরবরাহ করুন, তারপরে আপনি hasOwnPropertyপ্রতিটি স্ট্রিংয়ে প্রতিটি পুনরাবৃত্তির সাহায্যে ওভাররাইট করার সময় প্রতিটি স্টেপে এই স্ট্রিংটিকে পাথে বিভক্ত করতে পারেন এবং সমাধান করতে পারেন ।

আপনি যদি ES6 এনভায়রনমেন্টে কোডিং করছেন তবে এই স্ট্যাকওভারফ্লো কুইজে একবার দেখুন

var a;

a = {
    b: {
        c: 'e'
    }
};

function isset (obj, path) {
    var stone;

    path = path || '';

    if (path.indexOf('[') !== -1) {
        throw new Error('Unsupported object path notation.');
    }

    
    path = path.split('.');
    
    do {
        if (obj === undefined) {
            return false;
        }

        stone = path.shift();
        
        if (!obj.hasOwnProperty(stone)) {
            return false;
        }
        
        obj = obj[stone];
        
    } while (path.length);

    return true;
}

console.log(
    isset(a, 'b') == true,
    isset(a, 'b.c') == true,
    isset(a, 'b.c.d') == false,
    isset(a, 'b.c.d.e') == false,
    isset(a, 'b.c.d.e.f') == false
);


2

আমি এমন একটি ফাংশন ব্যবহার করি যা ভেরিয়েবল এবং অবজেক্টগুলি চেক করতে পারে। jQuery সাথে কাজ করার জন্য খুব সুবিধাজনক

    function _isset (variable) {
        if(typeof(variable) == "undefined" || variable == null)
            return false;
        else
            if(typeof(variable) == "object" && !variable.length) 
                return false;
            else
                return true;
    };

পূর্বের বেশ কয়েকটি উত্তরে যেমন উল্লেখ করা হয়েছে, কোনও ভেরিয়েবলের সাথে ডাকা হলে এটি একটি রেফারেন্সইরর ফেলে দেবে যা কখনও ঘোষণা করা হয়নি।
টুলমেকারস্টেভ

1

যখন আমি কোনও বস্তুর গভীর সম্পত্তি অ্যাক্সেস করছিলাম তখন এটি আমার পক্ষে সত্যিই সমস্যা ছিল তাই আমি এমন একটি ফাংশন তৈরি করেছিলাম যা যদি উপস্থিত থাকে তবে সম্পত্তি মানটি ফিরিয়ে দেবে অন্যথায় এটি মিথ্যা ফিরে আসবে। আপনি আপনার সময় বাঁচাতে এটি ব্যবহার করতে পারেন,

//Object on which we want to test
var foo = {
    bar: {
        bik: {
            baz: 'Hello world'
        }
    }
};


/*
USE: To get value from the object using it properties supplied (Deeper),
    if found it will return the property value if not found then will return false

You can use this function in two ways
WAY - 1:
Passing an object as parameter 1 and array of the properties as parameter 2
EG: getValueFromObject(foo, ['bar', 'bik', 'baz']);
WAY - 2: (This will work only if, your object available in window object)
Passing an STRING as parameter 1(Just similarly how we retrieve value form object using it's properties - difference is only the quote)
EG: getValueFromObject('foo.bar.bik.baz');
*/
function getValueFromObject(object, properties) {
    if(typeof(object) == 'string') {            //Here we extract our object and it's properties from the string
        properties = object.split('.');
        object = window[properties[0]];
        if(typeof(object) == 'undefined') {
            return false;
        }
        properties.shift();
    }
    var property = properties[0];
    properties.shift();
    if(object != null && typeof(object[property]) != 'undefined') {
        if(typeof(object[property]) == 'object') {
            if(properties.length != 0) {
                return getValueFromObject(object[property], properties);    //Recursive call to the function
            } else {
                return object[property];
            }
        } else {
            return object[property];
        }
    } else {
        return false;
    }
}
console.log(getValueFromObject('fooo.bar.bik.baz'));        //false
console.log(getValueFromObject('foo.bar.bik.baz'));         //Hello world
console.log(getValueFromObject('foo'));                     //false
console.log(getValueFromObject('foo.bar.bik'));             //returns an object { baz: 'Hello World' }
console.log(getValueFromObject(foo, ['bar', 'bik']));       //returns an object { baz: 'Hello World' }
console.log(getValueFromObject(foo, ['bar', 'bik', 'baz']));//Hello world

1

আপনি যদি কোনও উপাদান উপস্থিত আছে কিনা তা পরীক্ষা করতে চান তবে কেবল নীচের কোডটি ব্যবহার করুন:

if (object) {
  //if isset, return true
} else {
  //else return false
}

এটি নমুনা:

function switchDiv() {
    if (document.querySelector("#divId")) {
        document.querySelector("#divId").remove();
    } else {
        var newDiv = document.createElement("div");
        newDiv.id = "divId";
        document.querySelector("body").appendChild(newDiv);
    }
}

document.querySelector("#btn").addEventListener("click", switchDiv);
#divId {
    background: red;
    height: 100px;
    width: 100px;
    position: relative;
    
}
<body>
  <button id="btn">Let's Diiiv!</button>
</body>



0

পিএইচপি ম্যানুয়াল বলুন:

isset - একটি ভেরিয়েবল সেট করা আছে এবং NULL না থাকলে তা নির্ধারণ করুন

এবং ইন্টারফেস এর মত কিছু:

bool isset ( mixed $var [, mixed $... ] )

প্যারামিটারটি $varচেক করার জন্য পরিবর্তনশীল। এটিতে প্যারামিটারের কোনও সংখ্যা থাকতে পারে।

isset () TRUEvar উপস্থিত থাকে এবং এর চেয়ে অন্য মান থাকলে তা প্রদান করে NULLFALSEঅন্যথায়।

কিছু উদাহরণ:

$foo = 'bar';
var_dump(isset($foo));        -> true

$baz = null;
var_dump(isset($baz));        -> false

var_dump(isset($undefined));  -> false

এই মনে হিসাবে, স্পষ্টতই, পিএইচপি isset()ফাংশন এর সঠিক সমতুল্য লেখা সম্ভব নয় । উদাহরণস্বরূপ, যখন আমরা এটির মতো কল করি:

if (isset(some_var)) {

}

function issset() {
    // function definition
}

জাভাস্ক্রিপ্ট ট্রিগার Uncaught ReferenceError: some_var is not defined at (file_name):line_number। এই আচরণ সম্পর্কে গুরুত্বপূর্ণ এবং লক্ষণীয় বিষয় হ'ল অস্তিত্বশীল ভেরিয়েবলগুলি স্বাভাবিক ফাংশনে স্থান দেওয়ার চেষ্টা করার সময় একটি ত্রুটি ট্রিগার হয়ে যায়।

তবে পিএইচপি-তে isset() আসলে নিয়মিত ফাংশন হয় না তবে ভাষা গঠন হয়। এর অর্থ তারা নিজেরাই পিএইচপি ভাষার একটি অংশ, ফাংশনগুলির সাধারণ নিয়মে খেলবেন না এবং তাই অস্তিত্বহীন ভেরিয়েবলগুলির জন্য ত্রুটিটি ট্রিগার না করে পালিয়ে যেতে পারেন। ভেরিয়েবলের উপস্থিতি আছে কি নেই তা বের করার চেষ্টা করার সময় এটি গুরুত্বপূর্ণ। তবে জাভাস্ক্রিপ্টে এটি অস্থির ভেরিয়েবলের সাথে ফাংশন কল বলতে প্রথমে ত্রুটি ঘটায়।

আমার বক্তব্যটি হ'ল আমরা এটিকে সমতুল্য জাভাস্ক্রিপ্ট ফাংশন হিসাবে লিখতে পারি না তবে আমরা এর মতো কিছু করতে পারি

if (typeof some_var !== 'undefined') {
   // your code here
}

আপনি যদি ঠিক একই প্রভাব করতে চান তবে পিএইচপি এছাড়াও চেক পরিবর্তনযোগ্য নয় NULL

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

$baz = null;
var_dump(isset($baz));        -> false

সুতরাং, আমরা এটি জাভাস্ক্রিপ্টের সাথে অন্তর্ভুক্ত করতে পারি তবে এটি দেখতে এর মতো দেখাচ্ছে:

if (typeof some_var !== 'undefined' && some_var !== null) {
   // your code here
}


0

ES6 মধ্যে সতর্কতা অবলম্বন করা আবশ্যক , সমস্ত পূর্ববর্তী সমাধান কাজ নাও আপনি যদি একটি ঘোষণা চেক করতে চান যদি এলইটি পরিবর্তনশীল এবং এটি ঘোষণা যদি না হয় তাহলে

উদাহরণ

let myTest = 'text';

if(typeof myTest === "undefined") {
    var myTest = 'new text'; // can't be a let because let declare in a scope
}

আপনি একটি ত্রুটি দেখতে পাবেন

আনকাচড সিনট্যাক্স এরির: ইন্ডেন্টিফায়ার 'মাই টেস্ট' ইতিমধ্যে ঘোষণা করা হয়েছে

সমাধানটি হ'ল এটি একটি ভার দ্বারা পরিবর্তন করা

var myTest = 'text'; // I replace let by a var

if(typeof myTest === "undefined") {
    var myTest = 'new text';
}

অন্য সমাধানের জন্য যদি আপনি কোনও ভার দ্বারা কোনও লেট পরিবর্তন করতে পারেন তবে আপনাকে আপনার ভেরি মুছে ফেলতে হবে

let myTest = 'text';

if(typeof myTest === "undefined") {
    myTest = 'new text'; // I remove the var declaration
}

-1
    isset('user.permissions.saveProject', args);

    function isset(string, context) {
        try {
            var arr = string.split('.');
            var checkObj = context || window;

            for (var i in arr) {
                if (checkObj[arr[i]] === undefined) return false;
                checkObj = checkObj[arr[i]];
            }

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