কোনও ভেরিয়েবল জাভাস্ক্রিপ্টে স্ট্রিং কিনা তা পরীক্ষা করুন


1735

ভেরিয়েবল একটি স্ট্রিং বা জাভাস্ক্রিপ্টের অন্য কিছু কিনা তা আমি কীভাবে নির্ধারণ করতে পারি?

উত্তর:


1688

আপনি typeofঅপারেটর ব্যবহার করতে পারেন :

var booleanValue = true; 
var numericalValue = 354;
var stringValue = "This is a String";
var stringObject = new String( "This is a String Object" );
alert(typeof booleanValue) // displays "boolean"
alert(typeof numericalValue) // displays "number"
alert(typeof stringValue) // displays "string"
alert(typeof stringObject) // displays "object"

এই ওয়েবপৃষ্ঠা থেকে উদাহরণ । (উদাহরণটি যদিও সামান্য পরিবর্তিত হয়েছিল)।

এটি তৈরি করা স্ট্রিংয়ের ক্ষেত্রে প্রত্যাশার মতো কাজ করবে না new String(), তবে এটি খুব কম ব্যবহৃত হয় এবং [1] [2] এর বিপরীতে সুপারিশ করা হয় । আপনি যদি ইচ্ছা করেন তবে এগুলি কীভাবে পরিচালনা করবেন তার জন্য অন্যান্য উত্তরগুলি দেখুন।


  1. গুগল জাভাস্ক্রিপ্ট স্টাইল গাইড কখনই আদিম বস্তু মোড়ক ব্যবহার করবেন না বলে জানিয়েছে
  2. ডগলাস ক্রকফোর্ড সুপারিশ করেছিলেন যে আদিম বস্তু মোড়কিকে অবমূল্যায়ন করা উচিত

45
@ ওলফিউ ৮87 দয়া করে পরামর্শ দিন যে স্ট্রিংভ্যালু "স্ট্রিং" এর পরিবর্তে "অবজেক্ট" ফিরিয়ে দিতে পারে এমন কিছু ক্ষেত্রে রয়েছে। আমার উত্তর সম্পর্কে মন্তব্য দেখুন।
ড্রাক্স

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


2
@ ড্যানিয়েল, কারণ তিনি এমন একটি প্রতিস্থাপনের প্রস্তাব করেছিলেন যা কিছু সমস্যা সমাধান করে, কারণ নীতিগতভাবে সে এর বিরুদ্ধে নয়।
ভেসেভলড গোলভানভ

4
যদি এটি আপনার মাথা ব্যথার কারণ হয়ে থাকে, তবে 99.99% সময়ের কারণ আপনি নিজের কোডটি সঠিকভাবে গঠন করেননি। এটি বিদ্যমান এবং এটি যা করে তার জন্য এনএএন এর দোষ নয়, এটি পরের বার আপনি কোডটি নিয়ে কাজ করার পরে মনে রাখবেন, এর কাছ থেকে শিখবেন এবং মনে রাখবেন।
মাইক 'পোম্যাক্স' কামারম্যানস

1904

এটি আমার জন্য কাজ করে কি:

if (typeof myVar === 'string' || myVar instanceof String)
// it's a string
else
// it's something else

77
"টাইপফাই মাইওয়ার == 'স্ট্রিং'" এর উপরে বা তার বাইরে "মাইভার উদাহরণস্বরূপ স্ট্রিং" কি কিছু করে?
এসভিথ

81
@svth আমার মনে আছে জাভাস্ক্রিপ্টে আপনার পরিবর্তনশীল ধরণের স্ট্রিং বা প্রকারের অবজেক্ট থাকতে পারে যা স্ট্রিংয়ের শ্রেণি (একই জিনিস - উভয় স্ট্রিং - তবে পৃথকভাবে সংজ্ঞায়িত) যাতে ডাবল চেক করা হয় কেন।
ড্রাক্স

38
var somevar = নতুন স্ট্রিং ('সামস্ট্রিং') কনসোল.লগ (টাইপফোর কিছু) // অবজেক্ট
নাবিক

82
-1 কারন এখানে instanceofচেকটি অর্থহীন শোনায় যদি না আপনি কিছু খুব অস্বাভাবিক কোডিং অনুশীলন অনুসরণ করেন, এবং এই উত্তরটি এটি কী করে বা আপনি এটি কেন ব্যবহার করতে পারেন তা ব্যাখ্যা করার জন্য কিছুই করে না। আপনার কেবলমাত্র প্রয়োজনটির প্রয়োজন যদি আপনি অবজেক্ট-মোড়ানো স্ট্রিং ব্যবহার করেন তবে অবজেক্ট-মোড়ানো স্ট্রিংগুলি একটি মূল্যহীন বৈশিষ্ট্য যা কেউ ব্যবহার করে না এবং গুগল এবং ক্রকফোর্ড উভয়ই খারাপ অভ্যাস হিসাবে নিন্দা করেছেন ( google-styleguide.googlecode.com/svn/ ট্রাঙ্ক /… , ক্রকফোর্ড / জাভাস্ক্রিপ্ট / রেকর্ডার html )।
মার্ক আমেরিকা 16'15

77
আমি দৃren়তার সাথে একমত নই যে শক্ত কোড যা সঠিকভাবে অসম্ভব কেসগুলি পরিচালনা করে তা এড়ানো উচিত something উভয়টি চেক করা typeofএবং আপনার instanceofকোডটিকে অন্যেরা কল করতে পারে তবে ভাল পরামর্শের মতো মনে হয়। @ মার্কএমেরির postmessageপ্রান্তের বিষয়টি যদি আপনি জিজ্ঞাসা করেন যে "আমি কী ছিলাম postmessage?" - তবে আপনি এটি ইন্টারফেসে পরিচালনা করবেন এবং প্রচারের অনুমতি পাবেন না। অন্য কোথাও, কিছু জেএস এস্থেস্টস সেগুলি অস্বীকার করলেও অবহিত কোডিং পদ্ধতিগুলি হ্যান্ডেল করা সঠিক বলে মনে হচ্ছে। আপনার কোডটি স্ট্রিং গ্রহণযোগ্য হিসাবে কখনও মন্তব্য করবেন না, যদি না তা সত্যই না করে!
দেবী মরগান

