জাভাস্ক্রিপ্টে কোনও মান একটি বস্তু কিনা তা পরীক্ষা করুন


1359

কোনও মান জাভাস্ক্রিপ্টে একটি অবজেক্ট কিনা তা আপনি কীভাবে চেক করবেন?


4
একটি পরিবর্তনশীল একটি পরিবর্তনশীল। এটি কোনও বস্তুর উল্লেখ করতে পারে। এছাড়াও, আপনি "অবজেক্ট" সংজ্ঞায়িত করতে চাইতে পারেন - উত্তর এবং মন্তব্যগুলি দেখায়, এখানে বিভিন্ন বিবাদী সংজ্ঞা রয়েছে (যেমন nullকোনও বস্তু কিনা )।

8
ওপি, আইএমও আপনার @ দানের উত্তরটি মেনে নেওয়া উচিত কারণ এটি সর্বোত্তম সমাধান এবং এটি অন্যান্য উত্তরগুলির উপরে তালিকাবদ্ধ করা উচিত যাতে এটি প্রথমে দেখা যায়। (যাদের উত্তরের উত্তর রয়েছে তাদের পক্ষে কোনও অপরাধ নেই))
টিফন

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

const isEmpty = things => {typof জিনিস === "অবজেক্ট"? ! জিনিস || ! অবজেক্ট.কিজ (জিনিস)। দৈর্ঘ্য:! জিনিস && জিনিস! == 0};
ময়ূর এস

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

উত্তর:


519

আপডেট :

এই উত্তরটি অসম্পূর্ণ এবং বিভ্রান্তিমূলক ফলাফল দেয় । উদাহরণস্বরূপ, জাভাস্ক্রিপ্ট nullটাইপ বিবেচনা করা হয় object, বিভিন্ন অন্যান্য প্রান্ত ক্ষেত্রে উল্লেখ না। নীচের প্রস্তাবটি অনুসরণ করুন এবং অন্যান্য "সর্বাধিক উত্সাহিত (এবং সঠিক!) উত্তর" তে যান


আসল উত্তর :

ব্যবহার করার চেষ্টা করুন typeof(var)এবং / অথবা var instanceof something

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


208
typeofএকটি অপারেটর, তাই প্রয়োজন নেই ()
যোশি

67
হ্যাঁ, দরকার নেই। আমি কেবল এটিকে পছন্দ করি।
মাইকেল ক্রেলিন - হ্যাকার

150
@ মাইকেল ক্রেলিন-হ্যাকার: এটি দুর্ভাগ্যজনক যেহেতু এটি মানুষকে বিভ্রান্ত করে
রাইটসেইডফ্রেড

11
@RightSaidFred, আমি এটি জন্য কোন ব্যাখ্যা আছে, কিন্তু আমি একেবারে এই এক্সপ্রেশন :) অতিরিক্ত বন্ধনী যোগ করার জন্য আনত নই
হ্যাকার - মাইকেল Krelin

117
এই উত্তরটি ভুল। typeofশূন্যের জন্য 'অবজেক্ট' প্রদান করে, যা কোনও বস্তু instanceofনয় এবং ব্যবহার করে তৈরি বস্তুর জন্য কাজ করে না Object.create(null)
নিকোলাই

1630

যদি typeof yourVariable === 'object'এটি কোনও বস্তু বা নাল হয়। যদি আপনি নাল বাদ দিতে চান তবে এটি তৈরি করুন typeof yourVariable === 'object' && yourVariable !== null


31
ফাংশনগুলিও অবজেক্ট এবং আপনার চেক এ অন্তর্ভুক্ত করা উচিত।
JS_Riddler

4
এই ক্ষেত্রে আরও yourVariable !== nullভাল অনুশীলন হবে?
হিপ্পিট্রেইল

9
@RightSaidFred মনে হইতেছে typeof null == 'object'সংশোধন করা হইনি ES6 । তারা বলেছে:This proposal has been rejected. It was implemented in V8 but it turned out that it broke a lot of existing sites. In the spirit of One JavaScript this is not feasible.
কনস্ট্যান্টিন স্মোলিয়ানিন

2
@ অরিওনের সহজ উত্তরটি হ'ল অ্যারেগুলি বস্তু হিসাবে বিবেচিত হয়। আরও বিস্তারিত উত্তরের জন্য আপনাকে পড়তে হবে typeofকারণ এতে কয়েকটি বিশেষ মামলা রয়েছে যা অগত্যা পুরোটা বোঝায় না। যদি আপনি অ্যারে এবং অ্যারে না এমন বস্তুর মধ্যে পার্থক্য করার চেষ্টা করছেন তবে আপনি অবশ্যই ব্যবহার করতে চাইবেন না typeof
ম্যাট ফেনউইক

8
সবচেয়ে ভালো উপায় @Tresdin চালানো হয় Object.prototype.toString.call(yourVar)হচ্ছে, yourVar কি পরিদর্শন করা প্রয়োজন। অ্যারেগুলির ক্ষেত্রে, Object.prototype.toString.call([1,2])প্রত্যাবর্তন[object Array]
জোসে রুই সান্টোস

537

জাভাস্ক্রিপ্টে "অবজেক্ট" সংজ্ঞায়িত করা যাকএমডিএন ডক্স অনুসারে , প্রতিটি মান হয় একটি বস্তু বা আদিম:

আদিম, আদিম মান

এমন একটি ডেটা যা কোনও অবজেক্ট নয় এবং এর কোনও পদ্ধতি নেই। জাভাস্ক্রিপ্টে ৫ টি আদিম ডেটাটাইপ রয়েছে: স্ট্রিং, সংখ্যা, বুলিয়ান, নাল, অপরিজ্ঞাত।

আদিম কি?

  • 3
  • 'abc'
  • true
  • null
  • undefined

কোন বস্তু (অর্থাত্ আদিম নয়) কী?

  • Object.prototype
  • সবকিছু থেকে অবতরণ Object.prototype
    • Function.prototype
      • Object
      • Function
      • function C(){} - ব্যবহারকারী সংজ্ঞায়িত ফাংশন
    • C.prototype- কোনও ব্যবহারকারী-সংজ্ঞায়িত ফাংশনের প্রোটোটাইপ সম্পত্তি: এটি কোনও C প্রোটোটাইপ নয়
      • new C() - "নতুন" ব্যবহারকারী-সংজ্ঞায়িত ফাংশন
    • Math
    • Array.prototype
      • অ্যারে
    • {"a": 1, "b": 2} - আক্ষরিক স্বরলিপি ব্যবহার করে তৈরি বস্তু
    • new Number(3) - আদিমদের চারপাশে মোড়ক
    • ... আরও অনেক জিনিস ...
  • Object.create(null)
  • সবকিছু একটি থেকে অবতরণ Object.create(null)

মানটি কোনও বস্তু কিনা তা কীভাবে পরীক্ষা করবেন

instanceof নিজে থেকে কাজ করবে না, কারণ এটি দুটি ক্ষেত্রে মিস করে:

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}

typeof x === 'object'মিথ্যা ধনাত্মক ( null) এবং মিথ্যা নেতিবাচক (ফাংশন) এর কারণে কাজ করবে না :

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}

Object.prototype.toString.call আদিম সকলের জন্য মিথ্যা ধনাত্মকতার কারণে কাজ করবে না:

> Object.prototype.toString.call(3)
"[object Number]"

> Object.prototype.toString.call(new Number(3))
"[object Number]"

সুতরাং আমি ব্যবহার:

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}

@ দানের উত্তরটিও কার্যকর বলে মনে হচ্ছে:

function isObject(obj) {
  return obj === Object(obj);
}

কারণ, এমডিএন ডক্স অনুসারে :

অবজেক্ট কনস্ট্রাক্টর প্রদত্ত মানের জন্য একটি অবজেক্ট র‌্যাপার তৈরি করে। মানটি যদি নাল বা অপরিজ্ঞাত হয় তবে এটি একটি খালি অবজেক্ট তৈরি করে এবং ফিরে আসবে, অন্যথায়, এটি প্রদত্ত মানের সাথে মিলিত কোনও প্রকারের বস্তুটি ফেরত দেবে। যদি মানটি ইতিমধ্যে একটি অবজেক্ট হয় তবে এটি মানটি ফিরিয়ে দেবে।


তৃতীয় উপায় যা কাজ করে বলে মনে হচ্ছে (এটি 100% কিনা তা নিশ্চিত নয়) হ'ল এটি ব্যবহার করা Object.getPrototypeOfযা কোন যুক্তি যদি তার যুক্তি না হয় তবে ব্যতিক্রম করে :

// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})

22
obj === Object(obj)trueঅ্যারে জন্য ফেরত ।
ওনুর ইল্ডারিয়াম

5
var x = []; console.log(x === Object(x)); // return true
আলোকসজ্জা

