উত্তর:
আপনি 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] এর বিপরীতে সুপারিশ করা হয় । আপনি যদি ইচ্ছা করেন তবে এগুলি কীভাবে পরিচালনা করবেন তার জন্য অন্যান্য উত্তরগুলি দেখুন।
new String('foo')
, তবে এটি কোনও বিষয় নয় কারণ অবজেক্ট-মোড়ানো স্ট্রিংগুলি একটি মূল্যহীন বৈশিষ্ট্য যা আপনার ব্যবহার করা উচিত নয়। গুগল স্টাইল গাইড তাদের নিষেধ করে , ডগলাস ক্রকফোর্ড তাদের প্রত্যাখ্যান করতে চায় এবং কোনও গ্রন্থাগার সেগুলি ব্যবহার করে না। তাদের উপস্থিতি নেই এবং typeof
ভীতি ছাড়াই ব্যবহার করুন tend
typeof
উঠিয়ে নেওয়া পাশাপাশি?
এটি আমার জন্য কাজ করে কি:
if (typeof myVar === 'string' || myVar instanceof String)
// it's a string
else
// it's something else
instanceof
চেকটি অর্থহীন শোনায় যদি না আপনি কিছু খুব অস্বাভাবিক কোডিং অনুশীলন অনুসরণ করেন, এবং এই উত্তরটি এটি কী করে বা আপনি এটি কেন ব্যবহার করতে পারেন তা ব্যাখ্যা করার জন্য কিছুই করে না। আপনার কেবলমাত্র প্রয়োজনটির প্রয়োজন যদি আপনি অবজেক্ট-মোড়ানো স্ট্রিং ব্যবহার করেন তবে অবজেক্ট-মোড়ানো স্ট্রিংগুলি একটি মূল্যহীন বৈশিষ্ট্য যা কেউ ব্যবহার করে না এবং গুগল এবং ক্রকফোর্ড উভয়ই খারাপ অভ্যাস হিসাবে নিন্দা করেছেন ( google-styleguide.googlecode.com/svn/ ট্রাঙ্ক /… , ক্রকফোর্ড / জাভাস্ক্রিপ্ট / রেকর্ডার html )।
typeof
এবং আপনার instanceof
কোডটিকে অন্যেরা কল করতে পারে তবে ভাল পরামর্শের মতো মনে হয়। @ মার্কএমেরির postmessage
প্রান্তের বিষয়টি যদি আপনি জিজ্ঞাসা করেন যে "আমি কী ছিলাম postmessage
?" - তবে আপনি এটি ইন্টারফেসে পরিচালনা করবেন এবং প্রচারের অনুমতি পাবেন না। অন্য কোথাও, কিছু জেএস এস্থেস্টস সেগুলি অস্বীকার করলেও অবহিত কোডিং পদ্ধতিগুলি হ্যান্ডেল করা সঠিক বলে মনে হচ্ছে। আপনার কোডটি স্ট্রিং গ্রহণযোগ্য হিসাবে কখনও মন্তব্য করবেন না, যদি না তা সত্যই না করে!
যেহেতু 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))
global || window
window
myObject+"" === myObject
কোনও বস্তুটি স্ট্রিং কিনা তা পরীক্ষা করার জন্য পরীক্ষা করতাম (বা আরও ভাল, আমি প্রথমে আচরণ চালিত টাইপ সিস্টেমে চেক টাইপ করব না)।
toString
মধ্যে Object.prototype
। সুতরাং, আমি যুক্তি দিয়েছি যে toString
কোনও বস্তুর প্রকার যাচাই করার উপর নির্ভর করা, সর্বোপরি একটি খারাপ অভ্যাস।
আমি 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। টাইপ () এর জন্য।
_.every()
প্রথমে প্রথমে ব্যবহার করতে একটু বিভ্রান্তিকর, এবং _.isBoolean()
আমার কোম্পানির ডিভসকে বিভ্রান্ত করার মতো সাধারণ কিছু । একজন দেব ভুল করে ভেবেছিলেন যে মানটি বুলিয়ান এবং মিথ্যা হলে এটি মিথ্যা হবে। আমার পক্ষে জার্মানের চেয়ে ইংরেজি পড়া সহজ, কারণ আমি জার্মান জানি না। জাভাস্ক্রিপ্ট শিখুন এবং এটি সমস্ত অর্থবোধ করবে।
function isString (obj) {
return (Object.prototype.toString.call(obj) === '[object String]');
}
আমি এটি এখানে দেখেছি:
http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/
Object.prototype.toString.call(obj) === '[object String]'
?
(x === y)
চেয়ে ভাল কি আছে x === y
?
সবচেয়ে ভালো উপায়:
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.
এছাড়াও, হাঁস-টাইপিং: "এটি যদি হাঁসের মতো দেখায়, হাঁসের মতো হাঁটতে থাকে এবং হাঁসের মতো গন্ধ হয় - এটি অবশ্যই একটি অ্যারে" অর্থ, এর বৈশিষ্ট্যগুলি পরীক্ষা করুন।
আশাকরি এটা সাহায্য করবে.
মনে রাখবেন, আপনি সবসময় পদ্ধতির সংমিশ্রণগুলিও ব্যবহার করতে পারেন। এখানে ব্যবহারের একটি উদাহরণ'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
। অন্য কথায়, আমরা কী ধরণের তা কী তা যত্নশীল করিনি ।
আশা করি এটি আপনাকে আরও কাজ করে :)
(o.constructor === Number || s.constructor === Boolean)
) এর সাথে খেলতে চাইবেন । উপাখ্যানগুলি parseInt
এবং NaN
ভঙ্গুর তবে শক্তিশালী সরঞ্জাম। কেবল মনে রাখবেন, নোট-এ-সংখ্যাটি নন-এ-সংখ্যা নয়, এবং সংজ্ঞায়িত করা যায় না।
if(thing.call) { 'its a function'; }
বা if(thing.defineProperties) { 'its an object'; }
। ইনপুট জন্য ধন্যবাদ, আক্কিবি!
আমি কেন সত্যই দেখতে পাচ্ছি না কেন কেউ 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'));
আমি এই সহজ সমাধানটি ব্যবহার করতে চাই:
var myString = "test";
if(myString.constructor === String)
{
//It's a string
}
undefined
এবং null
খালি স্ট্রিংগুলির ( ''
এবং উভয় new String('')
) জন্য সঠিক উত্তর পাওয়া দরকার ।
(mystring || false) && mystring.constructor === String
। আমি মিথ্যা ব্যবহার করেছি যদি এটি কোনও ফাংশনে ব্যবহৃত হয় যা অবশ্যই বুলিয়ান ফেরত যেতে পারে।
পারফরম্যান্সে গুরুত্বপূর্ণ বিষয়গুলির এটি একটি দুর্দান্ত উদাহরণ:
স্ট্রিংয়ের পরীক্ষার মতো সাধারণ কিছু করা সঠিকভাবে না করা ব্যয়বহুল হতে পারে।
উদাহরণস্বরূপ, আমি যদি কিছু স্ট্রিং হয় কিনা তা পরীক্ষা করার জন্য কোনও ফাংশন লিখতে চাইতাম, আমি এটি দুটি উপায়ে একটিতে করতে পারলাম:
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 এ আদিম এবং অবজেক্ট উভয় প্রকারের পরীক্ষা করা পরিষ্কার এবং পর্যাপ্ত। এই চেকগুলি যাইহোক 'বিরল' হওয়া উচিত।
if (s && typeof s.valueOf() === "string") {
// s is a string
}
উভয় স্ট্রিং লিটারেল let s = 'blah'
এবং অবজেক্ট স্ট্রিংয়ের জন্য কাজ করেlet s = new String('blah')
লোডাশ থেকে নেওয়া:
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
আমি মনে করি যে @ কাস্টমকম্যান্ডার সমাধানটি আপনার 90% ক্ষেত্রে যথেষ্ট হবে:
typeof str === 'string'
আপনাকে সঠিকভাবে পরিবেশন করা উচিত (সাধারণত যেহেতু কোনও কারণ থাকার কোনও কারণ নেই new String('something')
)।
আপনি যদি পরিচালনা করতে আগ্রহী হন String
অবজেক্টটিও (উদাহরণস্বরূপ আপনি ২ য় পক্ষের কাছ থেকে কিছু বৈচিত্র্য প্রত্যাশা করেছেন) তবে @ ক্লিয়ারক্লাউড 8 হিসাবে প্রস্তাবিত লোড্যাশটি পরিষ্কার, সহজ এবং মার্জিত সমাধানের মতো বলে মনে হচ্ছে।
আমি তবে তাদের আকারের কারণে লোডাশের মতো লাইব্রেরিগুলিতে সতর্ক হওয়ার পরামর্শ দেব। পরিবর্তে না
import _ from 'lodash'
...
_.isString(myVar)
যা পুরো বিশাল লোডাশ অবজেক্টটি নিয়ে আসে, আমি এর মতো কিছু প্রস্তাব দেব:
import { isString as _isString } from 'lodash'
...
_isString(myVar)
এবং সাধারণ বান্ডিলিংয়ের সাথে আপনার ভাল হওয়া উচিত (আমি এখানে ক্লায়েন্ট কোড উল্লেখ করি)।
আপনি যদি নোড.জেএস পরিবেশে কাজ করেন, আপনি কেবল বিল্ট-ইন ফাংশনটি ইউস-এ স্ট্রিং ব্যবহার করতে পারেন।
const util = require('util');
if (util.isString(myVar)) {}
সম্পাদনা: @ জেহির উল্লেখ অনুসারে, এটি v4 সাল থেকে অবহেলিত।
typeof value === 'string'
পরিবর্তে ব্যবহার করুন" বলে say
x = new String('x'); x.isString(x);
ফেরৎ মিথ্যা । নেই util.types.isStringObject()
কিন্তু যে আয় জন্য মিথ্যা x = 'x'
টাইপ স্ট্রিং। দুটি ইউটিলিটি ফাংশন যা একেবারে কোনও ইউটিলিটি সরবরাহ করে না ...
নিম্নলিখিত পদ্ধতিটি পরীক্ষা করবে যে কোনও ভেরিয়েবল একটি স্ট্রিং কিনা ( ভেরিয়েবলগুলি বিদ্যমান নেই )।
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
আমি এটিও দেখতে পেয়েছি যে এটি খুব ভাল কাজ করে, এবং এটি অন্যান্য উদাহরণগুলির তুলনায় অনেক কম।
if (myVar === myVar + '') {
//its string
} else {
//its something else
}
খালি উদ্ধৃতিতে একত্রিত করে এটি মানটিকে স্ট্রিংয়ে রূপান্তর করে। যদি myVar
ইতিমধ্যে একটি স্ট্রিং হয় তবে if স্টেটমেন্টটি সফল।
typeof
।
typeof
কিন্তু এখনও তার চেয়ে বেশ খানিকটা দ্রুত toString
। যে কোনও উপায়ে, আমি অনুমান করি যে কেবল জোর করে দেওয়ার জন্য সিনট্যাক্সটি আমার পছন্দ হয়েছে।
var s = new String('abc'); > s === s + '' > false
new String
এক ধরণের তৈরি করে এমন কাশ দিয়ে কাজ করে না object
। w3schools.com/js/tryit.asp?filename=tryjs_string_object2
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))
false
।
আমি এই সহজ কৌশল জন্য টাইপ-যাচাই করুন দরকারী এটি স্ট্রিং -
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
সর্বদা স্ট্রিংয়ের জিনিসগুলির জন্য ফিরে আসে
function isClass(x,re){return ({}).toString.call(x).search(re)>0;};
isClass("hello",/String/)
বা isClass(3,/Number/)
বাisClass(null,/Null/)
একটি সহজ সমাধান হবে:
var x = "hello"
if(x === x.toString()){
// it's a string
}else{
// it isn't
}
toString()
কার্যকারিতা থাকে
.toString
কোনও মান অন্ধভাবে কল করতে পারবেন না ; এক্স পরীক্ষা করা বাতিল বা
toString()
পদ্ধতিটি ওভাররাইড হতে পারে এবং একটি ব্যতিক্রম (কিছু নির্দিষ্ট প্রয়োগের কারণে) ফেলে দিতে পারে এবং আপনার চেকটি নিশ্চিতভাবে কাজ করবে না। মূল ধারণাটি হ'ল এমন পদ্ধতিগুলি কল করা উচিত নয় যা আপনি যা পেতে চান তার সাথে সম্পর্কিত নয়। এমনকি আমি toString
পদ্ধতির সাথে সম্পর্কিত অপ্রয়োজনীয় ওভারহেড সম্পর্কেও বলছি না । Downvoting।
একজন টাইপেকিকার সহায়ক:
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
)
আমি এখানে একটি বাকী অংশে অন্য একটি রুট যাচ্ছি যা ভেরিয়েবলটি নির্দিষ্ট, বা কোনও নির্দিষ্ট সংখ্যার ধরণের সদস্য কিনা তা জানার চেষ্টা করে।
জেএস হাঁসচাঁপায় নির্মিত; যদি কিছু স্ট্রিংয়ের মতো ঝাঁকুনি দেয় তবে আমরা স্ট্রিংয়ের মতো ব্যবহার করতে পারি এবং তা করা উচিত।
কি 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});
আউটপুট:
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"
@ ডিআরএক্স এর উত্তরে কেবল প্রসারিত করতে , আমি এটি করব:
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
।
এটি আমার পক্ষে যথেষ্ট ভাল।
সতর্কতা: এটি একটি নিখুঁত সমাধান নয়। আমার পোস্টের নীচে দেখুন।
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
যে কোনও কিছুর ধরণ নির্ধারণ করতে আপনি এই ফাংশনটি ব্যবহার করতে পারেন:
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
আমি নিশ্চিত নই যে আপনি যদি বোঝেন যে এটি কোনও ধরণের string
বিষয়বস্তু নির্বিশেষে টাইপ কিনা, বা এর সামগ্রীগুলি কোনও সংখ্যা বা স্ট্রিং কিনা তা নির্বিশেষে।
সুতরাং এর ধরণটি যদি স্ট্রিং হয় তবে তা ইতিমধ্যে উত্তর দেওয়া হয়েছে।
তবে এর স্ট্রিং বা একটি সংখ্যা যদি এর বিষয়বস্তুর উপর ভিত্তি করে জানতে, আমি এটি ব্যবহার করব:
function isNumber(item) {
return (parseInt(item) + '') === item;
}
এবং কিছু উদাহরণের জন্য:
isNumber(123); //true
isNumber('123'); //true
isNumber('123a');//false
isNumber(''); //false
/^\d+$/.test('123')
সম্ভাব্য পার্সিং সম্পর্কিত জটিলতার জটিলতা এড়াতে আমি সম্ভবত এটি করেছি )