156

যেহেতু 580+ জন লোক একটি ভুল উত্তরের পক্ষে ভোট দিয়েছে এবং ৮০০++ একটি কার্যকরী তবে শটগান-স্টাইলের উত্তরটির পক্ষে ভোট দিয়েছে তাই আমি ভেবেছিলাম যে এটি সহজ উত্তর হিসাবে আমার উত্তরটি পুনরায় করা উপযুক্ত যা প্রত্যেকে বুঝতে পারে।

function isString(x) {
  return Object.prototype.toString.call(x) === "[object String]"
}

অথবা, ইনলাইন (এর জন্য আমার একটি UltiSnip সেটআপ আছে):

Object.prototype.toString.call(myVar) === "[object String]"

এফওয়াইআই, পাবলো সান্তা ক্রুজের উত্তরটি ভুল, কারণ typeof new String("string")এটিobject

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

যাইহোক, এই উত্তরটি অবশ্যই স্পষ্টভাবে সঠিক এবং লড্যাশ / আন্ডারস্কোর ব্যবহারের পরামর্শের জন্য সম্ভবত সেরা উত্তর (সম্ভবত, সম্ভবত, বাদে )। দাবি অস্বীকার: আমি লড্যাশ 4 কোডবেসে অবদান রেখেছি।

আমার মূল উত্তর (যা স্পষ্টতই অনেকগুলি মাথার উপরে উড়ে গেছে) নীচে:

আমি এটিকে আন্ডারস্কোর.জেএস থেকে ট্রান্সকোড করেছি:

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

এটি স্ট্রিং, ইস নাম্বার ইত্যাদির সংজ্ঞা দেবে


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

module.exports = [
  'Arguments',
  'Function', 
  'String', 
  'Number', 
  'Date', 
  'RegExp'
].reduce( (obj, name) => {
  obj[ 'is' + name ] = x => toString.call(x) == '[object ' + name + ']';
  return obj;
}, {});

[সম্পাদনা]: Object.prototype.toString.call(x)ফাংশন এবং অ্যাসিঙ্ক ফাংশনগুলির মধ্যেও বর্ণিত করতে কাজ করে:

const fn1 = () => new Promise((resolve, reject) => setTimeout(() => resolve({}), 1000))
const fn2 = async () => ({})

console.log('fn1', Object.prototype.toString.call(fn1))
console.log('fn2', Object.prototype.toString.call(fn2))


11
আপনি আন্ডারস্কোর.জেএস (কোন বিজোড় কারণে?) সুপারিশ করবেন তবে আপনি এটি এখানে ব্যবহার করবেন না। তবুও আপনি কার্যাদি সহ বিশ্বব্যাপী নেমস্পেসকে দূষিত করেন। নোড.জেজে আপনি একটি মডিউল তৈরি করতে চান যা এই সমস্ত ফাংশনগুলির সাথে যুক্ত থাকে (আপনি পরিবর্তে এটি ব্যবহার করতে পারেন তবে এটি আপনার প্রথম স্থানে থাকা উচিত নয় এমন সমস্যা সমাধানের জন্য খারাপ দৃষ্টিভঙ্গি হবে)। global || windowwindow
বেনিয়ামিন গ্রুইনবাউম

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

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

18
@ ওরিওলোফিল, ডিআরএক্স এর উত্তরের চেয়ে এটি কীভাবে ভাল?
পেসারিয়ার

3
তাই এটি পুনরায় সংজ্ঞায়িত করতে সম্ভব জাতীয়, বানর প্যাচিং সমর্থন toStringমধ্যে Object.prototype। সুতরাং, আমি যুক্তি দিয়েছি যে toStringকোনও বস্তুর প্রকার যাচাই করার উপর নির্ভর করা, সর্বোপরি একটি খারাপ অভ্যাস।
আন্দ্রে রডরিগস

84

আমি jQuery বা লড্যাশ / অ্যান্ডস্কোর থেকে অন্তর্নির্মিত ফাংশনগুলি ব্যবহার করার পরামর্শ দিচ্ছি । এগুলি ব্যবহার করা সহজ এবং পড়া সহজ।

হয় ফাংশন DRAX উল্লিখিত কেসটি পরিচালনা করবে ... এটি উভয়ই পরীক্ষা করে (এ) ভেরিয়েবলটি একটি স্ট্রিং আক্ষরিক বা (বি) এটি স্ট্রিং অবজেক্টের উদাহরণ। উভয় ক্ষেত্রেই, এই ফাংশনগুলি স্ট্রিং হিসাবে মানটি সঠিকভাবে সনাক্ত করে।

লোডাশ / অ্যান্ডস্কোর.জেএস

if(_.isString(myVar))
   //it's a string
else
   //it's something else

jQuery এর

if($.type(myVar) === "string")
   //it's a string
else
   //it's something else

আরও তথ্যের জন্য _.আইএসআর স্ট্রিংয়ের জন্য লড্যাশ ডকুমেন্টেশন দেখুন ।

আরও তথ্যের জন্য jQuery ডকুমেন্টেশন দেখুন ty। টাইপ () এর জন্য।


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

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

20
@ রাফাআউরেজেসজকজ এই গ্রন্থাগারগুলি মোটামুটিভাবে বহুল ব্যবহৃত হয় এবং কার্যকর (এবং পরীক্ষিত) কার্যকারিতা সরবরাহ করে। বিশেষত লোডাশ। আমি কাউকে কেবল এই এক সমাধানের জন্য লাইব্রেরিটি ডাউনলোড করার পরামর্শ দিচ্ছি না .... তবে আমি প্রত্যেক জাভাস্ক্রিপ্ট বিকাশকারীকে এই লাইব্রেরিটি ডাউনলোড করার পরামর্শ দিচ্ছি এবং তারা কী মিস করছে তা দেখুন। ;)
ক্লিয়ারক্লাউড 8

