কেউ কি জানেন যে আমি কীভাবে জাভাস্ক্রিপ্টের একটি ভেরিয়েবলের সংখ্যা বা স্ট্রিং কিনা তা পরীক্ষা করে দেখতে পারি?
কেউ কি জানেন যে আমি কীভাবে জাভাস্ক্রিপ্টের একটি ভেরিয়েবলের সংখ্যা বা স্ট্রিং কিনা তা পরীক্ষা করে দেখতে পারি?
উত্তর:
আপনি যদি আক্ষরিক স্বরলিপি ব্যবহার করছেন এবং নির্মাণকারীদের সাথে নয়, আপনি টাইপফ ব্যবহার করতে পারেন :
typeof "Hello World"; // string
typeof 123; // number
যদি আপনি কোনও কনস্ট্রাক্টরের মাধ্যমে সংখ্যা এবং স্ট্রিং তৈরি করে থাকেন তবে আপনার মনে var foo = new String("foo")রাখা উচিত যে typeofএটির objectজন্য ফিরে আসতে পারে foo।
আন্ডারস্কোর.জেজে পাওয়া পদ্ধতিটি (এন্ডোটেটেড উত্সটি এখানে পাওয়া যেতে পারে ) ব্যবহার করার জন্য সম্ভবত এই ধরণের পরীক্ষার আরও বোকা পদ্ধতি হ'ল ,
var toString = Object.prototype.toString;
_.isString = function (obj) {
return toString.call(obj) == '[object String]';
}
এটি trueনিম্নলিখিতগুলির জন্য একটি বুলিয়ান প্রদান করে:
_.isString("Jonathan"); // true
_.isString(new String("Jonathan")); // true
var myString = new String("stuff I like"); isString(myString)এই প্রত্যাবর্তনটি মিথ্যা। এছাড়াও, আমি ঠিক নিশ্চিত নই যে ব্যাকগ্রাইন্ড রূপান্তরটি কত দিন স্থায়ী হয়, আমি জানি যখন আমি "হাই" বলি তখন দৈর্ঘ্য, "হাই" কোনও বস্তুতে রূপান্তরিত হয়, কতক্ষণ তা আবার ফিরে আসবে বা কখনই আবদ্ধ থাকে তা নিশ্চিত নই পরিবর্তনশীল।
এটি করার সর্বোত্তম উপায় হ'ল isNaN+ টাইপ কাস্টিং ব্যবহার করা :
সর্বশেষে পদ্ধতিটি আপডেট করা হয়েছে:
function isNumber(n) { return !isNaN(parseFloat(n)) && !isNaN(n - 0) }
রেজেক্স ব্যবহার করে একই:
function isNumber(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); }
------------------------
isNumber('123'); // true
isNumber('123abc'); // false
isNumber(5); // true
isNumber('q345'); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(false); // false
isNumber(' '); // false
null0 করতে বাধ্য এবং জন্য ফেরৎ সত্য হয়isNumber(null);
function is_number(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n);}
আমি সবচেয়ে ভাল উপায়টি খুঁজে পেয়েছি হয় হয় স্ট্রিংয়ের কোনও পদ্ধতি পরীক্ষা করা, অর্থাত:
if (x.substring) {
// do string thing
} else{
// do other thing
}
অথবা আপনি যদি কোনও সংখ্যার সম্পত্তির জন্য নম্বরটি পরীক্ষা করে কিছু করতে চান,
if (x.toFixed) {
// do number thing
} else {
// do other thing
}
এটি "হাঁসের টাইপিং" এর মতো, এটি কোন উপায়টি সবচেয়ে বেশি বোঝায় তা আপনার উপর নির্ভর করে। আমার মন্তব্য করার মতো যথেষ্ট কর্ম নেই, তবে টাইপফ বাক্সযুক্ত স্ট্রিং এবং সংখ্যাগুলির জন্য ব্যর্থ হয়, যেমন:
alert(typeof new String('Hello World'));
alert(typeof new Number(5));
"অবজেক্ট" সতর্ক করবে।
typeofএটিকে আরও ভাল বলে মনে করি কারণ এটি সর্বদা স্ট্রিংয়ের জন্য পরীক্ষা করতে পারে, আদিম বা স্ট্রিং অবজেক্ট whether আপনাকে কেবল এমন কোনও পদ্ধতির জন্য পরীক্ষা করতে হবে যা আপনি চান সেই ধরণের অনন্য।
{substring:"hello"}। আমি জানি আমার উদ্দেশ্যগুলির জন্য আমি যা পরীক্ষা করেছিলাম তার জন্য প্রয়োজনীয় (বিশেষত অপারেশন) (মডুলাস) করার জন্য আমার প্রয়োজনীয় ধরণের অপারেশনটি কীভাবে করা হয়েছে (স্ট্রিংগুলিতে মডুলাস অনির্ধারিতভাবে রিটার্ন দেয়) তারপরে এটির পরিবর্তে তার জন্য পরীক্ষা করে নেওয়া হয়েছিল।
আপনি খুঁজছেন isNaN():
console.log(!isNaN(123));
console.log(!isNaN(-1.23));
console.log(!isNaN(5-2));
console.log(!isNaN(0));
console.log(!isNaN("0"));
console.log(!isNaN("2"));
console.log(!isNaN("Hello"));
console.log(!isNaN("2005/12/12"));
এমডিএন তে জাভাস্ক্রিপ্ট isNaN () ফাংশন দেখুন ।
isNaNআয় falseজন্য null(কিন্তু trueজন্য undefined)।
মানটি একটি স্ট্রিং আক্ষরিক বা স্ট্রিং অবজেক্ট কিনা তা পরীক্ষা করুন:
function isString(o) {
return typeof o == "string" || (typeof o == "object" && o.constructor === String);
}
ইউনিট পরীক্ষা:
function assertTrue(value, message) {
if (!value) {
alert("Assertion error: " + message);
}
}
function assertFalse(value, message)
{
assertTrue(!value, message);
}
assertTrue(isString("string literal"), "number literal");
assertTrue(isString(new String("String object")), "String object");
assertFalse(isString(1), "number literal");
assertFalse(isString(true), "boolean literal");
assertFalse(isString({}), "object");
সংখ্যার জন্য পরীক্ষা করা একই রকম:
function isNumber(o) {
return typeof o == "number" || (typeof o == "object" && o.constructor === Number);
}
function is (type, value) { return value["constructor"] === type; }?
ES2015 যেহেতু কোনও ভেরিয়েবলের একটি বৈধ সংখ্যা রয়েছে কিনা তা পরীক্ষা করার সঠিক উপায় Number.isFinite(value)
উদাহরণ:
Number.isFinite(Infinity) // false
Number.isFinite(NaN) // false
Number.isFinite(-Infinity) // false
Number.isFinite(0) // true
Number.isFinite(2e64) // true
Number.isFinite('0') // false
Number.isFinite(null) // false
এটা চেষ্টা কর,
<script>
var regInteger = /^-?\d+$/;
function isInteger( str ) {
return regInteger.test( str );
}
if(isInteger("1a11")) {
console.log( 'Integer' );
} else {
console.log( 'Non Integer' );
}
</script>
এটি করার সর্বোত্তম উপায়:
function isNumber(num) {
return (typeof num == 'string' || typeof num == 'number') && !isNaN(num - 0) && num !== '';
};
এটি নিম্নলিখিত পরীক্ষার কেস সন্তুষ্ট করে:
assertEquals("ISNUMBER-True: 0", true, isNumber(0));
assertEquals("ISNUMBER-True: 1", true, isNumber(-1));
assertEquals("ISNUMBER-True: 2", true, isNumber(-500));
assertEquals("ISNUMBER-True: 3", true, isNumber(15000));
assertEquals("ISNUMBER-True: 4", true, isNumber(0.35));
assertEquals("ISNUMBER-True: 5", true, isNumber(-10.35));
assertEquals("ISNUMBER-True: 6", true, isNumber(2.534e25));
assertEquals("ISNUMBER-True: 7", true, isNumber('2.534e25'));
assertEquals("ISNUMBER-True: 8", true, isNumber('52334'));
assertEquals("ISNUMBER-True: 9", true, isNumber('-234'));
assertEquals("ISNUMBER-False: 0", false, isNumber(NaN));
assertEquals("ISNUMBER-False: 1", false, isNumber({}));
assertEquals("ISNUMBER-False: 2", false, isNumber([]));
assertEquals("ISNUMBER-False: 3", false, isNumber(''));
assertEquals("ISNUMBER-False: 4", false, isNumber('one'));
assertEquals("ISNUMBER-False: 5", false, isNumber(true));
assertEquals("ISNUMBER-False: 6", false, isNumber(false));
assertEquals("ISNUMBER-False: 7", false, isNumber());
assertEquals("ISNUMBER-False: 8", false, isNumber(undefined));
assertEquals("ISNUMBER-False: 9", false, isNumber(null));
//testing data types accurately in JavaScript (opposed to "typeof")
//from http://bonsaiden.github.com/JavaScript-Garden/
function is(type, obj) {
var clas = Object.prototype.toString.call(obj).slice(8, -1);
return obj !== undefined && obj !== null && clas === type;
}
//basic usage
is('String', 'test'); // true
is('Array', true); // false
বা কোনও অজানা প্রকারটি ফিরিয়ে আনতে এটি খাপ খাই:
function realTypeOf(obj) {
return Object.prototype.toString.call(obj).slice(8, -1);
}
//usage
realTypeOf(999); // 'Number'
12 ই মে, 2012 আপডেট: জাভাস্ক্রিপ্টে সম্পূর্ণ উদাহরণ : একটি আরও ভাল টাইপ ।
realTypeOf: realTypeOf(NaN) -> "Number"যা typeofসম্মত হিসাবে একই আচরণ তবে আদর্শ থেকে এখনও দূরে।
এখানে শূন্য বা নাল স্ট্রিং যোগ করে কোনও সংখ্যা বা স্ট্রিংয়ে ইনপুটকে জোর দেওয়া, এবং তারপরে টাইপ করা সমতার তুলনা করার ধারণার উপর ভিত্তি করে এখানে একটি পদ্ধতি রয়েছে।
function is_number(x) { return x === x+0; }
function is_string(x) { return x === x+""; }
কিছু অকাট্য কারণে, এর x===x+0চেয়ে ভাল পারফরম্যান্স বলে মনে হচ্ছে x===+x।
এই ব্যর্থতা আছে এমন কোনও মামলা আছে?
একই শিরা মধ্যে:
function is_boolean(x) { return x === !!x; }
এই আস্তে যতো তাড়াতাড়ি উপস্থিত হতে পারে পারেন x===true || x===falseবা typeof x==="boolean"(এবং অনেক দ্রুত তুলনায় x===Boolean(x))।
তারপরেও আছে
function is_regexp(x) { return x === RegExp(x); }
এগুলি প্রতিটি "টাইপ" সম্পর্কিত একটি "পরিচয়" ক্রিয়াকলাপের অস্তিত্বের উপর নির্ভর করে যা কোনও মানকে প্রয়োগ করা যেতে পারে এবং নির্ভরযোগ্যভাবে প্রশ্নে টাইপের একটি মান উত্পাদন করতে পারে। আমি তারিখের জন্য এই জাতীয় অপারেশন সম্পর্কে ভাবতে পারি না।
NaN এর জন্য রয়েছে
function is_nan(x) { return x !== x;}
এটি মূলত আন্ডারস্কোরের সংস্করণ, এবং এটি দাঁড়িয়ে থেকে প্রায় চারগুণ দ্রুত isNaN(), তবে আন্ডারস্কোর উত্সের মন্তব্যগুলিতে উল্লেখ করা হয়েছে যে "NaN হল একমাত্র সংখ্যা যা নিজের সমান হয় না" এবং _.আইস নাম্বারের জন্য একটি পরীক্ষা যোগ করে। কেন? অন্য কোন বস্তু তাদের সমান হবে না? এছাড়াও, আন্ডারস্কোর ব্যবহারx !== +x তবে +এখানে কী পার্থক্য করতে পারে?
তারপরে বিড়ম্বনার জন্য:
function is_undefined(x) { return x===[][0]; }
অথবা এটা
function is_undefined(x) { return x===void(0); }
আপনি কি এটি 1 দিয়ে ভাগ করতে পারেন?
আমি ধরে নিই যে সমস্যাটি একটি স্ট্রিং ইনপুট যেমন হবে: "123ABG"
var Check = "123ABG"
if(Check == Check / 1)
{
alert("This IS a number \n")
}
else
{
alert("This is NOT a number \n")
}
সম্প্রতি একটি উপায় আমি এটি করেছি।
আহ, কেমন আছে:
function IsString(obj) {
return obj !== undefined && obj != null && obj.toLowerCase !== undefined;
}
অনেক মাস পরে আরও পর্যালোচনা করার পরে, এটি কেবল গ্যারান্টি দেয় objএমন একটি জিনিস যা পদ্ধতি বা সম্পত্তির নাম toLowerCaseসংজ্ঞায়িত করা আছে। আমি আমার উত্তর লজ্জা। শীর্ষে ভোট দেওয়া typeofএকটি দেখুন।
বা কেবল এর বিপরীতটি ব্যবহার করুন isNaN():
if(!isNaN(data))
do something with the number
else
it is a string
এবং হ্যাঁ, jQuery এর ব্যবহার বাক্সের $.isNumeric()জন্য আরও মজাদার।
isNaN('123')মিথ্যা দেয়, যদিও যুক্তি একটি
আমি মনে করি ভেরিকে স্ট্রিংয়ে রূপান্তর করা কর্মক্ষমতা হ্রাস করে, সর্বশেষতম ব্রাউজারগুলিতে সঞ্চালিত এই পরীক্ষাটি তাই দেখায়।
সুতরাং আপনি যদি পারফরম্যান্স সম্পর্কে চিন্তা করেন তবে আমি এটি ব্যবহার করতাম:
typeof str === "string" || str instanceof String
ভেরিয়েবলটি একটি স্ট্রিং কিনা তা যাচাইয়ের জন্য (আপনি ব্যবহার করলেও var str = new String("foo"), str instanceof Stringসত্য ফিরে আসবে)।
পরীক্ষণ যদি এটি একটি সংখ্যা আমি নেটিভ জন্য যেতে হবে এর জন্য: isNaN; ফাংশন।
jQuery এটি ব্যবহার করে:
function isNumber(obj) {
return !isNaN( parseFloat( obj ) ) && isFinite( obj );
}
এই সমাধানটি এখানে উত্থাপিত অনেকগুলি সমস্যার সমাধান করে!
এটি এখন পর্যন্ত আমি সবচেয়ে নির্ভরযোগ্য পদ্ধতিটি ব্যবহার করেছি। আমি এটি আবিষ্কার করি নি, এবং আমি এটি কোথায় পেয়েছিলাম তা স্মরণ করতে পারি না। অন্যান্য কৌশল যেখানে ব্যর্থ হয় সেখানে এটি কাজ করে:
// Begin public utility /getVarType/
// Returns 'Function', 'Object', 'Array',
// 'String', 'Number', 'Boolean', or 'Undefined'
getVarType = function ( data ){
if (undefined === data ){ return 'Undefined'; }
if (data === null ){ return 'Null'; }
return {}.toString.call(data).slice(8, -1);
};
// End public utility /getVarType/
সঠিকতার উদাহরণ
var str = new String();
console.warn( getVarType(str) ); // Reports "String"
console.warn( typeof str ); // Reports "object"
var num = new Number();
console.warn( getVarType(num) ); // Reports "Number"
console.warn( typeof num ); // Reports "object"
var list = [];
console.warn( getVarType( list ) ); // Reports "Array"
console.warn( typeof list ); // Reports "object"
typeofChrome এর নেটিভ পদ্ধতির (0.788s বনাম 1.481s) অর্ধেক গতির চেয়ে খারাপ বলে মনে করি না । উন্নত ফলাফল বিবেচনা করে এটি অবশ্যই গ্রহণযোগ্য কর্মক্ষমতা। আপনি কেন এটি "সত্যই ধীর" বলে মনে করেন? সম্ভবত এটি - আই 6/7/8 এ? তবে এই ব্রাউজারগুলিতে সবকিছু "সত্যই ধীর"।
typeof100x দ্রুত, আমি কী অনুপস্থিত?
আপনি যদি আপনার কাছে থাকা jQuery ব্যবহার করেন তবে একটি এফওয়াইআইকে জাসুত করুন
$.isNumeric()
এটি পরিচালনা করতে। Http://api.jquery.com/jQuery.isNumeric/ এ আরও বিশদ
typof বেশিরভাগ ক্ষেত্রে আমার জন্য খুব ভাল কাজ করে। আপনি যদি একটি বিবৃতি ব্যবহার করার চেষ্টা করতে পারেন
if(typeof x === 'string' || typeof x === 'number') {
console.log("Your statement");
}
যেখানে এক্স আপনার পছন্দের কোনও পরিবর্তনশীল নাম
ইতিবাচক এবং নেতিবাচক সংখ্যাগুলি সম্পর্কে যা ভাবা যায় সেগুলির সেরা উপায়টি হ'ল: ওরিলি জাভাস্ক্রিপ্ট এবং ডিএইচটিএমএল কুকবুক :
function isNumber(elem) {
var str = elem.value;
var oneDecimal = false;
var oneChar = 0;
// make sure value hasn't cast to a number data type
str = str.toString( );
for (var i = 0; i < str.length; i++) {
oneChar = str.charAt(i).charCodeAt(0);
// OK for minus sign as first character
if (oneChar = = 45) {
if (i = = 0) {
continue;
} else {
alert("Only the first character may be a minus sign.");
return false;
}
}
// OK for one decimal point
if (oneChar = = 46) {
if (!oneDecimal) {
oneDecimal = true;
continue;
} else {
alert("Only one decimal is allowed in a number.");
return false;
}
}
// characters outside of 0 through 9 not OK
if (oneChar < 48 || oneChar > 57) {
alert("Enter only numbers into the field.");
return false;
}
}
return true;
}
Errr? শুধু নিয়মিত এক্সপ্রেশন ব্যবহার করুন! :)
function isInteger(val) {
return val.match(/^[0-9]$/)
}
function isFloat(val) {
return val.match(/^[0-9]*/\.[0-9]+$/)
}
যেহেতু টাইপফের সাথে '1234' হিসাবে একটি স্ট্রিং 'স্ট্রিং' দেখায়, এবং বিপরীতটি কখনই ঘটতে পারে না (টাইপফ 123 সর্বদা সংখ্যায় থাকবে) তাই সাধারণ রেজেক্স ব্যবহার করা সবচেয়ে ভাল /^\-?\d+$/.test(var)। অথবা ফ্লোটস, পূর্ণসংখ্যার এবং নেতিবাচক সংখ্যার সাথে মেলে আরও বেশি অগ্রসর, /^[\-\+]?[\d]+\.?(\d+)?$/
এর গুরুত্বপূর্ণ দিকটি .testহ'ল এটি যদি কোনও স্ট্রিং না হয় তবে মানটি কিছু হতে পারে an
var val, regex = /^[\-\+]?[\d]+\.?(\d+)?$/;
regex.test(val) // false
val = '1234';
regex.test(val) // true
val = '-213';
regex.test(val) // true
val = '-213.2312';
regex.test(val) // true
val = '+213.2312';
regex.test(val) // true
val = 123;
regex.test(val) // true
val = new Number(123);
regex.test(val) // true
val = new String('123');
regex.test(val) // true
val = '1234e';
regex.test(val) // false
val = {};
regex.test(val) // false
val = false;
regex.test(val) // false
regex.test(undefined) // false
regex.test(null) // false
regex.test(window) // false
regex.test(document) // false
আপনি যদি প্রকৃত প্রকারের সন্ধান করে থাকেন তবে টাইপফুল একাই করবেন।
typeofঅপারেটরটি ব্যবহার করে আপনি ভেরিয়েবলের ধরণটি পরীক্ষা করতে পারেন :
typeof variable
নীচের কোডটি সংখ্যার জন্য সত্য এবং অন্য কোনও কিছুর জন্য মিথ্যা দেয়:
!isNaN(+variable);
typeofঅপারেটর ব্যবহার করতে পারেন ! @ জাস্টমার্টিন
numberতবে আমি যদি '123' বা 'এবিসি' বা অন্য কোনও উদ্ধৃত আক্ষরিক পাস করি তবে এটি একটি স্ট্রিং, এবং এটি কোনও সংখ্যায় পার্স করা যায় কি না তা বিবেচ্য নয়।
সংখ্যা বা স্ট্রিং সনাক্ত করতে এক্সওআর অপারেশন ব্যবহার করা যেতে পারে। সংখ্যা ^ 0 সর্বদা আউটপুট হিসাবে নম্বর দেবে এবং স্ট্রিং ^ 0 আউটপুট হিসাবে 0 দেবে।
Example:
1) 2 ^ 0 = 2
2) '2' ^ 0 = 2
3) 'Str' ^ 0 = 0
সহজ এবং পুঙ্খানুপুঙ্খ:
function isNumber(x) {
return parseFloat(x) == x
};
পরীক্ষার কেস:
console.log('***TRUE CASES***');
console.log(isNumber(0));
console.log(isNumber(-1));
console.log(isNumber(-500));
console.log(isNumber(15000));
console.log(isNumber(0.35));
console.log(isNumber(-10.35));
console.log(isNumber(2.534e25));
console.log(isNumber('2.534e25'));
console.log(isNumber('52334'));
console.log(isNumber('-234'));
console.log(isNumber(Infinity));
console.log(isNumber(-Infinity));
console.log(isNumber('Infinity'));
console.log(isNumber('-Infinity'));
console.log('***FALSE CASES***');
console.log(isNumber(NaN));
console.log(isNumber({}));
console.log(isNumber([]));
console.log(isNumber(''));
console.log(isNumber('one'));
console.log(isNumber(true));
console.log(isNumber(false));
console.log(isNumber());
console.log(isNumber(undefined));
console.log(isNumber(null));
console.log(isNumber('-234aa'));
পার্টিতে খুব দেরী; যাইহোক, নীচেরগুলি সর্বদা আমার জন্য ভাল কাজ করেছে যখন আমি কিছু ইনপুট হয় স্ট্রিং বা একটি শটে একটি সংখ্যা কিনা তা পরীক্ষা করতে চাই।
return !!Object.prototype.toString.call(input).match(/\[object (String|Number)\]/);
একটি ভেরিয়েবল একটি সংখ্যা কিনা তা যাচাই করার জন্য একটি জেএসপিআফ তৈরি করেছে। বেশ আকর্ষণীয়! টাইপফের আসলে পারফরম্যান্স ব্যবহার রয়েছে। typeofসংখ্যা ছাড়া অন্য যে কোনও কিছুর জন্য ব্যবহার করা সাধারণত একটি হিসাবে 1 / তৃতীয় গতিতে যায়variable.constructor কারণ জাভাস্ক্রিপ্টে বেশিরভাগ ডেটা ধরণের অবজেক্ট হয়; সংখ্যা নেই!
http://jsperf.com/jemiloii-fastest-method-to-check-if-type-is-a-number
typeof variable === 'number'| দ্রুততম | আপনি যদি 5, এবং 5 এর মতো একটি সংখ্যা চান না
typeof parseFloat(variable) === 'number' | দ্রুততম | আপনি যদি 5 এবং '5' এর মতো একটি সংখ্যা চান
isNaN()ধীর, তবে খুব ধীর নয়। আমার খুব বেশি আশা ছিল parseIntএবং parseFloatসেগুলি ভয়াবহভাবে ধীর ছিল।
নম্বরগুলি সনাক্ত করার জন্য, জাভাস্ক্রিপ্ট থেকে নিম্নলিখিত প্যাসেজ: ডগলাস ক্রকফোর্ডের গুড পার্টস প্রাসঙ্গিক:
মানটি একটি সংখ্যা হিসাবে ব্যবহৃত হতে পারে কিনা তা নির্ধারণের সেরা উপায় হলফিনিট ফাংশন কারণ এটি NaN এবং অনন্ততাকে প্রত্যাখ্যান করে। দুর্ভাগ্যক্রমে, আইসফিনিট তার অপারেন্ডকে একটি সংখ্যায় রূপান্তরিত করার চেষ্টা করবে, সুতরাং যদি মানটি কোনও সংখ্যায় না হয় তবে এটি ভাল পরীক্ষা নয়। আপনি নিজের আইস নাম্বার ফাংশনটি সংজ্ঞায়িত করতে চাইতে পারেন:
var isNumber = function isNumber(value) { return typeof value === 'number' &&
isFinite(value);
};