আমি এই ছোট্ট ফাংশনটি পছন্দ করি, যা ইতিবাচক এবং নেতিবাচক উভয় পূর্ণসংখ্যার জন্যই সত্য ফিরে আসবে:
function isInt(val) {
return ["string","number"].indexOf(typeof(val)) > -1 && val !== '' && !isNaN(val+".0");
}
এটি কাজ করে কারণ 1 বা "1" "1.0" হয়ে যায়, যা isNaN () মিথ্যা ফিরিয়ে দেয় (যার পরে আমরা প্রত্যাখ্যান করি এবং ফিরে আসি), তবে 1.0 বা "1.0" "1.0.0" হয়ে যায়, "স্ট্রিং" "স্ট্রিং" হয়ে যায়। 0 ", যার মধ্যে কোনওটিই সংখ্যা নয়, সুতরাং isNaN () মিথ্যা ফেরত দেয় (এবং, আবার উপেক্ষিত হয়)।
আপনি যদি কেবল ইতিবাচক পূর্ণসংখ্যার চান তবে এই বৈকল্পিকটি রয়েছে:
function isPositiveInt(val) {
return ["string","number"].indexOf(typeof(val)) > -1 && val !== '' && !isNaN("0"+val);
}
বা, নেতিবাচক পূর্ণসংখ্যার জন্য:
function isNegativeInt(val) {
return `["string","number"].indexOf(typeof(val)) > -1` && val !== '' && isNaN("0"+val);
}
isPositiveInt () পরীক্ষিত হওয়ার মানটির আগে সংক্ষিপ্ত সংখ্যাযুক্ত স্ট্রিংটি সরিয়ে নিয়ে কাজ করে। উদাহরণস্বরূপ, isPositiveInt (1) এর ফলাফল "01" এর মূল্যায়ন isNaN (), যা মিথ্যা মূল্যায়ন করে। এদিকে, isososantInt (-1) এর ফলাফল "0-1" মূল্যায়ন করে isNaN (), যা সত্যের মূল্যায়ন করে। আমরা রিটার্ন মানকে অবহেলা করি এবং এটি আমাদের যা চায় তা দেয় gives isNegativeInt () একইভাবে কাজ করে, তবে isNaN () এর রিটার্ন মান অবহেলা না করে।
সম্পাদনা:
আমার আসল বাস্তবায়ন অ্যারে এবং খালি স্ট্রিংয়ের ক্ষেত্রেও সত্য ফিরে আসবে। এই প্রয়োগের যে ত্রুটি নেই। যদি ভাল স্ট্রিং বা সংখ্যা না হয় বা এটি যদি খালি স্ট্রিং হয়, তবে তা দ্রুত ফিরিয়ে নেওয়ার সুবিধাও রয়েছে। প্রথম দুটি ধারাটি প্রতিস্থাপন করে আপনি এটিকে আরও সংশোধন করতে পারেন
typeof(val) != "number"
আপনি যদি কেবল আক্ষরিক সংখ্যার সাথে মিল রাখতে চান (এবং স্ট্রিং নয়)
সম্পাদনা:
আমি এখনও মন্তব্য পোস্ট করতে পারি না, তাই আমি আমার উত্তরে এটি যুক্ত করছি। @ আসোক পোস্ট করা বেঞ্চমার্কটি খুব তথ্যপূর্ণ; তবে দ্রুততম ফাংশন প্রয়োজনীয়তার সাথে খাপ খায় না, কারণ এটি ভাসমান, অ্যারে, বুলিয়ান এবং খালি স্ট্রিংয়ের জন্যও সত্য দেয়।
আমি তালিকায় আমার উত্তর যুক্ত করে প্রতিটি ফাংশনটি পরীক্ষা করার জন্য নিম্নলিখিত টেস্ট স্যুটটি তৈরি করেছি (ফাংশন 8, যা স্ট্রিংগুলিকে পার্স করে এবং 9 নং ফাংশন দেয় না):
funcs = [
function(n) {
return n % 1 == 0;
},
function(n) {
return typeof n === 'number' && n % 1 == 0;
},
function(n) {
return typeof n === 'number' && parseFloat(n) == parseInt(n, 10) && !isNaN(n);
},
function(n) {
return n.toString().indexOf('.') === -1;
},
function(n) {
return n === +n && n === (n|0);
},
function(n) {
return parseInt(n) === n;
},
function(n) {
return /^-?[0-9]+$/.test(n.toString());
},
function(n) {
if ((undefined === n) || (null === n)) {
return false;
}
if (typeof n == 'number') {
return true;
}
return !isNaN(n - 0);
},
function(n) {
return ["string","number"].indexOf(typeof(n)) > -1 && n !== '' && !isNaN(n+".0");
}
];
vals = [
[1,true],
[-1,true],
[1.1,false],
[-1.1,false],
[[],false],
[{},false],
[true,false],
[false,false],
[null,false],
["",false],
["a",false],
["1",null],
["-1",null],
["1.1",null],
["-1.1",null]
];
for (var i in funcs) {
var pass = true;
console.log("Testing function "+i);
for (var ii in vals) {
var n = vals[ii][0];
var ns;
if (n === null) {
ns = n+"";
} else {
switch (typeof(n)) {
case "string":
ns = "'" + n + "'";
break;
case "object":
ns = Object.prototype.toString.call(n);
break;
default:
ns = n;
}
ns = "("+typeof(n)+") "+ns;
}
var x = vals[ii][1];
var xs;
if (x === null) {
xs = "(ANY)";
} else {
switch (typeof(x)) {
case "string":
xs = "'" + n + "'";
break;
case "object":
xs = Object.prototype.toString.call(x);
break;
default:
xs = x;
}
xs = "("+typeof(x)+") "+xs;
}
var rms;
try {
var r = funcs[i](n);
var rs;
if (r === null) {
rs = r+"";
} else {
switch (typeof(r)) {
case "string":
rs = "'" + r + "'";
break;
case "object":
rs = Object.prototype.toString.call(r);
break;
default:
rs = r;
}
rs = "("+typeof(r)+") "+rs;
}
var m;
var ms;
if (x === null) {
m = true;
ms = "N/A";
} else if (typeof(x) == 'object') {
m = (xs === rs);
ms = m;
} else {
m = (x === r);
ms = m;
}
if (!m) {
pass = false;
}
rms = "Result: "+rs+", Match: "+ms;
} catch (e) {
rms = "Test skipped; function threw exception!"
}
console.log(" Value: "+ns+", Expect: "+xs+", "+rms);
}
console.log(pass ? "PASS!" : "FAIL!");
}
আমি তালিকায় যোগ করা # 8 ফাংশন সহ বেঞ্চমার্কটিও পুনরায় পুনরায় পেশ করি। আমি ফলাফলটি পোস্ট করব না, কারণ তারা কিছুটা বিব্রতকর (যেমন ফাংশনটি দ্রুত নয়) ...
(সংক্ষিপ্ত - আমি সফল পরীক্ষাগুলি সরিয়েছি, যেহেতু আউটপুটটি বেশ দীর্ঘ) ফলাফলগুলি নিম্নরূপ:
Testing function 0
Value: (object) [object Array], Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) true, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) false, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: null, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) '', Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) '1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
FAIL!
Testing function 1
Value: (string) '1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!
Testing function 2
Value: (string) '1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!
Testing function 3
Value: (object) true, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (object) false, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) [object Array], Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) [object Object], Expect: (boolean) false, Result: (boolean) true, Match: false
Value: null, Expect: (boolean) false, Test skipped; function threw exception!
Value: (string) '', Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) 'a', Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) '1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
FAIL!
Testing function 4
Value: (string) '1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!
Testing function 5
Value: (string) '1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!
Testing function 6
Value: null, Expect: (boolean) false, Test skipped; function threw exception!
Value: (string) '1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!
Testing function 7
Value: (number) 1.1, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (number) -1.1, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (object) true, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) [object Array], Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) [object Object], Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) '', Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) '1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) true, Match: N/A
FAIL!
Testing function 8
Value: (string) '1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!
Testing function 9
Value: (string) '1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!
আমি ব্যর্থতা ফেলে রেখেছি যাতে আপনি প্রতিটি ফাংশনটি কোথায় ব্যর্থ হচ্ছে তা দেখতে পাবেন এবং (স্ট্রিং) '#' পরীক্ষাগুলি যাতে আপনি দেখতে পারেন যে প্রতিটি ফাংশন স্ট্রিংগুলিতে কীভাবে পূর্ণসংখ্যা এবং ভাসমান মানকে পরিচালনা করে, যেমন কেউ এগুলি সংখ্যার হিসাবে পার্স করতে চান এবং কিছু নাও হতে পারে.
পরীক্ষিত 10 টি ফাংশনগুলির মধ্যে, আসলে ওপি'র প্রয়োজনীয়তাগুলি মাপসই [1,3,5,6,8,9]
<nit-pick>
জাভাস্ক্রিপ্টের পৃথক পূর্ণসংখ্যার এবং ভাসমান সংখ্যাসূচক ধরণের নেই। জাভাস্ক্রিপ্টের প্রতিটি সংখ্যা মাত্র একটিNumber
।</nit-pick>