13
লোড্যাশের মতো লাইব্রেরির বিন্দুটি সকলেই মিস করছেন: গতি নয়। "উন্নয়নের স্বাচ্ছন্দ্য" নয়। লোড্যাশের মতো লাইব্রেরি ব্যবহারের কারণগুলি আপনার জেএস অ্যাপ্লিকেশনটিকে ফুটিয়ে তুলবে এমন সমস্যার বিরুদ্ধে "প্রতিরক্ষামূলকতা" সরবরাহ করে। মারাত্মক ত্রুটিগুলি ঘটে যখন আপনি কোনও বস্তুর (বা বিপরীতে) স্ট্রিং অপারেশন করার চেষ্টা করেন এবং লোডাশ সেই ত্রুটিগুলি রোধের চারপাশে অসাধারণ মান সরবরাহ করে।
এলোমেলো_ ব্যবহারকারী_নাম 21

1
মনে রাখবেন যে নোড বা নোড-জাতীয় পরিবেশে অনেক লোক এটি করবে এবং খুব কম লোকই সেখানে jQuery ব্যবহার করবে।
ম্যাট ফ্লেচার

35
function isString (obj) {
  return (Object.prototype.toString.call(obj) === '[object String]');
}

আমি এটি এখানে দেখেছি:

http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/


4
আমি মনে করি যে সমাধানটি সবচেয়ে শক্তিশালী কারণ এটি উত্তরে প্রদত্ত ইউআরএল হিসাবে উল্লিখিত ক্রস-ফ্রেম / ক্রস উইন্ডো রেফারেন্স পরিস্থিতি পরিচালনা করে।
eh

1
দুর্দান্ত উত্তর, দেখে মনে হচ্ছে অ্যান্ডস্কোর.জেগুলিও এই পদ্ধতিটি ব্যবহার করে!
দান

1
@ling শুধু কৌতূহলী, আপনি কেন বন্ধুত্বকে চারপাশে রাখছেন Object.prototype.toString.call(obj) === '[object String]'?
জেদীশুয়াগুই

@ ইয়ারলি আপনার মানে পড়ার (x === y)চেয়ে ভাল কি আছে x === y?
জেদীশোয়াগুই

@ স্টাবর্নশোয়াগুয়ে আমার মতে, হ্যাঁ এটি ধারাবাহিকতা সম্পর্কেও। কোনও মান ফেরত দেওয়ার সময় আমি ব্যক্তিগতভাবে সর্বদা বন্ধনী ব্যবহার করি।
অ্যাকোয়ারেল

28

সবচেয়ে ভালো উপায়:

var s = 'String';
var a = [1,2,3];
var o = {key: 'val'};

(s.constructor === String) && console.log('its a string');
(a.constructor === Array) && console.log('its an array');
(o.constructor === Object) && console.log('its an object');
(o.constructor === Number || s.constructor === Boolean) && console.log('this won\'t run');

এর প্রত্যেকটি তার যথাযথ শ্রেণিবদ্ধ ফাংশন দ্বারা নির্মিত হয়েছে, যেমন "নতুন অবজেক্ট ()" ইত্যাদি etc.

এছাড়াও, হাঁস-টাইপিং: "এটি যদি হাঁসের মতো দেখায়, হাঁসের মতো হাঁটতে থাকে এবং হাঁসের মতো গন্ধ হয় - এটি অবশ্যই একটি অ্যারে" অর্থ, এর বৈশিষ্ট্যগুলি পরীক্ষা করুন।

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

সম্পাদনা করুন; 12/05/2016

মনে রাখবেন, আপনি সবসময় পদ্ধতির সংমিশ্রণগুলিও ব্যবহার করতে পারেন। এখানে ব্যবহারের একটি উদাহরণ'sটাইপফের সাথে ক্রিয়াকলাপের ইনলাইন মানচিত্র :

var type = { 'number': Math.sqrt.bind(Math), ... }[ typeof datum ];

ইনলাইন-মানচিত্র ব্যবহারের আরও একটি 'বাস্তব বিশ্ব' উদাহরণ এখানে:

function is(datum) {
    var isnt = !{ null: true, undefined: true, '': true, false: false, 0: false }[ datum ];
    return !isnt;
}
console.log( is(0), is(false), is(undefined), ... );  // >> true true false

এই ফাংশনটি [কাস্টম] "টাইপ-কাস্টিং" ব্যবহার করবে - পরিবর্তে "টাইপ - / - মান-ম্যাপিং" - কোনও ভেরিয়েবলটি আসলে "উপস্থিত" কিনা তা বের করার জন্য। এখন আপনি সেই বাজে চুলকে বিভক্ত করতে পারেন null& 0!

অনেক বার আপনি এর ধরণ সম্পর্কেও চিন্তা করেন না । টাইপিং এড়ানোর আরেকটি উপায় হ'ল হাঁস-প্রকার সেটগুলি সংযুক্ত করে:

this.id = "998";  // use a number or a string-equivalent
function get(id) {
    if (!id || !id.toString) return;
    if (id.toString() === this.id.toString()) http( id || +this.id );
    // if (+id === +this.id) ...;
}

উভয় Number.prototype এবং String.prototype একটি.toString() method । আপনি কেবল নিশ্চিত করেছেন যে সংখ্যার স্ট্রিং-সমতুল্য একই ছিল এবং তারপরে আপনি নিশ্চিত করেছেন যে আপনি এটি httpহিসাবে একটি হিসাবে ফাংশনটিতে পাস করেছেন Number। অন্য কথায়, আমরা কী ধরণের তা কী তা যত্নশীল করিনি ।

আশা করি এটি আপনাকে আরও কাজ করে :)


