জাভাস্ক্রিপ্টে পরিবর্তনশীল প্রকারের সন্ধান করা


146

জাভাতে, আপনি এর পরিবর্তনটি ব্যবহার করতে instanceOfবা getClass()কোনও ভেরিয়েবল ব্যবহার করতে পারেন ।

জাভাস্ক্রিপ্টে ভেরিয়েবলের ধরণটি কীভাবে খুঁজে পাব যা জোরালোভাবে টাইপ করা যায় না?

উদাহরণস্বরূপ, আমি কীভাবে জানতে পারি যে barএটি একটি Booleanবা ক Number, বা এ String?

function foo(bar) {
    // what do I do here?
}

এছাড়াও দেখুন: stackoverflow.com/questions/24318654
dreftymac

উত্তর:


242

ব্যবহার typeof:

> typeof "foo"
"string"
> typeof true
"boolean"
> typeof 42
"number"

সুতরাং আপনি এটি করতে পারেন:

if(typeof bar === 'number') {
   //whatever
}

সতর্কতা অবলম্বন করুন যদি আপনি এই আদিমগুলি তাদের অবজেক্টের মোড়কের সাথে সংজ্ঞায়িত করেন (যা আপনার কখনই করা উচিত নয়, যেখানে সম্ভব সেখানে আক্ষরিক ব্যবহার করুন):

> typeof new Boolean(false)
"object"
> typeof new String("foo")
"object"
> typeof new Number(42)
"object"

অ্যারের ধরণ এখনও রয়েছে object। এখানে আপনার সত্যিকারের instanceofঅপারেটরের প্রয়োজন ।

হালনাগাদ:

আর একটি আকর্ষণীয় উপায় হ'ল এর আউটপুট পরীক্ষা করা Object.prototype.toString:

> Object.prototype.toString.call([1,2,3])
"[object Array]"
> Object.prototype.toString.call("foo bar")
"[object String]"
> Object.prototype.toString.call(45)
"[object Number]"
> Object.prototype.toString.call(false)
"[object Boolean]"
> Object.prototype.toString.call(new String("foo bar"))
"[object String]"
> Object.prototype.toString.call(null)
"[object Null]"
> Object.prototype.toString.call(/123/)
"[object RegExp]"
> Object.prototype.toString.call(undefined)
"[object Undefined]"

এটির সাথে আপনাকে আদিম মান এবং বস্তুর মধ্যে পার্থক্য করতে হবে না।


প্রোটো ব্যবহারের নীচের দিকটি কী হবে। কনস্ট্রাক্টর.নাম একটি সিপল ফাংশনটি হ'ল: ফাংশন getVariableType (অবজেক্ট) {রিটার্ন (অবজেক্ট .__ প্রোটো__ কনস্ট্রাক্টর.নেম); }
স্টু