6
@Illuminator অ্যারে হয় জাভাস্ক্রিপ্ট বস্তু, আমি আমার উত্তর উল্লেখ করেছে।
ম্যাট ফেনউইক

1
getPrototypeOfযেমন প্রত্যাহারিত প্রক্সিগুলির সাথে কাজ করে না, যা বস্তু তবে নিক্ষেপ করে।
ওরিওল

2
এটি ({}).toString.apply(obj) === '[object Object]'অ্যারে নয় এমন অ্যারে এবং অবজেক্টগুলির মধ্যে কেন পার্থক্য করবে না
মরিসিওজুয়ানস

295

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

_.isObject = function(obj) {
  return obj === Object(obj);
};

হালনাগাদ

ভি 8-র পূর্বের বাগ এবং গৌণ মাইক্রো স্পিড অপ্টিমাইজেশনের কারণে পদ্ধতিটি আন্ডারস্কোর.জেস 1.7.0 (আগস্ট 2014) থেকে নিম্নলিখিত হিসাবে দেখায় :

_.isObject = function(obj) {
  var type = typeof obj;
  return type === 'function' || type === 'object' && !!obj;
};

57
জাভাস্ক্রিপ্টে একটি অ্যারেও একটি বস্তু, তাই বেশিরভাগ সময় আপনি অ্যারেটি বাদ দিতে চান:return obj === Object(obj) && Object.prototype.toString.call(obj) !== '[object Array]'
দান

22
আপনি একটি অ্যারে বাদ দিবেন কেন? এগুলি সম্পূর্ণ পরিচ্ছন্ন বস্তু।
নিকোলাই

65
কারণ অধিকাংশ সময় আপনাকে একটি [] একটি ফাংশনে ইনপুট হিসাবে উদাহরণস্বরূপ থেকে একটি {} পার্থক্য করতে চান
Daan

5
@ নিকোলাই .. এবং নেস্টেড বস্তুর মাধ্যমে পুনরাবৃত্তি করার জন্য।
রিকি বয়েস

6
দুর্দান্ত উত্তর। হ্যান্ডলগুলিও null। গ্রহণযোগ্য উত্তর হওয়া উচিত।
টিফন

179

Object.prototype.toString.call(myVar) ফিরে আসবে:

  • "[object Object]" যদি মাইভার একটি বস্তু হয়
  • "[object Array]" যদি মাইভার একটি অ্যারে হয়
  • প্রভৃতি

এটি এবং কেন এটি টাইপফোর একটি ভাল বিকল্প হিসাবে আরও তথ্যের জন্য, এই নিবন্ধটি দেখুন


12
আমি সম্প্রতি শিখেছি typeof [] === 'object'-> true। আপনার এই পদ্ধতির প্রয়োজন।
Jondlm

3
@ ক্রিসটফ আদিম এবং বস্তুর মধ্যে পার্থক্য করে না । Object.prototype.toString.call(3)-> "[object Number]"Object.prototype.toString.call(new Number(3))-> "[object Number]"
ম্যাট ফেনউইক

3
@ ম্যাটফেনউইক আমি মনে করি না যে ওপি এই ধরনের "অবজেক্ট" চিহ্নিত করার চেষ্টা করছে
ক্রিস্টোফ

3
@ খ্রিস্টোফ আপনি কী ভাবেন? আইএমএইচও, "অবজেক্ট" এর জন্য ওপি কর্তৃক প্রদত্ত অন্য কোনও সংজ্ঞার অভাবে, ইসিএস স্পেক জুড়ে ধারাবাহিকভাবে ব্যবহৃত হয় এমন একটির সাথে যাওয়া আমার পক্ষে সবচেয়ে যুক্তিসঙ্গত বলে মনে হয়।
ম্যাট ফেনউইক

getType=function(obj){return Object.prototype.toString.call(obj).match(/\[object (\w+)\]/)[1];};
মিঃ পলিহর্ইল

115

অতিরিক্ত ফাংশন কল (গতি) ছাড়াই কেবল অবজেক্ট বা অ্যারের বিরুদ্ধে পরীক্ষা করার জন্য। হিসাবে এখানে পোস্ট ।

isArray ()

isArray = function(a) {
    return (!!a) && (a.constructor === Array);
};
console.log(isArray(        )); // false
console.log(isArray(    null)); // false
console.log(isArray(    true)); // false
console.log(isArray(       1)); // false
console.log(isArray(   'str')); // false
console.log(isArray(      {})); // false
console.log(isArray(new Date)); // false
console.log(isArray(      [])); // true

আইসজেক্ট () - দ্রষ্টব্য: কেবলমাত্র অবজেক্ট লিটারেলের জন্য ব্যবহার করুন, কারণ এটি কাস্টম অবজেক্টগুলির জন্য যেমন নতুন তারিখ বা নতুন আপনারকাস্টমঅবজেক্টের জন্য মিথ্যা প্রদান করে।

isObject = function(a) {
    return (!!a) && (a.constructor === Object);
};
console.log(isObject(        )); // false
console.log(isObject(    null)); // false
console.log(isObject(    true)); // false
console.log(isObject(       1)); // false
console.log(isObject(   'str')); // false
console.log(isObject(      [])); // false
console.log(isObject(new Date)); // false
console.log(isObject(      {})); // true

isObjectশুধুমাত্র বস্তুর আক্ষরিক সাথে কাজ করে। যদি আমি একটি কাস্টম টাইপ তৈরি করি, টাইপের একটি উদাহরণ তৈরি করুন এবং এটি পরীক্ষা করুন, এটি ফিরে আসেfalse
উইকিনিলিয়ামস

3
@ জুপা: কি !! কি করে?

4
@ 3000 ভাল, যদি আমরা (!! ক) অংশটি বিস্ফোরিত করি তবে এটি নষ্ট এবং অপরিজ্ঞাত কোনও নির্মাণকারী নেই। (!! ক) এগুলি ফিল্টার করে ফেলে। এতে আপনার প্রশ্নের উত্তর হলো কি?
zupa

2
@ Zupa @ 3000 Boolean(a)লম্বা তবে অনেক বেশি স্বজ্ঞাত। শুধু ব্যবহার করবেন না new Boolean(a): ( এখানে কেন )!
জয়ভি 20'15