আপনার সরল পুরাতন সংখ্যার জন্য অন্য কিছু চেকের প্রয়োজন হবে, যেহেতু তাদের নির্মাণকারীর সম্পত্তি নেওয়ার চেষ্টা করা ব্যর্থ হবে:

@ ট্যারাজাবুরো এখনই ক্রোম কনসোলে আমার জন্য ভাল কাজ করেছেন। আপনি কী ভাবেন যে এটি কাজ করবে না?
মার্ক অ্যামেরি

2
@ টোরাজাবুরো আপনি সম্ভবত ( (o.constructor === Number || s.constructor === Boolean)) এর সাথে খেলতে চাইবেন । উপাখ্যানগুলি parseIntএবং NaNভঙ্গুর তবে শক্তিশালী সরঞ্জাম। কেবল মনে রাখবেন, নোট-এ-সংখ্যাটি নন-এ-সংখ্যা নয়, এবং সংজ্ঞায়িত করা যায় না।
কোডি

1
a.constructor === অ্যারেটি ভুল এবং কখনও কখনও ব্যর্থ হতে পারে, অ্যারে ব্যবহার করুন। আইসআর্রে দেখুন web.mit.edu/jwalden/www/isArray.html
axkibe

1
সম্মত, এটি ব্যর্থ-নিরাপদ নয়। সম্পত্তির চেকগুলি ব্যবহার করার একটি আরও ভাল উপায় - এই মুহূর্তে এটিই সত্যিকারের ব্যর্থ-নিরাপদ উপায়। উদাহরণ: if(thing.call) { 'its a function'; }বা if(thing.defineProperties) { 'its an object'; }। ইনপুট জন্য ধন্যবাদ, আক্কিবি!
কোডি

17

আমি কেন সত্যই দেখতে পাচ্ছি না কেন কেউ typeofএই ক্ষেত্রে কেবল ব্যবহার করবেন না :

if (typeof str === 'string') {
  return 42;
}

হ্যাঁ এটি অবজেক্ট-মোড়ানো স্ট্রিংগুলির বিরুদ্ধে ব্যর্থ হবে (উদাঃ new String('foo')) তবে এগুলি ব্যাপকভাবে একটি খারাপ অভ্যাস হিসাবে বিবেচিত হয় এবং বেশিরভাগ আধুনিক বিকাশ সরঞ্জামগুলি তাদের ব্যবহারকে নিরুৎসাহিত করতে পারে। (আপনি যদি একটি দেখতে পান তবে ঠিক করুন!)

Object.prototype.toStringকৌতুক কিছু যে সব ফ্রন্ট-এন্ড বিকাশকারীরা তাঁদের কেরিয়ার এক দিন করছেন দোষী পাওয়া গেছে কিন্তু এটি চালাক তার পালিশ দ্বারা আপনাকে মূর্খ দেবেন না: এটা যত তাড়াতাড়ি কিছু বানর-প্যাচ অবজেক্ট প্রোটোটাইপ হিসেবে ভঙ্গ হবে:

const isString = thing => Object.prototype.toString.call(thing) === '[object String]';

console.log(isString('foo'));

Object.prototype.toString = () => 42;

console.log(isString('foo'));


15

আমি এই সহজ সমাধানটি ব্যবহার করতে চাই:

var myString = "test";
if(myString.constructor === String)
{
     //It's a string
}

3
কীভাবে কোডির উত্তর থেকে 4 বছর পরে আলাদা?
জনাথন এইচ

3
@ শেলজাহান কোডির উত্তর দুর্দান্ত। আমার উত্তর (সম্পূর্ণ পাঠ্য) সংক্ষিপ্ত এবং সরাসরি বিন্দুতে। আপনি জিজ্ঞাসা করেছেন ... :)
স্কটিটিজি

একটি ফাংশন হিসাবে, এটি মোকাবেলা করার একটি উপায় প্রয়োজন undefinedএবং nullখালি স্ট্রিংগুলির ( ''এবং উভয় new String('')) জন্য সঠিক উত্তর পাওয়া দরকার ।
মাইকবিটেন

@MikeBeaton কোন সমস্যা নেই: (mystring || false) && mystring.constructor === String। আমি মিথ্যা ব্যবহার করেছি যদি এটি কোনও ফাংশনে ব্যবহৃত হয় যা অবশ্যই বুলিয়ান ফেরত যেতে পারে।
alans

13

পারফরম্যান্সে গুরুত্বপূর্ণ বিষয়গুলির এটি একটি দুর্দান্ত উদাহরণ:

স্ট্রিংয়ের পরীক্ষার মতো সাধারণ কিছু করা সঠিকভাবে না করা ব্যয়বহুল হতে পারে।

উদাহরণস্বরূপ, আমি যদি কিছু স্ট্রিং হয় কিনা তা পরীক্ষা করার জন্য কোনও ফাংশন লিখতে চাইতাম, আমি এটি দুটি উপায়ে একটিতে করতে পারলাম:

1) const isString = str => (Object.prototype.toString.call(str) === '[object String]');

2) const isString = str => ((typeof str === 'string') || (str instanceof String));

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

যখন পারফরম্যান্স পরীক্ষা করা হয়, উদাহরণ 1 উদাহরণ 2 এর চেয়ে কম 79% ধীর!

পরীক্ষাগুলি দেখুন: https://jsperf.com/isstringtype


পরীক্ষার লিঙ্কটি মারা গেছে তবে আমি আপনাকে বিশ্বাস করি। এই ধরণের তথ্য অত্যন্ত গুরুত্বপূর্ণ। আইএমএইচও এটি হওয়া উচিত, যদি সর্বাধিক উত্সাহিত উত্তর না হয় তবে কমপক্ষে বর্তমানের শীর্ষস্থানীয় উত্তরের উপর সর্বাধিক আপত্তিকৃত মন্তব্য।
কোডার