উপরে তালিকাভুক্ত ফাংশন সংজ্ঞায় আপডেট করুন: ফাংশন getVariableType (অবজেক্ট) {রিটার্ন (অবজেক্ট === অপরিজ্ঞাত? "অপরিজ্ঞাত": অবজেক্ট __প্রোট__.constructor.name);
স্টু

29

টাইপফ শুধুমাত্র "আদিম" ধরণের যেমন সংখ্যা, বুলিয়ান, অবজেক্ট, স্ট্রিং এবং চিহ্নগুলি প্রত্যাবর্তনের জন্য ভাল। আপনি instanceofকোনও বস্তু নির্দিষ্ট ধরণের কিনা তা পরীক্ষা করতেও ব্যবহার করতে পারেন।

function MyObj(prop) {
  this.prop = prop;
}

var obj = new MyObj(10);

console.log(obj instanceof MyObj && obj instanceof Object); // outputs true

23

ব্যবহার type:

// Numbers
typeof 37                === 'number';
typeof 3.14              === 'number';
typeof Math.LN2          === 'number';
typeof Infinity          === 'number';
typeof NaN               === 'number'; // Despite being "Not-A-Number"
typeof Number(1)         === 'number'; // but never use this form!

// Strings
typeof ""                === 'string';
typeof "bla"             === 'string';
typeof (typeof 1)        === 'string'; // typeof always return a string
typeof String("abc")     === 'string'; // but never use this form!

// Booleans
typeof true              === 'boolean';
typeof false             === 'boolean';
typeof Boolean(true)     === 'boolean'; // but never use this form!

// Undefined
typeof undefined         === 'undefined';
typeof blabla            === 'undefined'; // an undefined variable

// Objects
typeof {a:1}             === 'object';
typeof [1, 2, 4]         === 'object'; // use Array.isArray or Object.prototype.toString.call to differentiate regular objects from arrays
typeof new Date()        === 'object';
typeof new Boolean(true) === 'object'; // this is confusing. Don't use!
typeof new Number(1)     === 'object'; // this is confusing. Don't use!
typeof new String("abc") === 'object';  // this is confusing. Don't use!

// Functions
typeof function(){}      === 'function';
typeof Math.sin          === 'function';

ব্যবহারে কোনও সমস্যা নেই Number(1), Boolean(true)...কেবলমাত্র যখন সমস্যা আপনি ব্যবহার করেন newএবং একটি বক্সযুক্ত বস্তু তৈরি হয় তখন সেগুলি ফাংশন হিসাবে ব্যবহার করা আসলে অন্যান্য ধরণের থেকে রূপান্তরিত করতে কার্যকর হতে পারে। Boolean(0) === false, Number(true) === 1
জুয়ান মেন্ডেস

কি null? typeof null'অবজেক্ট'
ধীরাজ

15

জাভাস্ক্রিপ্টে আপনি টাইপফ ফাংশনটি ব্যবহার করে এটি করতে পারেন

function foo(bar){
  alert(typeof(bar));
}

3
আমি আমার উত্তরে উল্লেখ করেছি, টাইপফ কেবল নম্বর, বুলিয়ান, অবজেক্ট, স্ট্রিং প্রদান করবে। অ্যারে, রেজিপ্সপ বা কাস্টম প্রকারের মতো অন্য কোনও ধরণের নির্ধারণের জন্য কার্যকর নয়।
হুয়ান মেন্ডেস

7

অন্যান্য উত্তরের চেয়ে কিছুটা বেশি ECMAScript-5.1-সুনির্দিষ্ট হতে (কেউ কেউ প্যাডেন্টিক বলতে পারে):

জাভাস্ক্রিপ্টে, ভেরিয়েবল (এবং বৈশিষ্ট্য) এর ধরণ নেই: মানগুলি হয়। আরও, এখানে 6 টি ধরণের মান রয়েছে: অপরিজ্ঞাত, নাল, বুলিয়ান, স্ট্রিং, সংখ্যা এবং অবজেক্ট। (প্রযুক্তিগতভাবে, এখানে 7 "স্পেসিফিকেশন প্রকারের "ও রয়েছে, তবে আপনি এই ধরণের মানগুলিকে বস্তুর বৈশিষ্ট্য বা ভেরিয়েবলের মান হিসাবে সংরক্ষণ করতে পারবেন না - ভাষাটি কীভাবে কাজ করে তা নির্ধারণ করার জন্য এগুলি কেবল অনুমানের মধ্যেই ব্যবহৃত হয় The আমি তালিকাভুক্ত 6 প্রকারের থেকে আপনি স্পষ্টভাবে ম্যানিপুলেট করতে পারেন))

"X এর ধরণ" সম্পর্কে কথা বলতে চাইলে স্পেকটি "টাইপ (এক্স)" স্বরলিপি ব্যবহার করে। এটি কেবল অনুমানের মধ্যে ব্যবহৃত একটি স্বরলিপি: এটি ভাষার কোনও বৈশিষ্ট্য নয়।

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

function Type(x) { 
    if (x === null) {
        return 'Null';
    }

    switch (typeof x) {
    case 'undefined': return 'Undefined';
    case 'boolean'  : return 'Boolean';
    case 'number'   : return 'Number';
    case 'string'   : return 'String';
    default         : return 'Object';
    }
}


ECMAScript 5.1 এ নেই, নেই।
ওয়েস

6

আমি হতাশাবোধ করি যে typeofএতটা সীমাবদ্ধ। এখানে একটি উন্নত সংস্করণ:

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

            return 'object';
        // object literals
        default:
            return typeof(obj);
    }   
};

নমুনা পরীক্ষা:

realtypeof( '' ) // "string"
realtypeof( new String('') ) // "[object String]"
Object.prototype.toString.call("foo bar") //"[object String]" 

3

অন্তর্নির্মিত জেএস ধরণের জন্য আপনি ব্যবহার করতে পারেন:

function getTypeName(val) {
    return {}.toString.call(val).slice(8, -1);
}

এখানে আমরা 'অবজেক্ট' শ্রেণি থেকে 'টসস্ট্রিং' পদ্ধতি ব্যবহার করি যা অন্য ধরণের একই পদ্ধতির চেয়ে পৃথকভাবে কাজ করে।

উদাহরণ:

// Primitives
getTypeName(42);        // "Number"
getTypeName("hi");      // "String"
getTypeName(true);      // "Boolean"
getTypeName(Symbol('s'))// "Symbol"
getTypeName(null);      // "Null"
getTypeName(undefined); // "Undefined"

// Non-primitives
getTypeName({});            // "Object"
getTypeName([]);            // "Array"
getTypeName(new Date);      // "Date"
getTypeName(function() {}); // "Function"
getTypeName(/a/);           // "RegExp"
getTypeName(new Error);     // "Error"

আপনার যদি শ্রেণীর নাম প্রয়োজন হয় তবে আপনি ব্যবহার করতে পারেন:

instance.constructor.name

উদাহরণ:

({}).constructor.name       // "Object"
[].constructor.name         // "Array"
(new Date).constructor.name // "Date"

function MyClass() {}
let my = new MyClass();
my.constructor.name         // "MyClass"

তবে ES2015 এ এই বৈশিষ্ট্যটি যুক্ত করা হয়েছিল


1

এখানে সম্পূর্ণ সমাধান।