10
অবাক করা সেরা উত্তরটি এখন পর্যন্ত পৃষ্ঠায় রয়েছে। এটি মূলত প্রশ্নের উত্তর দেয়- এটি কি কোনও {চরিত্র দিয়ে শুরু করে জেএসএনে উপস্থাপন করা হবে । অ্যারের ক্ষেত্রে, যতক্ষণ না আপনার আইআই <9 সমর্থন করার প্রয়োজন নেই, আপনি Array.isArray()কোনও কিছু অ্যারে কিনা তা নির্ধারণ করতে ব্যবহার করতে পারেন । এটি আপনার সরবরাহিত সমস্ত পরীক্ষার কেস পাস করে।
কিপ

81

আমি সহজভাবে পছন্দ করি:

function isObject (item) {
  return (typeof item === "object" && !Array.isArray(item) && item !== null);
}

আইটেমটি যদি কোনও জেএস অবজেক্ট হয়, এবং এটি জেএস অ্যারে নয়, এবং এটি নয় null... যদি তিনটি সত্যই প্রমাণিত হয় তবে ফিরে আসুন true। তিনটি শর্তের মধ্যে কোনওটি যদি ব্যর্থ হয় তবে &&পরীক্ষাটি শর্ট সার্কিট হয়ে falseফিরে আসবে। nullযদি (আপনি কীভাবে ব্যবহার উপর নির্ভর করে আকাঙ্ক্ষিত পরীক্ষা বাদ দেওয়া যেতে পারে null)।

দস্তাবেজ:

http://devdocs.io/javascript/operators/typeof

http://devdocs.io/javascript/global_objects/object

http://devdocs.io/javascript/global_objects/array/isarray

http://devdocs.io/javascript/global_objects/null


3
কনসোল.লগ (আইসজেক্ট (নতুন তারিখ ())) সম্পর্কে কী? কেন একটি তারিখ একটি বস্তু হওয়া উচিত কিন্তু অ্যারে নয়?
স্কিরিমারচার

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

1
@ স্ট্যান অ্যারে অবশ্যই অবজেক্ট। নিশ্চিত না যে আপনি কেন ভাবেন যে বস্তুর কোনও lengthসম্পত্তি বা পদ্ধতি থাকতে পারে না push, Object.create(Array.prototype)এটি একটি নন-অ্যারে অবজেক্টের একটি তুচ্ছ কাউন্টারেক্সেক্সেল which অ্যারেগুলিকে বিশেষ করে তোলে তা হ'ল এগুলি একটি কাস্টম [[DefineOwnProperty]] প্রয়োজনীয় অভ্যন্তরীণ পদ্ধতি সহ বিদেশী বস্তু, তবে তারা এখনও অবজেক্ট are
ওরিওল

4
@ ওরিওল আমিও লিখিনি যে অ্যারেগুলি বস্তু নয় বা আমিও লিখিনি যে বস্তুর কোনও lengthসম্পত্তি থাকতে পারে না (আমি বোঝাতে চেয়েছিলাম যে অবজেক্টের অক্ষরগুলির lengthডিফল্টরূপে কোনও বৈশিষ্ট্য নেই )। আমি লিখেছি যে অ্যারেগুলি যৌক্তিক দৃষ্টিকোণ থেকে বস্তু নয় । আমি প্রোগ্রাম লজিক সম্পর্কে বলছি। অ্যারেটি "আসল" অ্যারে কিনা তা অবশ্যই পরীক্ষা করা প্রয়োজন এবং অবশ্যই "সত্য" বস্তু নয়। এটা কি Array.isArray()জন্য। আপনার কোনও ফাংশন কল্পনা করুন যা কোনও অবজেক্ট বা অবজেক্টের অ্যারে গ্রহণ করে। একটি বিশেষ গুণ বা পদ্ধতির জন্য অনুসন্ধান করা একটি নোংরা সমাধান। নেটিভ উপায় সবসময় ভাল।
StanE

2
typeof nullহয় "object", না "undefined"
2540625

80

ফাংশন সহ Array.isArray:

function isObject(o) {
  return o !== null && typeof o === 'object' && Array.isArray(o) === false;
}

ফাংশন ছাড়াই Array.isArray:

কেবলমাত্র বিস্মিত হয়েছে যে ভুল উত্তরের জন্য কতগুলি upvotes 😮
মাত্র 1 টি উত্তর আমার পরীক্ষায় উত্তীর্ণ হয়েছে !!! এখানে আমি আমার সরলীকৃত সংস্করণ তৈরি করেছি:

function isObject(o) {
  return o instanceof Object && o.constructor === Object;
}

আমার হিসাবে, এটি পরিষ্কার এবং সহজ, এবং ঠিক কাজ করে! এখানে আমার পরীক্ষা:

console.log(isObject({}));             // Will return: true
console.log(isObject([]));             // Will return: false
console.log(isObject(null));           // Will return: false
console.log(isObject(/.*/));           // Will return: false
console.log(isObject(function () {})); // Will return: false

আরও সময়: সমস্ত উত্তর এই পরীক্ষায় পাস করে না !!! 🙈


আপনি যদি সেই বিষয়টিকে নির্দিষ্ট শ্রেণীর উদাহরণ হিসাবে যাচাই করতে চান তবে আপনাকে আপনার নির্দিষ্ট শ্রেণীর সাথে কনস্ট্রাক্টর পরীক্ষা করতে হবে, যেমন:

function isDate(o) {
  return o instanceof Object && o.constructor === Date;
}

সাধারণ পরীক্ষা:

var d = new Date();
console.log(isObject(d)); // Will return: false
console.log(isDate(d));   // Will return: true

ফলস্বরূপ, আপনার কাছে কঠোর এবং শক্তিশালী কোড থাকবে!


যদি আপনি মত ফাংশন তৈরি করা হবে না isDate, isError, isRegExp, ইত্যাদি এই সাধারণ ফাংশন ব্যবহার করার অপশন বিবেচনা করতে পারেন:

function isObject(o) {
  return o instanceof Object && typeof o.constructor === 'function';
}

এটি পূর্বে উল্লিখিত সমস্ত পরীক্ষার ক্ষেত্রে সঠিকভাবে কাজ করবে না, তবে এটি সমস্ত বস্তুর (সমতল বা নির্মিত) যথেষ্ট good


isObjectObject.create(null)অভ্যন্তরীণ বাস্তবায়নের কারণে এখানে কাজ করা হবে না Object.createযা সম্পর্কে এখানে ব্যাখ্যা করা হয়েছে তবে আপনি isObjectআরও পরিশীলিত বাস্তবায়নে ব্যবহার করতে পারেন :

function isObject(o, strict = true) {
  if (o === null || o === undefined) {
    return false;
  }
  const instanceOfObject = o instanceof Object;
  const typeOfObject = typeof o === 'object';
  const constructorUndefined = o.constructor === undefined;
  const constructorObject = o.constructor === Object;
  const typeOfConstructorObject = typeof o.constructor === 'function';
  let r;
  if (strict === true) {
    r = (instanceOfObject || typeOfObject) && (constructorUndefined || constructorObject);
  } else {
    r = (constructorUndefined || typeOfConstructorObject);
  }
  return r;
};

এই প্রয়োগের উপর ভিত্তি করে এনপিএম ভি 1 তে ইতিমধ্যে প্যাকেজ তৈরি হয়েছে! এবং এটি পূর্বের বর্ণিত সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে! 🙂


সেরা উত্তর! এখানে
20:57

কারণ এটি আইজবজেক্ট (মাইডেটঅবজেক্ট) এর জন্য মিথ্যা প্রত্যাবর্তন করে, এটি প্রশ্নের উত্তর নয়। কোনও ভেরিয়েবল কোনও বস্তু কিনা তা তা জানায় না, কেবলমাত্র এটি কোনও নির্দিষ্ট শ্রেণীর একটি বস্তু। এখানে প্রশ্নটি একটি জেনেরিক ফাংশনের জন্য যা কোনও বস্তুর জন্য সত্য দেয়।
ইত্তানথোরজোশ

@ ইয়িটেনোথজোশ এটি একটি উত্তর প্রকৃতপক্ষে - আপনি সেই মামলার উল্লেখ করেছেন যা উত্তরে বর্ণিত হয়েছে, এবং বিন্দুটি - আপনার isDateশক্তিশালী কোডটি লেখার উদ্দেশ্যে আপনার ডেটঅবজেক্টের জন্য আপনাকে ব্যবহার করতে হবে অন্যথায় আপনার নখর isObjectপদ্ধতি হবে will
ভি। কোভপাক

@VladimirKovpak ব্যবহার Dateকারণ হ্যাঁ আমার মন্তব্যে মন্দ নির্বাচিত হয়েছে, উত্তর নিয়ে আলোচনা করেন Date। তবে Dateঅসীম সম্ভাব্য ক্লাসগুলির মধ্যে একটি মাত্র এবং পয়েন্টটি অন্য কোনও শ্রেণীর জন্য ধারন করে। উদাহরণ: class Foo() { }; var x = new Foo(); isObject(x)আয় false। আমি ঠিক জানি না ওপির ব্যবহারের ক্ষেত্রে কী, তবে দৃশ্যের ধারণা নেওয়া সহজ যেগুলিতে সমস্ত সম্ভাব্য ক্লাস সম্পর্কে জেনে রাখা এবং তাদের প্রত্যেকের বিরুদ্ধে বিশেষভাবে পরীক্ষা করা অপরিহার্য হতে চলেছে।
ইত্তানথোরজোশ

@ ইয়াতনোথজোশ আমি আমার উত্তর আপডেট করেছি। এবং আরও 1 টি কেস যুক্ত করা হয়েছে।
ভি। কোভপাক

40

হে ভগবান! আমি মনে করি এটি আগের চেয়ে আরও খাটো হতে পারে, এটি দেখুন:

সংক্ষিপ্ত এবং চূড়ান্ত কোড

function isObject(obj)
{
    return obj != null && obj.constructor.name === "Object"
}

console.log(isObject({})) // returns true
console.log(isObject([])) // returns false
console.log(isObject(null)) // returns false

ব্যাখ্যা

রিটার্ন প্রকার

টাইপ জাভাস্ক্রিপ্ট অবজেক্ট (সহ null) প্রদান"object"

console.log(typeof null, typeof [], typeof {})

তাদের নির্মাণকারীদের চেক করা হচ্ছে

তাদের constructorসম্পত্তি সম্পর্কিত সম্পত্তি যাচাই করা তাদের নামগুলি দিয়ে কাজ করে।

console.log(({}).constructor) // returns a function with name "Object"
console.log(([]).constructor) // returns a function with name "Array"
console.log((null).constructor) //throws an error because null does not actually have a property

ফাংশন.নামের পরিচয় দেওয়া হচ্ছে

Function.nameকোনও ক্রিয়াকলাপের "anonymous"জন্য বা ক্লোজারগুলির জন্য কেবল পঠন নামটি দেয় ।

console.log(({}).constructor.name) // returns "Object"
console.log(([]).constructor.name) // returns "Array"
console.log((null).constructor.name) //throws an error because null does not actually have a property

দ্রষ্টব্য: 2018 সালের হিসাবে, ফাংশন.নাম আইই https://developer.mozilla.org/en-US/docs/Web/JavaScript/References/Global_Objects/Function/name# ব্রাউজার_সামগ্রিকতাতে কাজ করতে পারে না


3
আমি সত্যিই এটি পছন্দ, সংক্ষিপ্ত এবং বিন্দু। এটি কেবল 1 টি জিনিস হিসাবে ব্যর্থ হয় যতদূর আমি দেখতে পাচ্ছি। যদি আপত্তি = Object.create(null)এবং বেশিরভাগ ক্ষেত্রেই আপনি তা কেন করবেন ...?
জুলিয়ান নাইট

29

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

এখন, কল্পনা করুন আপনার কাছে এই বস্তুটি একটি আসল অবজেক্ট (নাল বা ফাংশন বা অ্যারে নয়):

var obj = {obj1: 'obj1', obj2: 'obj2'};

খাঁটি জাভাস্ক্রিপ্ট:

//that's how it gets checked in angular framework
function isObject(obj) {
  return obj !== null && typeof obj === 'object';
}

অথবা

//make sure the second object is capitalised 
function isObject(obj) {
   return Object.prototype.toString.call(obj) === '[object Object]';
}

অথবা

function isObject(obj) {
    return obj.constructor.toString().indexOf("Object") > -1;
}

অথবা

function isObject(obj) {
    return obj instanceof Object;
}

উপরের মতো আপনার কোডগুলিতে কল করে আপনি কেবল এই ফাংশনগুলির একটি ব্যবহার করতে পারেন এবং এটি যদি কোনও বস্তু হয় তবে তা সত্য হবে:

isObject(obj);

আপনি যদি কোনও জাভাস্ক্রিপ্ট কাঠামো ব্যবহার করছেন তবে তারা সাধারণত আপনার জন্য এই ধরণের ফাংশন প্রস্তুত করে থাকে, এগুলির মধ্যে কয়েকটি হ'ল:

JQuery:

 //It returns 'object' if real Object;
 jQuery.type(obj);

কৌণিক:

angular.isObject(obj);

ইন্ডস্কোর এবং লোডাশ:

//(NOTE: in Underscore and Lodash, functions, arrays return true as well but not null)
_.isObject(obj);

আপনি এটি পরীক্ষা করতে চান যে এটি কোনও অ্যারে নয়। সুতরাং ফাংশনটি আইজ অবজেক্ট (আপত্তি) {রিটার্ন অবজেক্ট! == নাল && টাইপজ আপত্তি === 'অবজেক্ট' &&! অ্যারে.আইআররে (আপত্তি); }
ম্যাট গু

আমি আপনার সাথে একমত, তবে আপনি যেমন মন্তব্যটিতে দেখেছেন, এটি কৌনিক জেগুলিতে এটি কীভাবে হয়েছিল এবং আমি ফাংশনের সামনের মন্তব্যে এটি উল্লেখ করেছি, তারা অ্যারেটিকে একটি অবজেক্ট হিসাবে গণ্য করেছে ... আরও তথ্যের জন্য এখানে দেখুন: ডক্স .angularjs.org / API / NG / ফাংশন / angular.isObject
আলিরেজা

24

এটি "একটি বস্তু" দিয়ে আপনি কী বোঝাতে চেয়েছেন তা নির্ভর করে। আপনি যদি এমন কিছু চান যা আদিম নয় , অর্থাৎ এমন নতুন জিনিস যা আপনি নতুন বৈশিষ্ট্য সেট করতে পারেন তবে এই কৌশলটি করা উচিত:

function isAnyObject(value) {
    return value != null && (typeof value === 'object' || typeof value === 'function');
}

এটা তোলে প্রিমিটিভের বাদ (সাধারণ সংখ্যার / NaN/ Infinity, প্লেইন স্ট্রিং, চিহ্ন, true/ false, undefinedএবং null) কিন্তু অন্য সব কিছুর (তত্সহ জন্য সত্য ফেরত পাঠাবেন Number, Booleanএবং Stringবস্তু)। নোট করুন যে জেএস কোন "হোস্ট" অবজেক্টগুলি যেমন সংজ্ঞা দেয় না যেমন ব্যবহার করা হয় windowবা consoleফিরে আসা উচিত typeof, সুতরাং এগুলি যেমন চেক দিয়ে আচ্ছাদন করা শক্ত।

যদি আপনি জানতে চান যে কোনও কিছু "প্লেইন" অবজেক্ট, অর্থাৎ এটি আক্ষরিক হিসাবে {}বা এর সাথে তৈরি হয়েছিল তবে Object.create(null)আপনি এটি করতে পারেন:

function isPlainObject(value) {
    if (Object.prototype.toString.call(value) !== '[object Object]') {
        return false;
    } else {
        var prototype = Object.getPrototypeOf(value);
        return prototype === null || prototype === Object.prototype;
    }
}

সম্পাদনা করুন 2018 : যেহেতু Symbol.toStringTagএখন আউটপুট কাস্টমাইজ পারবেন Object.prototype.toString.call(...), isPlainObjectশক্তি প্রত্যাবর্তন উপরের ফাংশন falseকিছু ক্ষেত্রে এমনকি যখন বস্তুর একটি আক্ষরিক তার জীবন শুরু করেন। যুক্তিযুক্তভাবে, কনভেনশন অনুসারে একটি কাস্টম স্ট্রিং ট্যাগযুক্ত কোনও বস্তু আর কোনও সরল বস্তু নয়, তবে এটি জাভাস্ক্রিপ্টে একটি সরল বস্তু এমনকি কী এর সংজ্ঞাটিকে আরও বিচলিত করে তুলেছে।


কেন টাইফফ === 'ফাংশন' অবজেক্ট হিসাবে বিবেচিত? একটি ফাংশন একটি বস্তু নয়, তাই না? "নতুন মাইফংক ()" একটি বস্তুতে পরিণত হবে, হ্যাঁ, তবে একটি সরল ফাংশন?
StanE

না, প্রতিটি ফাংশন জাভাস্ক্রিপ্টে এটি তৈরি করা হয়েছে তা নির্বিশেষে একটি বস্তু। আপনি তাদের উপর সম্পত্তি সেট করতে পারেন (যদি না সেগুলি হিমায়িত হয়) তবে তারা instanceof Objectহ'ল দুটি অভিন্ন ফাংশন লিটারাল কঠোরভাবে সমান হয় না, তারা রেফারেন্স ইত্যাদির মাধ্যমে পাস হয়
সর্বশেষ সন্তান

21

আমার Godশ্বর, অন্যান্য উত্তরে খুব বিভ্রান্তি।

সংক্ষিপ্ত উত্তর

typeof anyVar == 'object' && anyVar instanceof Object && !(anyVar instanceof Array)

এটি পরীক্ষা করতে কেবল ক্রোম কনসোলে নিম্নলিখিত বিবৃতিগুলি চালান।

মামলা 1.

var anyVar = {};
typeof anyVar == 'object' && anyVar instanceof Object && !(anyVar instanceof Array) // true

মামলা 2।

anyVar = [];
typeof anyVar == 'object' && anyVar instanceof Object && !(anyVar instanceof Array) // false

মামলা 3।

anyVar = null;
typeof anyVar == 'object' && anyVar instanceof Object && !(anyVar instanceof Array); // false

ব্যাখ্যা

ঠিক আছে। এটিকে ভেঙে দিন

typeof anyVar == 'object'তিন প্রার্থীর কাছ থেকে সত্য প্রত্যাবর্তিত হয়েছে - [], {} and null,

anyVar instanceof Object এই প্রার্থীদের দু'জনে নামিয়ে দেওয়া - [], {}

!(anyVar instanceof Array) শুধুমাত্র একটি থেকে সংকীর্ণ - {}

ড্রাম রোল প্লিজ!

এটি দ্বারা আপনি ইতিমধ্যে জাভাস্ক্রিপ্টে অ্যারের জন্য কীভাবে চেক করবেন তা শিখে থাকতে পারেন।


2
দ্রষ্টব্য, এটি falseযখন anyVarফাংশন হয় তখন এটি (পছন্দসই হিসাবে ) ও ফিরে আসে ।
জেমি বার্চ

18

কোনও মানের ধরণের চেক করার সবচেয়ে যুক্তিসঙ্গত উপায়টি typeofঅপারেটর বলে মনে হয় । একমাত্র সমস্যা হ'ল এটি ভয়াবহভাবে ভেঙে গেছে:

  • এটি এর "object"জন্য ফিরে আসে null, যা নুল টাইপের অন্তর্গত।
  • এটি "function"কলযোগ্য বস্তুর জন্য প্রত্যাবর্তন করে, যা বস্তুর ধরণের to
  • এটি অ-স্ট্যান্ডার্ড অ-কলযোগ্যযোগ্য বস্তুর জন্য যা চায় তা (প্রায়) ফিরে আসতে পারে। উদাহরণস্বরূপ, আইই পছন্দ করেছে বলে মনে হয়েছিল "unknown"। একমাত্র নিষিদ্ধ ফলাফলগুলি "function"এবং আদিম ধরণের।

typeofঅ- nullআদিমদের জন্য কেবল নির্ভরযোগ্য । সুতরাং মানটি কোনও বস্তু কিনা তা পরীক্ষা করার উপায়টি নিশ্চিত করবে যে যে স্ট্রিংটি এসেছে typeofতার কোনও আদিমতার সাথে মিল নেই এবং এটি বস্তুটি নয় null। তবে সমস্যাটি হ'ল ভবিষ্যতের মানক একটি নতুন আদিম ধরণের প্রবর্তন করতে পারে এবং আমাদের কোড এটিকে একটি অবজেক্ট হিসাবে বিবেচনা করবে। নতুন ধরনের প্রায়শই দেখা যায় না, তবে উদাহরণস্বরূপ ECMAScript 6 সিম্বল প্রকারটি প্রবর্তন করেছিল।

অতএব, পরিবর্তে typeof, আমি কেবলমাত্র এমন পদ্ধতির পরামর্শ দিচ্ছি যার ফলাফলের উপর নির্ভর করে যদি মান কোনও বস্তু হয় বা না হয়। নিম্নলিখিত একটি হতে মনস্থ করে

কোনও মান অবজেক্ট টাইপের সাথে সম্পর্কিত কিনা তা পরীক্ষা করার সঠিক উপায়গুলির বিস্তৃত তবে পরিপূর্ণ নয়।

  • Object নির্মাতা

    Objectকন্সট্রাকটর একটি বস্তু প্রেরণ যুক্তি coerces। যদি এটি ইতিমধ্যে কোনও অবজেক্ট থাকে তবে একই বস্তুটি ফিরে আসবে।

    অতএব, আপনি এটি কোনও বস্তুর সাথে মান চাপিয়ে দেওয়ার জন্য ব্যবহার করতে পারেন এবং সেই বস্তুকে মূল মানের সাথে কঠোরভাবে তুলনা করতে পারেন।

    নিম্নলিখিত ফাংশনটির জন্য ECMAScript 3 প্রয়োজন যা প্রবর্তিত ===:

    function isObject(value) { /* Requires ECMAScript 3 or later */
      return Object(value) === value;
    }

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

  • কন্সট্রাকটর

    আপনি যখন কোনও কনস্ট্রাক্টর ইনস্ট্যান্ট করেন, এটি সুনির্দিষ্টভাবে তৈরির উদাহরণের চেয়ে আলাদা মান দিতে পারে। তবে কোনও মান না থাকলে মানটি উপেক্ষা করা হবে it's

    নিম্নলিখিত ফাংশনটির জন্য ECMAScript 3 প্রয়োজন যা কনস্ট্রাক্টরকে অ-অবজেক্টগুলি ফেরত দেওয়ার অনুমতি দেয়। ECMAScript 3 এর আগে যা ত্রুটি ছুঁড়েছিল, কিন্তু tryবিবৃতিগুলি তখন উপস্থিত ছিল না।

    function isObject(value) { /* Requires ECMAScript 3 or later */
      return new function() { return value; }() === value;
    }

    পূর্ববর্তী উদাহরণের তুলনায় কিছুটা কম সরল হলেও, এটি কোনও বিশ্বব্যাপী সম্পত্তির উপর নির্ভর করে না এবং এটি সবচেয়ে নিরাপদ হতে পারে।

  • this মান

    পুরানো ECMAScript স্পেসিফিকেশনগুলির জন্য thisএকটি বস্তুর মান হওয়া দরকার। ECMAScript 3 চালু হয়েছে Function.prototype.call, যা একটি স্বেচ্ছাসেবী thisমান সহ একটি ফাংশন কল করতে অনুমতি দেয় , কিন্তু একটি বস্তুকে জোর করে।

    ECMAScript 5 একটি কঠোর মোড প্রবর্তন করেছে যা এই আচরণটি সরিয়ে ফেলেছে, কিন্তু opালু মোডে আমরা এখনও (তবে তর্কসাপেক্ষে উচিত নয়) এর উপর নির্ভর করতে পারি।

    function isObject(value) { /* Requires ECMAScript 3 or later in sloppy mode */
      return function() { return this === value; }.call(value);
    }
  • [[Prototype]] এ

    সমস্ত সাধারণ অবজেক্টের [[প্রোটোটাইপ]] নামে একটি অভ্যন্তরীণ স্লট থাকে, যার মান নির্ধারণ করে যে এটি অন্য কোন বস্তু থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। মানটি কেবল একটি বস্তু বা হতে পারে null। অতএব, আপনি পছন্দসই মান থেকে উত্তরাধিকারসূত্রে একটি অবজেক্ট তৈরি করার চেষ্টা করতে পারেন এবং এটি কাজ করেছে কিনা তা পরীক্ষা করতে পারেন।

    উভয় Object.createএবং Object.getPrototypeOfECMAScript 5 প্রয়োজন।

    function isObject(value) { /* Requires ECMAScript 5 or later */
      try {
        Object.create(value);
        return value !== null;
      } catch(err) {
        return false;
      }
    }
    function isObject(value) { /* Requires ECMAScript 5 or later */
      function Constructor() {}
      Constructor.prototype = value;
      return Object.getPrototypeOf(new Constructor()) === value;
    }
  • কিছু নতুন ECMAScript 6 টি উপায়

    ECMAScript 6 টি নতুন কিছু অপ্রত্যক্ষ উপায়ের সাথে পরিচয় করিয়ে দেয় যা একটি মান check তারা কিছু কোডের মান পাস করার জন্য পূর্বে দেখা পদ্ধতির ব্যবহার করে যার tryত্রুটিগুলি ধরায় একটি বিবৃতিতে আবৃত করা প্রয়োজন । কিছু লুকানো উদাহরণ, মন্তব্য করার মতো নয়


দ্রষ্টব্য: আমি ইচ্ছাকৃতভাবে কিছু পদ্ধতিগুলি Object.getPrototypeOf(value)(ES5) এবং Reflectপদ্ধতিগুলি (ES6) এড়িয়ে গেছি কারণ তারা প্রয়োজনীয় অভ্যন্তরীণ পদ্ধতিগুলি কল করে যা দুষ্টু জিনিসগুলি করতে পারে, যেমন যদি valueপ্রক্সি হয়। সুরক্ষার কারণে আমার উদাহরণগুলি valueসরাসরি এটি অ্যাক্সেস না করে কেবল উল্লেখ করে।


2
"কেবলমাত্র আমার উত্তর এবং দানের সম্পূর্ণ সঠিক" " আপনার প্রথম দুটি বাক্যের সাথে আমি সম্পূর্ণরূপে একমত নই যেটা কিছুটা অহঙ্কারী ।
zzzzBov

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

1
আপনার উত্তরটি "সম্পূর্ণরূপে সঠিক" এই সিদ্ধান্তের সাথে আমি দ্বিমত পোষণ করেছি, অন্যরা "সর্বদা যথাযথ উত্তর ফিরিয়ে দিতে নিশ্চিত করে না" এমন যুক্তি দিয়ে আমার অবস্থানকে কোনওভাবেই খণ্ডন করে না। অতিরিক্তভাবে, প্রশ্নটি কী ইনপুট কোন আউটপুট উত্পাদন করতে হবে সে সম্পর্কিত কোনও দাবি করে না।
zzzzBov

1
@zzzzBov প্রশ্নটি জিজ্ঞাসা করে যে কীভাবে কোনও বস্তু কিনা তা পরীক্ষা করতে হবে। ইসমাস্ক্রিপ্ট কোনও বস্তু কী তা সংজ্ঞায়িত করে, তাই আমি সেই সংজ্ঞাটি ব্যবহার করি। আমি অন্য কোনও যুক্তিসঙ্গত ব্যাখ্যা দেখতে পাচ্ছি না। অন্যান্য জিনিসগুলি (যেমন অ্যারে বাদে) করে এমন উত্তরগুলি কিছু পরিস্থিতিতে কার্যকর হতে পারে তবে তারা কোনও জিনিস কিনা তা পরীক্ষা করে না।
ওরিওল


15

এটা চেষ্টা কর

if (objectName instanceof Object == false) {
  alert('Not an object');
}
else {
  alert('An object');
}

14
আপনি বুবলিয়ান চেক কেন?
জকিউটিস্কি

5
এটি দুটি ক্ষেত্রে মিস করে: Object.prototype instanceof Object-> মিথ্যা। Object.create(null) instanceof Object-> মিথ্যা।
ম্যাট ফেনউইক

খেজুর সম্পর্কে কি? new Date() instanceof Object => সত্য
mauron85

13

চেক করার জন্য ফাংশন ব্যবহার করতে প্রস্তুত

function isObject(o) {
  return null != o && 
    typeof o === 'object' && 
    Object.prototype.toString.call(o) === '[object Object]';
}

function isDerivedObject(o) {
  return !isObject(o) && 
    null != o && 
    (typeof o === 'object' || typeof o === 'function') &&
    /^\[object /.test(Object.prototype.toString.call(o));
}

// Loose equality operator (==) is intentionally used to check
// for undefined too

// Also note that, even null is an object, within isDerivedObject
// function we skip that and always return false for null

ব্যাখ্যা

  • জাভাস্ক্রিপ্টে, null, Object, Array, Dateএবং functionগুলি সব বস্তু। যদিও, nullকিছুটা স্বীকৃত। সুতরাং, এটি nullশূন্য নয় তা সনাক্ত করার জন্য প্রথমে পরীক্ষা করা ভাল ।

  • typeof o === 'object'গ্যারান্টির জন্য চেক করা oযা একটি বস্তু। এই চেক ছাড়া, Object.prototype.toString, অর্থহীন হবে যেহেতু এটি everthing, এমনকি জন্য বস্তু ফিরে আসবে undefinedএবং null! যেমন: toString(undefined)রিটার্ন [object Undefined]!

    পরে typeof o === 'object'চেক toString.call (O) কিনা তা যাচাই করতে একটি দুর্দান্ত পদ্ধতি oএকটি বস্তু, মত একটি উদ্ভূত বস্তুর Array, Dateঅথবা একটি function

  • ইন isDerivedObjectফাংশন, এটা চেক জন্য oএকটা ফাংশন। কারণ, একটি বস্তুও ফাংশন করুন, সে কারণেই এটি রয়েছে। যদি এটি না করে তবে ফাংশনটি মিথ্যা হিসাবে ফিরে আসবে। উদাহরণ: isDerivedObject(function() {})ফিরে আসবে false, তবে এখন এটি ফিরে আসবে true

  • যে কোনও বস্তু কী তার সংজ্ঞাটি সর্বদা পরিবর্তন করা যায়। সুতরাং, কেউ সেই অনুযায়ী এই ফাংশন পরিবর্তন করতে পারেন।


টেস্ট

function isObject(o) {
  return null != o && 
    typeof o === 'object' && 
    Object.prototype.toString.call(o) === '[object Object]';
}

function isDerivedObject(o) {
  return !isObject(o) && 
    null != o && 
    (typeof o === 'object' || typeof o === 'function') &&
    /^\[object /.test(Object.prototype.toString.call(o));
}

// TESTS

// is null an object?

console.log(
  'is null an object?', isObject(null)
);

console.log(
  'is null a derived object?', isDerivedObject(null)
);

// is 1234 an object?

console.log(
  'is 1234 an object?', isObject(1234)
);

console.log(
  'is 1234 a derived object?', isDerivedObject(1234)
);

// is new Number(1234) an object?

console.log(
  'is new Number(1234) an object?', isObject(new Number(1234))
);

console.log(
  'is new Number(1234) a derived object?', isDerivedObject(1234)
);

// is function object an object?

console.log(
  'is (new (function (){})) an object?', 
  isObject((new (function (){})))
);

console.log(
  'is (new (function (){})) a derived object?', 
  isObject((new (function (){})))
);

// is {} an object?

console.log(
  'is {} an object?', isObject({})
);

console.log(
  'is {} a derived object?', isDerivedObject({})
);

// is Array an object?

console.log(
  'is Array an object?',
  isObject([])
)

console.log(
  'is Array a derived object?',
  isDerivedObject([])
)

// is Date an object?

console.log(
  'is Date an object?', isObject(new Date())
);

console.log(
  'is Date a derived object?', isDerivedObject(new Date())
);

// is function an object?

console.log(
  'is function an object?', isObject(function(){})
);

console.log(
  'is function a derived object?', isDerivedObject(function(){})
);


13

যদি আপনি চেক করতে চান, তাহলে prototypeএকটি জন্য objectএকমাত্র থেকে আসে Object। ফিল্টার আউট String, Number, Array, Arguments, ইত্যাদি

function isObject (n) {
  return Object.prototype.toString.call(n) === '[object Object]';
}

বা একটি একক-এক্সপ্রেশন তীর ফাংশন হিসাবে (ES6 +)

const isObject = n => Object.prototype.toString.call(n) === '[object Object]'

1
এটি সর্বোত্তম উপায় তবে আমি দ্বিতীয় লাইনে এটি আরও সহজ করে return Object.prototype.toString.call(n) === '[object Object]'
দেব

1
আপনি nullObject.prototype.toString.call(null) === '[object Null]'
চেকটিও

12
var a = [1]
typeof a //"object"
a instanceof Object //true
a instanceof Array //true

var b ={a: 1}
b instanceof Object //true
b instanceof Array //false

var c = null
c instanceof Object //false
c instanceof Array //false

আমাকে আরও বিশদ সরবরাহ করতে বলা হয়েছিল। আমাদের পরিবর্তনশীল কোনও বস্তু কিনা তা যাচাইয়ের সর্বাধিক পরিষ্কার এবং বোধগম্য উপায় typeof myVar। এটি একটি টাইপ (যেমন "object", "undefined") সহ একটি স্ট্রিং প্রদান করে ।

দুর্ভাগ্যক্রমে অ্যারে এবং নাল উভয়ই একটি টাইপ আছে object। কেবল আসল অবজেক্ট নিতে instanceofঅপারেটর ব্যবহার করে উত্তরাধিকার শৃঙ্খলা পরীক্ষা করা দরকার । এটি নাল দূর করবে, তবে অ্যারেটির উত্তরাধিকার শৃঙ্খলে অবজেক্ট রয়েছে।

সুতরাং সমাধানটি হ'ল:

if (myVar instanceof Object && !(myVar instanceof Array)) {
  // code for objects
}

/./ instanceof Object //true
ইয়াকার্ট

11

সামান্য দেরিতে ... "প্লেইন অবজেক্টস" এর জন্য (মানে, 'x': 5, 'y': 7}) এর কাছে আমার এই ছোট স্নিপেট রয়েছে:

function isPlainObject(o) {
   return ((o === null) || Array.isArray(o) || typeof o == 'function') ?
           false
          :(typeof o == 'object');
}

এটি পরবর্তী আউটপুট উত্পন্ন করে:

console.debug(isPlainObject(isPlainObject)); //function, false
console.debug(isPlainObject({'x': 6, 'y': 16})); //literal object, true
console.debug(isPlainObject(5)); //number, false
console.debug(isPlainObject(undefined)); //undefined, false
console.debug(isPlainObject(null)); //null, false
console.debug(isPlainObject('a')); //string, false
console.debug(isPlainObject([])); //array?, false
console.debug(isPlainObject(true)); //bool, false
console.debug(isPlainObject(false)); //bool, false

এটা সবসময় আমার জন্য কাজ করে। যদি "সত্য" কেবল তখনই ফিরে আসে যদি "ও" প্রকারটি "অবজেক্ট" হয় তবে নাল, বা অ্যারে বা ফাংশন হয় না। :)


পূর্ববর্তী উত্তরে উল্লিখিত হিসাবে তারিখ অবজেক্টের ক্ষেত্রে আপনার পন্থা ব্যর্থ হবে।
গ্রেজগোর্জ পাভলিক

9

লোড্যাশের রয়েছে আইপ্লেইন অবজেক্ট , যা এই পৃষ্ঠায় আসা অনেকেই সন্ধান করতে পারে। কোনও ফাংশন বা অ্যারে দেওয়ার সময় এটি মিথ্যা প্রত্যাবর্তন করে।


পারফেক্ট! আমি জানতাম _.isObjectযে জেএস কোনও জিনিসকে কী বিবেচনা করে তার সাথে কোনটি মেলে। তবে আমার সাধারণত যা প্রয়োজন তা হ'ল উদাহরণস্বরূপ একটি বস্তু আক্ষরিক এবং একটি অ্যারের মধ্যে পার্থক্য করা, যা _.isPlainObjectআমাকে ঠিক তাই করতে দেয়।
চুন 11

9

এটি কাজ করবে। এটি এমন একটি ফাংশন যা সত্য, মিথ্যা বা সম্ভবত বাতিল হয়ে যায়।

const isObject = obj => obj && obj.constructor && obj.constructor === Object;

console.log(isObject({})); // true
console.log(isObject([])); // false
console.log(isObject(new Function)); // false
console.log(isObject(new Number(123))); // false
console.log(isObject(null)); // null


2
@ সেরিগপি ভবিষ্যতে আপনার উত্তরের কোড সম্পাদনা করা থেকে বিরত থাকা উচিত। এই উত্তরটি যেমন দাঁড়িয়েছে, পরীক্ষার সময় আমি nullবরং চূড়ান্ত পরীক্ষার ফলাফল হিসাবে পেয়েছি false। দেখুন আমি কোডটি সম্পর্কিত সম্পাদনাগুলি করা উচিত কবে?
নিক

9

যেহেতু এই সমস্যাটি সঠিকভাবে পরিচালনা করতে হবে তা নিয়ে প্রচুর বিভ্রান্তি দেখা যাচ্ছে, তাই আমি আমার 2 সেন্ট রেখে যাব (এই উত্তরটি অনুগত এবং এটি প্রতিটি পরিস্থিতিতে সঠিক ফলাফল আনবে):

আদিমদের জন্য পরীক্ষা: undefined null boolean string number

function isPrimitive(o){return typeof o!=='object'||null}

কোনও বস্তু আদিম নয়:

function isObject(o){return !isPrimitive(o)}

বা বিকল্পভাবে:

function isObject(o){return o instanceof Object}
function isPrimitive(o){return !isObject(o)}

যে কোনও অ্যারে পরীক্ষা করা:

const isArray=(function(){
    const arrayTypes=Object.create(null);
    arrayTypes['Array']=true;
    arrayTypes['Int8Array']=true;
    arrayTypes['Uint8Array']=true;
    arrayTypes['Uint8ClampedArray']=true;
    arrayTypes['Int16Array']=true;
    arrayTypes['Uint16Array']=true;
    arrayTypes['Int32Array']=true;
    arrayTypes['Uint32Array']=true;
    arrayTypes['BigInt64Array']=true;
    arrayTypes['BigUint64Array']=true;
    arrayTypes['Float32Array']=true;
    arrayTypes['Float64Array']=true;
    return function(o){
        if (!o) return false;
        return !isPrimitive(o)&&!!arrayTypes[o.constructor.name];
    }
}());

বাদ দিয়ে অবজেক্টের জন্য পরীক্ষা করা: যে Date RegExp Boolean Number String Functionকোনও অ্যারে

const isObjectStrict=(function(){
    const nativeTypes=Object.create(null);
    nativeTypes['Date']=true;
    nativeTypes['RegExp']=true;
    nativeTypes['Boolean']=true;
    nativeTypes['Number']=true;
    nativeTypes['String']=true;
    nativeTypes['Function']=true;
    return function(o){
        if (!o) return false;
        return !isPrimitive(o)&&!isArray(o)&&!nativeTypes[o.constructor.name];
    }
}());

8

যখন সমস্ত কিছু ব্যর্থ হয়, আমি এটি ব্যবহার করি:

var isObject = function(item) {
   return item.constructor.name === "Object";
}; 

1
স্ট্রিং তুলনা কেন, সহজভাবে কেন item.constructor === Object?
কে 3 --- আরএনসি

nullএকটি ব্যতিক্রম ছুঁড়েUncaught TypeError: Cannot read property 'constructor' of null(…)
ভিটিম.ইস

@ ক্রমশ আমি পুরানো IE সংস্করণগুলিকে সমর্থন করার লক্ষ্য রাখছি, কেন এটি আইই তে কাজ করে না? কার কারণে indexOfনাকি constructor.name?
জাঙ্কাপঙ্ক্ট

8

Ramda কার্মিক গ্রন্থাগার জাভাস্ক্রিপ্ট ধরনের detecting জন্য একটি বিস্ময়কর ফাংশন আছে।

সম্পূর্ণ ফাংশন প্যারাফ্রেসিং :

function type(val) {
  return val === null      ? 'Null'      :
         val === undefined ? 'Undefined' :
         Object.prototype.toString.call(val).slice(8, -1);
}

সমাধানটি কতটা সহজ এবং সুন্দর তা বুঝতে পেরে আমাকে হাসতে হয়েছিল।

রামদা ডকুমেন্টেশন থেকে ব্যবহারের উদাহরণ :

R.type({}); //=> "Object"
R.type(1); //=> "Number"
R.type(false); //=> "Boolean"
R.type('s'); //=> "String"
R.type(null); //=> "Null"
R.type([]); //=> "Array"
R.type(/[A-z]/); //=> "RegExp"
R.type(() => {}); //=> "Function"
R.type(undefined); //=> "Undefined"

8

পড়া ও বাস্তবায়নের অনেক চেষ্টা আউট পর, আমি লক্ষ্য করেছি যে খুব কম লোকই মত মান পরীক্ষা করার জন্য চেষ্টা JSON, Math,document 1 টি পদক্ষেপ চেয়ে দীর্ঘতর প্রোটোটাইপ চেইন সহ বা বস্তু।

typeofআমাদের ভেরিয়েবলের পরীক্ষা করার এবং তারপরে প্রান্ত-কেসগুলি হ্যাক করার পরিবর্তে , আমি ভেবেছিলাম যে চেকটি রিফ্যাক্টরটি এড়াতে যতটা সম্ভব সরল রাখলে নতুন আদিম বা নেটিভ অবজেক্টস যুক্ত হয়েছে যা রেজিস্টার হিসাবে যুক্ত হয়েছেtypeof 'অবজেক্ট' '।

সর্বোপরি, typeofঅপারেটর আপনাকে জানায় যে কোনও জিনিস জাভাস্ক্রিপ্টের জন্য কোনও বস্তু কিনা, তবে জাভাস্ক্রিপ্টের কোনও সামগ্রীর সংজ্ঞা বেশিরভাগ বাস্তব-বিশ্বের পরিস্থিতিগুলির জন্য খুব বেশি বিস্তৃত (যেমন typeof null === 'object')। নীচে একটি ফাংশন দেওয়া হয়েছে যা ভেরিয়েবলটি vমূলত দুটি চেক পুনরাবৃত্তি করে একটি বস্তু কিনা তা নির্ধারণ করে:

  1. একটি লুপ শুরু করে যতদিন এর stringified সংস্করণ হিসেবে চলতে থাকে vহয় '[object Object]'
    আমি চেয়েছিলাম ফাংশনের ফলাফলটি নীচের লগগুলির মতো হ'ল, সুতরাং এটিই কেবলমাত্র "অবজেক্ট" c ক্রিয়েটিয়ার সাথে আমি শেষ করেছি। যদি এটি ব্যর্থ হয় তবে ফাংশনটি এখনই মিথ্যা ফিরিয়ে দেয়।
  2. vচেইনের সাথে পরবর্তী প্রোটোটাইপ দিয়ে প্রতিস্থাপন করা হয় তবে v = Object.getPrototypeOf(v)পরে সরাসরি মূল্যায়নও করা হয়। যখন এর নতুন মান vহয় null, এর অর্থ হ'ল রুট প্রোটোটাইপ সহ প্রতিটি প্রোটোটাইপ (যা চেইনের অভ্যন্তরে একমাত্র প্রোটোটাইপ হতে পারে ) সেই সময় লুপটিতে পাস করে এবং আমরা সত্যটিতে ফিরে আসতে পারি। অন্যথায়, একটি নতুন পুনরাবৃত্তি শুরু হয়।

function isObj (v) {
  while (     Object.prototype.toString.call(v) === '[object Object]')
  if    ((v = Object.getPrototypeOf(v))         === null)
  return true
  return false
}

console.log('FALSE:')
console.log('[]                   -> ', isObj([]))
console.log('null                 -> ', isObj(null))
console.log('document             -> ', isObj(document))
console.log('JSON                 -> ', isObj(JSON))
console.log('function             -> ', isObj(function () {}))
console.log('new Date()           -> ', isObj(new Date()))
console.log('RegExp               -> ', isObj(/./))

console.log('TRUE:')
console.log('{}                   -> ', isObj({}))
console.log('new Object()         -> ', isObj(new Object()))
console.log('new Object(null)     -> ', isObj(new Object(null)))
console.log('new Object({})       -> ', isObj(new Object({foo: 'bar'})))
console.log('Object.prototype     -> ', isObj(Object.prototype))
console.log('Object.create(null)  -> ', isObj(Object.create(null)))
console.log('Object.create({})    -> ', isObj(Object.create({foo: 'bar'})))
console.log('deep inheritance     -> ', isObj(Object.create(Object.create({foo: 'bar'}))))


6
if(typeof value === 'object' && value.constructor === Object)
{
    console.log("This is an object");
}

1
যদি valueহয় তবে এটি nullএকটি ত্রুটি ছুঁড়ে ফেলবে ...
গেরশম

এবং অবশ্যই এটি falseবস্তুর জন্য হবে Object.assign({}, {constructor: null})
user4642212

6

যদি স্পষ্টভাবে চেক করতে চান প্রদত্ত মানটি কিনা {}

function isObject (value) {
 return value && typeof value === 'object' && value.constructor === Object;
}

6
const isObject = function(obj) {
  const type = typeof obj;
  return type === 'function' || type === 'object' && !!obj;
};

!!objobjসত্যবাদী কিনা তা পরীক্ষা করার জন্য সংক্ষিপ্তকরণ (ফিল্টার আউট null)


6

এটি একটি পুরানো প্রশ্ন তবে এটিকে এখানে রেখেই ভাবেন। বেশিরভাগ লোকেরা ভেরিয়েবলটি {}কী-মূল্যের জোড়যুক্ত অর্থ কিনা তা যাচাই করছেন এবং জাভাস্ক্রিপ্ট কোনও প্রদত্ত জিনিসের জন্য যে আন্ডারলাইনটি ব্যবহার করছেন তা জাভাস্ক্রিপ্টের বেশিরভাগ ক্ষেত্রেই সত্যই নিখুঁত বলে মনে হচ্ছে। সুতরাং যে উপায় থেকে নেওয়া। যদি তুমি করো...

let x = function() {}
typeof x === 'function' //true
x === Object(x) // true
x = []
x === Object(x) // true

// also
x = null
typeof null // 'object'

বেশিরভাগ সময় আমরা যা চাই তা হ'ল আমাদের যদি কোনও API থেকে কোনও রিসোর্স অবজেক্ট থাকে বা ORM থেকে আমাদের ডাটাবেস কলটি ফিরে আসে returned তারপরে আমরা পরীক্ষা করতে পারি যদি এটি একটি Arrayনা হয় null, হয় না, টাইপফোন না হয় 'function'এবং এটি হয় তবেObject

// To account also for new Date() as @toddmo pointed out

x instanceof Object && x.constructor === Object

x = 'test' // false
x = 3 // false
x = 45.6 // false
x = undefiend // false
x = 'undefiend' // false
x = null // false
x = function(){} // false
x = [1, 2] // false
x = new Date() // false
x = {} // true

পপ trueজন্যnew Date()
toddmo

1
@ টডডমো এটি উল্লেখ করার জন্য ধন্যবাদ। এখন উদাহরণ কোডটি মিথ্যা new Date()
গিলবার্ট

4

আমি যেটি ব্যবহার করতে পছন্দ করি তা এটি

function isObject (obj) {
  return typeof(obj) == "object" 
        && !Array.isArray(obj) 
        && obj != null 
        && obj != ""
        && !(obj instanceof String)  }

আমি মনে করি বেশিরভাগ ক্ষেত্রে একটি তারিখ অবশ্যই অবজেক্ট হিসাবে চেকটি পাস করে, তাই আমি তারিখগুলি ফিল্টার করি না


4

আমি এই "এই প্রশ্নটি থেকে এই জাতীয় ধরণের চেক করার জন্য একটি নতুন উপায় খুঁজে পেয়েছি: উদাহরণস্বরূপ কিছু আক্ষরিকের জন্য কেন মিথ্যা প্রত্যাবর্তন হয়?

সেই থেকে, আমি নীচে টাইপ চেকিংয়ের জন্য একটি ফাংশন তৈরি করেছি:

function isVarTypeOf(_var, _type){
    try {
        return _var.constructor === _type;
    } catch(ex) {
        return false;         //fallback for null or undefined
    }
}

তাহলে আপনি ঠিক করতে পারেন:

console.log(isVarTypeOf('asdf', String));   // returns true
console.log(isVarTypeOf(new String('asdf'), String));   // returns true
console.log(isVarTypeOf(123, String));   // returns false
console.log(isVarTypeOf(123, Number));   // returns true
console.log(isVarTypeOf(new Date(), String));   // returns false
console.log(isVarTypeOf(new Date(), Number));   // returns false
console.log(isVarTypeOf(new Date(), Date));   // returns true
console.log(isVarTypeOf([], Object));   // returns false
console.log(isVarTypeOf([], Array));   // returns true
console.log(isVarTypeOf({}, Object));   // returns true
console.log(isVarTypeOf({}, Array));   // returns false
console.log(isVarTypeOf(null, Object));   // returns false
console.log(isVarTypeOf(undefined, Object));   // returns false
console.log(isVarTypeOf(false, Boolean));   // returns true

এটি ক্রোম 56, ফায়ারফক্স 52, মাইক্রোসফ্ট এজ 38, ইন্টারনেট এক্সপ্লোরার 11, অপেরা 43 এ পরীক্ষিত

সম্পাদনা:
আপনি যদি ভেরিয়েবলটি নাল বা অপরিজ্ঞাত কিনা তা পরীক্ষা করতে চান তবে আপনি এটির পরিবর্তে এটি ব্যবহার করতে পারেন:

function isVarTypeOf(_var, _type){
    try {
        return _var.constructor === _type;
    } catch(ex) {
        return _var == _type;   //null and undefined are considered the same
        // or you can use === if you want to differentiate them
    }
}

var a = undefined, b = null;
console.log(isVarTypeOf(a, undefined)) // returns true
console.log(isVarTypeOf(b, undefined)) // returns true
console.log(isVarTypeOf(a, null)) // returns true

ইনঙ্কের মন্তব্য থেকে আপডেট: চ্যালেঞ্জ গৃহীত: ডি

আপনি যদি তুলনামূলক অবজেক্টগুলি আলগা করতে চান তবে আপনি এইভাবে চেষ্টা করতে পারেন:

function isVarTypeOf(_var, _type, looseCompare){
    if (!looseCompare){
        try {
            return _var.constructor === _type;
        } catch(ex){
            return _var == _type;
        }
    } else {
        try{
            switch(_var.constructor){
                case Number:
                case Function:
                case Boolean:
                case Symbol:
                case Date:
                case String:
                case RegExp:
                    // add all standard objects you want to differentiate here
                    return _var.constructor === _type;
                case Error:
                case EvalError:
                case RangeError:
                case ReferenceError:
                case SyntaxError:
                case TypeError:
                case URIError:
                    // all errors are considered the same when compared to generic Error
                    return (_type === Error ? Error : _var.constructor) === _type;
                case Array:
                case Int8Array:
                case Uint8Array:
                case Uint8ClampedArray:
                case Int16Array:
                case Uint16Array:
                case Int32Array:
                case Uint32Array:
                case Float32Array:
                case Float64Array:
                    // all types of array are considered the same when compared to generic Array
                    return (_type === Array ? Array : _var.constructor) === _type;
                case Object:
                default:
                    // the remaining are considered as custom class/object, so treat it as object when compared to generic Object
                    return (_type === Object ? Object : _var.constructor) === _type;
            }
        } catch(ex){
            return _var == _type;   //null and undefined are considered the same
            // or you can use === if you want to differentiate them
        }
    }
}

এইভাবে, আপনি ঠিক তেমন মন্তব্যের মত মন্তব্য করতে পারেন:

isVarTypeOf(new (function Foo(){}), Object); // returns false
isVarTypeOf(new (function Foo(){}), Object, true); // returns true

অথবা

Foo = function(){};
Bar = function(){};
isVarTypeOf(new Foo(), Object);   // returns false
isVarTypeOf(new Foo(), Object, true);   // returns true
isVarTypeOf(new Bar(), Foo, true);   // returns false
isVarTypeOf(new Bar(), Bar, true);   // returns true
isVarTypeOf(new Bar(), Bar);    // returns true

এটি কোনও নতুন শ্রেণি কোনও বস্তু কিনা তা সনাক্ত করতে পারে না। isVarTypeOf (নতুন (ফাংশন ফু ()।}), অবজেক্ট) // এটি সত্যের পরিবর্তে মিথ্যা ফিরিয়ে দেয়। সঠিক পরীক্ষার জন্য নীচে আমার উত্তর দেখুন।
Inanc Gumus