typeof str === 'string' || str instanceof String(আমি প্রথম if (..)ক্ষেত্রেগুলিকে পছন্দ করি যা কমে যেতে পারি ); নির্বিশেষে, # 2 এ আদিম এবং অবজেক্ট উভয় প্রকারের পরীক্ষা করা পরিষ্কার এবং পর্যাপ্ত। এই চেকগুলি যাইহোক 'বিরল' হওয়া উচিত।
ব্যবহারকারী 2864740

12
if (s && typeof s.valueOf() === "string") {
  // s is a string
}

উভয় স্ট্রিং লিটারেল let s = 'blah'এবং অবজেক্ট স্ট্রিংয়ের জন্য কাজ করেlet s = new String('blah')


3
মনোযোগ! এটি খালি স্ট্রিংগুলিতে ব্যর্থ হবে, যেগুলি মিথ্যা।
ফিলিপ সুমি

8

লোডাশ থেকে নেওয়া:

function isString(val) {
   return typeof val === 'string' || ((!!val && typeof val === 'object') && Object.prototype.toString.call(val) === '[object String]');
}

console.log(isString('hello world!')); // true
console.log(isString(new String('hello world'))); // true

যদি কেউ উত্সটি জানতে চান তবে এটি github.com/lodash/lodash/blob/master/isString.js
রিকার্ডো

5

আমি মনে করি যে @ কাস্টমকম্যান্ডার সমাধানটি আপনার 90% ক্ষেত্রে যথেষ্ট হবে:

typeof str === 'string'

আপনাকে সঠিকভাবে পরিবেশন করা উচিত (সাধারণত যেহেতু কোনও কারণ থাকার কোনও কারণ নেই new String('something') )।

আপনি যদি পরিচালনা করতে আগ্রহী হন String অবজেক্টটিও (উদাহরণস্বরূপ আপনি ২ য় পক্ষের কাছ থেকে কিছু বৈচিত্র্য প্রত্যাশা করেছেন) তবে @ ক্লিয়ারক্লাউড 8 হিসাবে প্রস্তাবিত লোড্যাশটি পরিষ্কার, সহজ এবং মার্জিত সমাধানের মতো বলে মনে হচ্ছে।

আমি তবে তাদের আকারের কারণে লোডাশের মতো লাইব্রেরিগুলিতে সতর্ক হওয়ার পরামর্শ দেব। পরিবর্তে না

import _ from 'lodash'
...
_.isString(myVar)

যা পুরো বিশাল লোডাশ অবজেক্টটি নিয়ে আসে, আমি এর মতো কিছু প্রস্তাব দেব:

import { isString as _isString } from 'lodash'
...
_isString(myVar)

এবং সাধারণ বান্ডিলিংয়ের সাথে আপনার ভাল হওয়া উচিত (আমি এখানে ক্লায়েন্ট কোড উল্লেখ করি)।


কেন === যখন == যথেষ্ট
জাভর

4

আপনি যদি নোড.জেএস পরিবেশে কাজ করেন, আপনি কেবল বিল্ট-ইন ফাংশনটি ইউস-এ স্ট্রিং ব্যবহার করতে পারেন।

const util = require('util');
if (util.isString(myVar)) {}

সম্পাদনা: @ জেহির উল্লেখ অনুসারে, এটি v4 সাল থেকে অবহেলিত।


কোন প্রতিস্থাপন আছে?
অ্যান্থনি কং

3
নথিগুলি " typeof value === 'string'পরিবর্তে ব্যবহার করুন" বলে say
মিঃ রজার্স

x = new String('x'); x.isString(x);ফেরৎ মিথ্যা । নেই util.types.isStringObject()কিন্তু যে আয় জন্য মিথ্যা x = 'x'টাইপ স্ট্রিং। দুটি ইউটিলিটি ফাংশন যা একেবারে কোনও ইউটিলিটি সরবরাহ করে না ...
স্পিন্কাস

4

নিম্নলিখিত পদ্ধতিটি পরীক্ষা করবে যে কোনও ভেরিয়েবল একটি স্ট্রিং কিনা ( ভেরিয়েবলগুলি বিদ্যমান নেই )।

const is_string = value => {
  try {
    return typeof value() === 'string';
  } catch (error) {
    return false;
  }
};

let example = 'Hello, world!';

console.log(is_string(() => example)); // true
console.log(is_string(() => variable_doesnt_exist)); // false

3

আমি এটিও দেখতে পেয়েছি যে এটি খুব ভাল কাজ করে, এবং এটি অন্যান্য উদাহরণগুলির তুলনায় অনেক কম।

if (myVar === myVar + '') {
   //its string
} else {
   //its something else
}

খালি উদ্ধৃতিতে একত্রিত করে এটি মানটিকে স্ট্রিংয়ে রূপান্তর করে। যদি myVarইতিমধ্যে একটি স্ট্রিং হয় তবে if স্টেটমেন্টটি সফল।


3
সমস্যাটি হ'ল আপনি যখন কোনও ধরণের পরীক্ষা করতে চান তখন আপনি একটি পরিবর্তনশীলকে চাপ দিচ্ছেন। তুলনা করার সময় এটি আমার কাছে কিছুটা ব্যয়বহুল বলে মনে হয় typeof
অলিকাল

1
হ্যাঁ, আপনি ঠিক বলেছেন। jsperf বলেছিল যে এটি প্রায় 20% তুলনায় ধীর ছিল typeofকিন্তু এখনও তার চেয়ে বেশ খানিকটা দ্রুত toString। যে কোনও উপায়ে, আমি অনুমান করি যে কেবল জোর করে দেওয়ার জন্য সিনট্যাক্সটি আমার পছন্দ হয়েছে।
ক্রিস ডলফিন

4
এটি স্ট্রিং টাইপের সাথে কাজ করে না; var s = new String('abc'); > s === s + '' > false
ব্যবহারকারী5672998

1
new Stringএক ধরণের তৈরি করে এমন কাশ দিয়ে কাজ করে না objectw3schools.com/js/tryit.asp?filename=tryjs_string_object2
ক্রিস ডলফিন