আপনি এটিকে আপনার প্রকল্পগুলিতে সহায়তা সহায়ক শ্রেণি হিসাবেও ব্যবহার করতে পারেন।

"use strict";
/**
 * @description Util file
 * @author Tarandeep Singh
 * @created 2016-08-09
 */

window.Sys = {};

Sys = {
  isEmptyObject: function(val) {
    return this.isObject(val) && Object.keys(val).length;
  },
  /** This Returns Object Type */
  getType: function(val) {
    return Object.prototype.toString.call(val);
  },
  /** This Checks and Return if Object is Defined */
  isDefined: function(val) {
    return val !== void 0 || typeof val !== 'undefined';
  },
  /** Run a Map on an Array **/
  map: function(arr, fn) {
    var res = [],
      i = 0;
    for (; i < arr.length; ++i) {
      res.push(fn(arr[i], i));
    }
    arr = null;
    return res;
  },
  /** Checks and Return if the prop is Objects own Property */
  hasOwnProp: function(obj, val) {
    return Object.prototype.hasOwnProperty.call(obj, val);
  },
  /** Extend properties from extending Object to initial Object */
  extend: function(newObj, oldObj) {
    if (this.isDefined(newObj) && this.isDefined(oldObj)) {
      for (var prop in oldObj) {
        if (this.hasOwnProp(oldObj, prop)) {
          newObj[prop] = oldObj[prop];
        }
      }
      return newObj;
    } else {
      return newObj || oldObj || {};
    }
  }
};

// This Method will create Multiple functions in the Sys object that can be used to test type of
['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Object', 'Array', 'Undefined']
.forEach(
  function(name) {
    Sys['is' + name] = function(obj) {
      return toString.call(obj) == '[object ' + name + ']';
    };
  }
);
<h1>Use the Helper JavaScript Methods..</h1>
<code>use: if(Sys.isDefined(jQuery){console.log("O Yeah... !!");}</code>

রফতানিযোগ্য কমনজেস মডিউল বা প্রয়োজনীয় জেএস মডিউলটির জন্য ....

"use strict";

/*** Helper Utils ***/

/**
 * @description Util file :: From Vault
 * @author Tarandeep Singh
 * @created 2016-08-09
 */

var Sys = {};

Sys = {
    isEmptyObject: function(val){
        return this.isObject(val) && Object.keys(val).length;
    },
    /** This Returns Object Type */
    getType: function(val){
        return Object.prototype.toString.call(val);
    },
    /** This Checks and Return if Object is Defined */
    isDefined: function(val){
        return val !== void 0 || typeof val !== 'undefined';
    },
    /** Run a Map on an Array **/
    map: function(arr,fn){
        var res = [], i=0;
        for( ; i<arr.length; ++i){
            res.push(fn(arr[i], i));
        }
        arr = null;
        return res;
    },
    /** Checks and Return if the prop is Objects own Property */
    hasOwnProp: function(obj, val){
        return Object.prototype.hasOwnProperty.call(obj, val);
    },
    /** Extend properties from extending Object to initial Object */
    extend: function(newObj, oldObj){
        if(this.isDefined(newObj) && this.isDefined(oldObj)){
            for(var prop in oldObj){
                if(this.hasOwnProp(oldObj, prop)){
                    newObj[prop] = oldObj[prop];
                }
            }
            return newObj;
        }else {
            return newObj || oldObj || {};
        }
    }
};

/**
 * This isn't Required but just makes WebStorm color Code Better :D
 * */
Sys.isObject
    = Sys.isArguments
    = Sys.isFunction
    = Sys.isString
    = Sys.isArray
    = Sys.isUndefined
    = Sys.isDate
    = Sys.isNumber
    = Sys.isRegExp
    = "";

/** This Method will create Multiple functions in the Sys object that can be used to test type of **/

['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Object', 'Array', 'Undefined']
    .forEach(
        function(name) {
            Sys['is' + name] = function(obj) {
                return toString.call(obj) == '[object ' + name + ']';
            };
        }
    );


module.exports = Sys;

বর্তমানে পাবলিক গিট রেপো ব্যবহার করছেন। গিথুব প্রকল্প

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

আপনি এটিও পরীক্ষা করতে পারবেন যে অবজেক্টটি সংজ্ঞায়িত বা টাইপ হ'ল ফাংশন বা অবজেক্টটি খালি ... ইত্যাদি

  • Sys.isObject
  • Sys.isArguments
  • Sys.isFunction
  • Sys.isString
  • Sys.isArray
  • Sys.isUndefined
  • Sys.isDate
  • Sys.isNumber
  • Sys.isRegExp

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

var m = function(){};
Sys.isObject({});
Sys.isFunction(m);
Sys.isString(m);

console.log(Sys.isDefined(jQuery));

1

জাভাস্ক্রিপ্টে সবকিছুই একটি বস্তু

console.log(type of({}))  //Object
console.log(type of([]))  //Object

রিয়েল টাইপ পেতে , এটি ব্যবহার করুন

console.log(Object.prototype.toString.call({}))   //[object Object]
console.log(Object.prototype.toString.call([]))   //[object Array]

আশাকরি এটা সাহায্য করবে

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