যাইহোক, আপনি instanceofঅবজেক্টগুলির জন্য পরীক্ষা করতে ব্যবহার করতে পারেন । তবুও, এটি কোনও সঠিক বিজ্ঞান নয়।
Inanc Gumus

@ আইএনএনসি, ভাল কারণ এটি new Foo()কোনও Fooবস্তুকে রিটার্ন দেয় , যেমন new String()কোনও Stringবস্তুকে new Date()রিটার্ন দেয় বা কোনও Dateবস্তুকে রিটার্ন দেয় আপনি Foo = function(){}; isVarTypeOf(new Foo(), Foo);তাও করতে পারেন
am05mhz

হ্যাঁ, আমি যা বলি তা হ'ল: আপনি এখনই এটি কোনও বস্তু কিনা তা পরীক্ষা করছেন না।
Inanc Gumus

@ ইনাঙ্ক চিয়ার্স, আমি টাইপ চেকিংয়ের একটি উপায় খুঁজছিলাম (কেবলমাত্র আপত্তি নয়), এই পৃষ্ঠাটি এবং অন্য পৃষ্ঠায় পেয়েছি, তখন আমি খুব উত্তেজিত হয়েছি যে আমি এই প্রশ্নের প্রসঙ্গে ভুলে গেছি, আমার খারাপ :)
am05mhz
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.