ভাল চিন্তা, কিন্তু বস্তু মোড়ানো স্ট্রিং প্রান্ত কেস ছেড়ে।
অ্যান্টনি রটলেজ

3
var a = new String('')
var b = ''
var c = []

function isString(x) {
  return x !== null && x !== undefined && x.constructor === String
}

console.log(isString(a))
console.log(isString(b))
console.log(isString(c))

X.constructor === স্ট্রিংও নাল বা অপরিজ্ঞায়িত হয়ে মিথ্যা ফিরিয়ে দেবে কেন আপনার নাল বা অপরিজ্ঞাত জন্য পরীক্ষা করতে হবে?
জুলিউস ম্যানসন

1
@ জুলেস ম্যানসন: এটি ত্রুটি ছুঁড়ে ফেলবে, উত্পাদন করবে না false
রাই-

3

আমি এই সহজ কৌশল জন্য টাইপ-যাচাই করুন দরকারী এটি স্ট্রিং -

String(x) === x // true, if x is a string
                // false in every other case

const test = x =>
  console.assert
    ( String(x) === x
    , `not a string: ${x}`
    )

test("some string")
test(123)           // assertion failed
test(0)             // assertion failed
test(/some regex/)  // assertion failed
test([ 5, 6 ])      // assertion failed
test({ a: 1 })      // assertion failed
test(x => x + 1)    // assertion failed

একই কৌশলটি সংখ্যাটির জন্যও কাজ করে -

Number(x) === x // true, if x is a number
                // false in every other case

const test = x =>
  console.assert
    ( Number(x) === x
    , `not a number: ${x}`
    )

test("some string") // assertion failed
test(123)           
test(0)             
test(/some regex/)  // assertion failed
test([ 5, 6 ])      // assertion failed
test({ a: 1 })      // assertion failed
test(x => x + 1)    // assertion failed

আর এর জন্য RegExp -

RegExp(x) === x // true, if x is a regexp
                // false in every other case

const test = x =>
  console.assert
    ( RegExp(x) === x
    , `not a regexp: ${x}`
    )

test("some string") // assertion failed
test(123)           // assertion failed
test(0)             // assertion failed
test(/some regex/)  
test([ 5, 6 ])      // assertion failed
test({ a: 1 })      // assertion failed
test(x => x + 1)    // assertion failed

অবজেক্টের জন্য একই -

Object(x) === x // true, if x is an object
                // false in every other case

NB, regexps, অ্যারে এবং ফাংশনগুলিকেও বস্তু হিসাবে বিবেচনা করা হয়।

const test = x =>
  console.assert
    ( Object(x) === x
    , `not an object: ${x}`
    )

test("some string") // assertion failed
test(123)           // assertion failed
test(0)             // assertion failed
test(/some regex/)  
test([ 5, 6 ])      
test({ a: 1 })      
test(x => x + 1)    

তবে, অ্যারের জন্য পরীক্ষা করা কিছুটা আলাদা -

Array.isArray(x) === x // true, if x is an array
                       // false in every other case

const test = x =>
  console.assert
    ( Array.isArray(x)
    , `not an array: ${x}`
    )

test("some string") // assertion failed
test(123)           // assertion failed
test(0)             // assertion failed
test(/some regex/)  // assertion failed
test([ 5, 6 ])      
test({ a: 1 })      // assertion failed
test(x => x + 1)    // assertion failed

এই কৌশলটি তবে ফাংশনগুলির জন্য কাজ করে না -

Function(x) === x // always false

var x = new String(x); String(x)===xমিথ্যা প্রত্যাবর্তন তবে ({}).toString.call(x).search(/String/)>0সর্বদা স্ট্রিংয়ের জিনিসগুলির জন্য ফিরে আসে
সিঙ্ক

1
function isClass(x,re){return ({}).toString.call(x).search(re)>0;}; isClass("hello",/String/) বা isClass(3,/Number/)বাisClass(null,/Null/)
অবিচ্ছিন্ন

2

একটি সহজ সমাধান হবে:

var x = "hello"

if(x === x.toString()){
// it's a string 
}else{
// it isn't
}

1
এটি স্ট্রিং কিনা তা পরীক্ষা করে না । এটি একটি স্ট্রিং তৈরি করে, প্রচুর জিনিসের toString()কার্যকারিতা থাকে
মুহাম্মদ উমর

7
@ মুহাম্মাদ উমর হ্যাঁ, এটি এটিকে একটি স্ট্রিতে রূপান্তরিত করে তবে মূল মানের বিরুদ্ধে সনাক্তকরণের জন্য এটি পরীক্ষা করে যা মূল মানটিও যদি একটি স্ট্রিং হয় তবেই এটি সত্য
মিঃ হোয়াইট

4
এটি ভুল: আপনি .toStringকোনও মান অন্ধভাবে কল করতে পারবেন না ; এক্স পরীক্ষা করা বাতিল বা
অপরিজ্ঞাত

1
ধারণাটি এখনও ব্যবহারযোগ্য। x === স্ট্রিং (এক্স) নিরাপদ এবং কাজ করে।
মার্টন স্যারি

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

2

একজন টাইপেকিকার সহায়ক:

function isFromType(variable, type){
  if (typeof type == 'string') res = (typeof variable == type.toLowerCase())
  else res = (variable.constructor == type)
  return res
}

ব্যবহার:

isFromType('cs', 'string') //true
isFromType('cs', String) //true
isFromType(['cs'], Array) //true
isFromType(['cs'], 'object') //false

এছাড়াও আপনি যদি এটি পুনরাবৃত্ত হতে চান (যেমন অ্যারে যেমন একটি অবজেক্ট), আপনি ব্যবহার করতে পারেন instanceof

( ['cs'] instanceof Object //true)


2

আমি এখানে একটি বাকী অংশে অন্য একটি রুট যাচ্ছি যা ভেরিয়েবলটি নির্দিষ্ট, বা কোনও নির্দিষ্ট সংখ্যার ধরণের সদস্য কিনা তা জানার চেষ্টা করে।
জেএস হাঁসচাঁপায় নির্মিত; যদি কিছু স্ট্রিংয়ের মতো ঝাঁকুনি দেয় তবে আমরা স্ট্রিংয়ের মতো ব্যবহার করতে পারি এবং তা করা উচিত।

কি 7একটি স্ট্রিং? তাহলে কেন /\d/.test(7)কাজ করে?
কি {toString:()=>('hello there')}একটি স্ট্রিং? তাহলে কেন ({toString:()=>('hello there')}) + '\ngeneral kenobi!'কাজ করে? উপরোক্ত কাজ করা উচিত ,
এগুলি নিয়ে প্রশ্ন নেই the

সুতরাং আমি নীচে একটি duckyString()ক্রিয়াকলাপ তৈরি করেছি
নীচে আমি অনেক উত্তর যাচাই না করে অন্যান্য উত্তর দ্বারা পরীক্ষিত। প্রতিটি কোডের জন্য:

  • একটি স্ট্রিং-মত ভেরিয়েবল সেট করে
  • এটিতে অভিন্ন স্ট্রিং অপারেশন চালায় এবং আউটপুটগুলির তুলনা করার জন্য একটি আসল স্ট্রিং (প্রমাণ করে যে তারা স্ট্রিংয়ের মতো আচরণ করতে পারে)
  • duckyString()সত্যিকারের স্ট্রিংগুলি প্রত্যাশা করে এমন কোডের ইনপুটগুলিকে স্বাভাবিক করতে আপনাকে দেখানোর জন্য স্ট্রিং-জাতীয়টিকে সত্যিকারের স্ট্রিংয়ে রূপান্তরিত করে
text = 'hello there';
out(text.replace(/e/g, 'E') + ' ' + 'hello there'.replace(/e/g, 'E'));
out('Is string? ' + duckyString(text) + '\t"' + duckyString(text, true) + '"\n');

text = new String('oh my');
out(text.toUpperCase() + ' ' + 'oh my'.toUpperCase());
out('Is string? ' + duckyString(text) + '\t"' + duckyString(text, true) + '"\n');

text = 368;
out((text + ' is a big number') + ' ' + ('368' + ' is a big number'));
out('Is string? ' + duckyString(text) + '\t"' + duckyString(text, true) + '"\n');

text = ['\uD83D', '\uDE07'];
out(text[1].charCodeAt(0) + ' ' + '😇'[1].charCodeAt(0));
out('Is string? ' + duckyString(text) + '\t"' + duckyString(text, true) + '"\n');

function Text() { this.math = 7; }; Text.prototype = {toString:function() { return this.math + 3 + ''; }}
text = new Text();
out(String.prototype.match.call(text, '0') + ' ' + text.toString().match('0'));
out('Is string? ' + duckyString(text) + '\t"' + duckyString(text, true) + '"\n');

এই হিসাবে একই শিরা মধ্যে হয় !!xযেমন উল্টোদিকে x===trueও পরীক্ষামূলক যদি কিছু array- হয় মত প্রকৃত অ্যারের গুরুত্বসহ এখন পরিবর্তে।
jQuery অবজেক্টস; তারা অ্যারে হয়? না তারা কি যথেষ্ট ভাল? হ্যাঁ, আপনি এগুলি Array.prototypeঠিকঠাক ফাংশনগুলির মাধ্যমে চালাতে পারেন ।
এটি এই নমনীয়তা যা জেএসকে তার শক্তি দেয় এবং স্ট্রিংগুলির জন্য পরীক্ষা করা আপনার কোডটিকে কম ইন্টারঅ্যাপের করে তোলে।

উপরের ফলাফল:

hEllo thErE hEllo thErE
Is string? true "hello there"

OH MY OH MY
Is string? true "oh my"

368 is a big number 368 is a big number
Is string? true "368"

56839 56839
Is string? true "😇"

0 0
Is string? true "10"

সুতরাং, আপনি কেন জানতে চান যে কোনও কিছুর স্ট্রিং রয়েছে তা এগুলিই।
যদি, আমার মতো, আপনিও গুগল থেকে এখানে এসে পৌঁছেছেন এবং কিছু স্ট্রিং-জাতীয় কিনা তা দেখতে চেয়েছিলেন , এখানে একটি উত্তর।
আপনি যদি দীর্ঘ বা গভীরভাবে নেস্টেড চর অ্যারে নিয়ে কাজ না করেন তবে এটি ব্যয়বহুলও নয়।
এটি কারণ যদি সমস্ত বিবৃতি, কোনও ফাংশন কল পছন্দ করে না .toString()
আপনি যদি কেবলমাত্র toString()'s' বা 'মাল্টি-বাইট' অক্ষরযুক্ত অক্ষরের সাথে একটি গৃহস্থালি অ্যারে দেখার চেষ্টা করছেন তবে ব্যতীত স্ট্রিংটি তৈরি করা ছাড়াও বাকীগুলি নির্ধারণ করা এবং অক্ষরগুলি যথাক্রমে গণনা করা ছাড়া অন্য কোনও উপায় নেই check

function duckyString(string, normalise, unacceptable) {
    var type = null;
    if (!unacceptable)
        unacceptable = {};
    if (string && !unacceptable.chars && unacceptable.to == null)
        unacceptable.to = string.toString == Array.prototype.toString;

    if (string == null)
        ;

    //tests if `string` just is a string
    else if (
        !unacceptable.is &&
        (typeof string == 'string' || string instanceof String)
    )
        type = 'is';

    //tests if `string + ''` or `/./.test(string)` is valid
    else if (
        !unacceptable.to &&
        string.toString && typeof string.toString == 'function' && string.toString != Object.prototype.toString
    )
        type = 'to';

    //tests if `[...string]` is valid
    else if (
        !unacceptable.chars &&
        (string.length > 0 || string.length == 0)
    ) {
        type = 'chars';
        //for each char
        for (var index = 0; type && index < string.length; ++index) {
            var char = string[index];

            //efficiently get its length
            var length = ((duckyString(char, false, {to:true})) ?
                char :
                duckyString(char, true) || {}
            ).length;

            if (length == 1)
                continue;

            //unicode surrogate-pair support
            char = duckyString(char, true);
            length = String.prototype[Symbol && Symbol.iterator];
            if (!(length = length && length.call(char)) || length.next().done || !length.next().done)
                type = null;
        }
    }

    //return true or false if they dont want to auto-convert to real string
    if (!(type && normalise))
        //return truthy or falsy with <type>/null if they want why it's true
        return (normalise == null) ? type != null : type;

    //perform conversion
    switch (type) {
    case 'is':
        return string;
    case 'to':
        return string.toString();
    case 'chars':
        return Array.from(string).join('');
    }
}

অন্তর্ভুক্ত বিকল্প আছে

  • কোন পদ্ধতিটিকে স্ট্রিং-ওয়াই বলে মনে করেন তা জিজ্ঞাসা করুন
  • স্ট্রিং-সনাক্তকরণের পদ্ধতিগুলি বাদ দিন (উদাহরণস্বরূপ যদি আপনি পছন্দ করেন না .toString())

এখানে আরও পরীক্ষাগুলি রয়েছে কারণ আমি একজন সমাপ্তি:

out('Edge-case testing')
function test(text, options) {
    var result = duckyString(text, false, options);
    text = duckyString(text, true, options);
    out(result + ' ' + ((result) ? '"' + text + '"' : text));
}
test('');
test(null);
test(undefined);
test(0);
test({length:0});
test({'0':'!', length:'1'});
test({});
test(window);
test(false);
test(['hi']);
test(['\uD83D\uDE07']);
test([['1'], 2, new String(3)]);
test([['1'], 2, new String(3)], {chars:true});
  • সমস্ত নেতিবাচক কেসগুলির জন্য দায়বদ্ধ বলে মনে হচ্ছে
  • এটি ব্রাউজারগুলি> = আইই 8 এ চলতে হবে
  • স্ট্রিং ইটারেটর সমর্থন সহ ব্রাউজারগুলিতে একাধিক বাইট সহ গৃহস্থালি অ্যারে

আউটপুট:

Edge-case testing
is ""
null null
null null
to "0"
chars ""
chars "!"
null null
chars ""
to "false"
null null
chars "😇"
chars "123"
to "1,2,3"

1

@ ডিআরএক্স এর উত্তরে কেবল প্রসারিত করতে , আমি এটি করব:

function isWhitespaceEmptyString(str)
{
    //RETURN:
    //      = 'true' if 'str' is empty string, null, undefined, or consists of white-spaces only
    return str ? !(/\S/.test(str)) : (str === "" || str === null || str === undefined);
}

এটি nullগুলি এবং undefinedধরণের জন্যও অ্যাকাউন্ট করবে এবং এটি নন-স্ট্রিং প্রকারের যেমন যত্ন নেবে 0


1

এটি আমার পক্ষে যথেষ্ট ভাল।

সতর্কতা: এটি একটি নিখুঁত সমাধান নয়। আমার পোস্টের নীচে দেখুন।

Object.prototype.isString = function() { return false; };
String.prototype.isString = function() { return true; };

var isString = function(a) {
  return (a !== null) && (a !== undefined) && a.isString();
};

এবং আপনি নীচের মত এটি ব্যবহার করতে পারেন।

//return false
isString(null);
isString(void 0);
isString(-123);
isString(0);
isString(true);
isString(false);
isString([]);
isString({});
isString(function() {});
isString(0/0);

//return true
isString("");
isString(new String("ABC"));

সতর্কতা: এটি ক্ষেত্রে ভুলভাবে কাজ করে:

//this is not a string
var obj = {
    //but returns true lol
    isString: function(){ return true; }
}

isString(obj) //should be false, but true

-1

যে কোনও কিছুর ধরণ নির্ধারণ করতে আপনি এই ফাংশনটি ব্যবহার করতে পারেন:

var type = function(obj) {
    return Object.prototype.toString.apply(obj).replace(/\[object (.+)\]/i, '$1').toLowerCase();
};

কোনও ভেরিয়েবল একটি স্ট্রিং কিনা তা পরীক্ষা করতে:

type('my string') === 'string' //true
type(new String('my string')) === 'string' //true
type(`my string`) === 'string' //true
type(12345) === 'string' //false
type({}) === 'string' // false

https://codepen.io/patodiblasi/pen/NQXPwY?editors=0012


-2

আমি নিশ্চিত নই যে আপনি যদি বোঝেন যে এটি কোনও ধরণের stringবিষয়বস্তু নির্বিশেষে টাইপ কিনা, বা এর সামগ্রীগুলি কোনও সংখ্যা বা স্ট্রিং কিনা তা নির্বিশেষে।

সুতরাং এর ধরণটি যদি স্ট্রিং হয় তবে তা ইতিমধ্যে উত্তর দেওয়া হয়েছে।
তবে এর স্ট্রিং বা একটি সংখ্যা যদি এর বিষয়বস্তুর উপর ভিত্তি করে জানতে, আমি এটি ব্যবহার করব:

function isNumber(item) {
    return (parseInt(item) + '') === item;
}

এবং কিছু উদাহরণের জন্য:

isNumber(123);   //true
isNumber('123'); //true
isNumber('123a');//false
isNumber('');    //false

আমি মনে করি আমি প্রাথমিকভাবে কীভাবে পরীক্ষা করতে হবে তা জিজ্ঞাসা করছিলাম, যদিও আমি কীভাবে তখনও প্রশ্নটি ফর্ম করতে জানতাম না। (এবং /^\d+$/.test('123')সম্ভাব্য পার্সিং সম্পর্কিত জটিলতার জটিলতা এড়াতে আমি সম্ভবত এটি করেছি )
অলিকাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.