উত্তর:
এটার মত:
var foo = 45;
var bar = '' + foo;
প্রকৃতপক্ষে, যদিও আমি সাধারণত এটি সাধারণ সুবিধার জন্য এটি করি, 1000 টিরও বেশি পুনরাবৃত্তি এটি কাঁচা গতির জন্য প্রদর্শিত হয় যার জন্য একটি সুবিধা রয়েছে.toString()
এখানে পারফরম্যান্স পরীক্ষা দেখুন (আমার দ্বারা নয়, তবে আমি নিজের লেখা লিখতে গিয়েছি): http://jsben.ch/#/ghQYR
উপরের জেএসপিআইপি পরীক্ষার উপর ভিত্তি করে দ্রুততম: str = num.toString();
এটি লক্ষ করা উচিত যে গতির পার্থক্য অত্যধিক তাত্পর্যপূর্ণ নয় যখন আপনি বিবেচনা করেন যে এটি 0.1 সেকেন্ডে 1 মিলিয়ন বার কোনও উপায়ে রূপান্তর করতে পারে ।
আপডেট: গতিটি ব্রাউজারের মাধ্যমে খুব বেশি আলাদা বলে মনে হচ্ছে। Chrome num + ''
এ এই পরীক্ষার উপর ভিত্তি করে ক্রোমটিকে দ্রুততম বলে মনে হচ্ছে http://jsben.ch/#/ghQYR
আপডেট 2: আবার আমার উপরের পরীক্ষার উপর ভিত্তি করে এটি লক্ষ্য করা উচিত যে ফায়ারফক্স 20.0.1 নমুনার .toString()
চেয়ে প্রায় 100 গুণ ধীর করে দেয় '' + num
।
null foo
ত্রুটি ফেলে না।
আমার মতে n.toString()
এটির স্পষ্টতার জন্য পুরষ্কারটি লাগে এবং আমার মনে হয় না এটি কোনও অতিরিক্ত ওভারহেড বহন করে।
null
, undefined
) এই উত্তরটির সাথে কঠোরভাবে কাজ করে না এটিকে "অনিরাপদ" করে তোলে।
null
বা undefined
এটি প্রয়োগের নির্দিষ্ট হিসাবে যেমনটি আমি কল্পনা করি তবে (n || defaultNumber).toString()
বেশিরভাগ লোকেরা এমন পরিস্থিতিতে কী চায় তা আমি দৃree়ভাবে অসম্মতি জানাই আমাদের এটি সমস্ত প্রশ্নের মধ্যে কাজ করা উচিত। এটি সংখ্যাকে স্ট্রিংয়ে রূপান্তর করা, ভাল আর্কিটেকচার এবং অন্যান্য ধরণের রূপান্তরগুলির যেখানে পৃথক পাঠ প্রয়োজন needed
স্পষ্ট রূপান্তরগুলি ভাষায় নতুন যে কারও কাছে খুব স্পষ্ট। অন্যদের পরামর্শ মতো ধরণের জবরদস্তি ব্যবহার করা যদি কোনও বিকাশকারীকে জবরদস্তির বিধি সম্পর্কে সচেতন না হয় তবে অস্পষ্টতার দিকে পরিচালিত করে। চূড়ান্তভাবে বিকাশকারী সময় সিপিইউ সময়ের চেয়ে বেশি ব্যয়বহুল, তাই আমি পূর্ববর্তীটির জন্য ব্যয়টি পূর্ববর্তী ব্যক্তির জন্য অনুকূল করব। বলা হচ্ছে, এই ক্ষেত্রে পার্থক্যটি সম্ভবত নগণ্য, তবে আমি নিশ্চিত না হলে এমন কিছু শালীন জাভাস্ক্রিপ্ট সংক্ষেপক রয়েছে যা এই ধরণের জিনিসটিকে অনুকূল করে তুলবে।
সুতরাং, উপরোক্ত কারণে আমি সাথে যাব: n.toString()
বা String(n)
। String(n)
সম্ভবত এটি একটি ভাল পছন্দ কারণ n
নাল বা অপরিজ্ঞাত থাকলে এটি ব্যর্থ হবে না ।
null
, বা undefined
। যদি n
হয় null
বা undefined
আমার প্রোগ্রামের কোনও বাগের কারণে হয়, তবে আমি আমার প্রোগ্রামটি এই অবস্থায় ব্যর্থ হওয়ার জন্য, আমাকে ত্রুটিটি সন্ধানের এবং ফিক্স করার আরও ভাল সুযোগ দেওয়ার জন্য পছন্দ করতাম। প্রোগ্রাম ক্র্যাশগুলি প্রোগ্রামারকে উপহার হিসাবে, বাগগুলি খুঁজে পেতে সহায়তা করে :-)। বিকল্পটি হ'ল এমন সফ্টওয়্যার সরবরাহ করা যা বাগের উপর দিয়ে সাবধানতার সাথে পর্যালোচনা করে ডিজাইন হিসাবে কাজ করে না। সুতরাং, আমি String(n)
কোনও ত্রুটিটি মাস্ক করার জন্য অনুরাগী নই ।
String(n)
একটি কার্যকরী শৈলীতে যেমন উদাহরণস্বরূপ আন্ডারস্কোর এর সমন্বয় সঙ্গে ব্যবহার করা ভাল _.compose(funcThatNeedsAStringParam, String)
।
... জাভাস্ক্রিপ্টের পার্সার একটি ভাসমান পয়েন্ট আক্ষরিক হিসাবে একটি সংখ্যায় বিন্দু চিহ্ন চিহ্নিত করার চেষ্টা করে।
2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first
জিহ্বা-ইন-গাল স্পষ্টত:
var harshNum = 108;
"".split.call(harshNum,"").join("");
অথবা ES6 এ আপনি কেবল টেম্পলেট স্ট্রিং ব্যবহার করতে পারেন :
var harshNum = 108;
`${harshNum}`;
'' + number
পদ্ধতির চেয়েও দ্রুত প্রমাণিত হয় । এটি বলেছে, এই মানদণ্ডগুলির ফলাফলগুলি একাধিকবার সম্পাদন করার সময় অনেকগুলি পরিবর্তিত হয় তাই এগুলি খুব গুরুতর নেওয়া উচিত কিনা তা নিশ্চিত নয়।
অন্যান্য উত্তরগুলি ইতিমধ্যে অন্যান্য বিকল্পগুলি কভার করেছে, তবে আমি এটিকে পছন্দ করি:
s = `${n}`
সংক্ষিপ্ত, সংক্ষিপ্ত, ইতিমধ্যে অন্যান্য অনেক জায়গায় ব্যবহার করা হয়েছে (যদি আপনি একটি আধুনিক কাঠামো / ইএস সংস্করণ ব্যবহার করে থাকেন) তবে এটি কোনও নিরাপদ বাজি যে কোনও প্রোগ্রামার এটি বুঝতে পারে।
এটি (সাধারণত) খুব বেশি গুরুত্ব দেয় না তবে এটি অন্যান্য পদ্ধতির তুলনায় দ্রুততম হিসাবেও মনে হয় ।
n.toString()
, তাই না?
n
হয় তবে undefined
এটি ব্যবহার করে একটি সিনট্যাক্স ত্রুটি ছুঁড়ে ফেলবে.toString()
String(n)
সব ক্ষেত্রে একই ফলাফল দেয় না ? পার্থক্যটি হ'ল এটি কম পরিষ্কার।
যে কোনও ভেরিয়েবলকে স্ট্রিনে রূপান্তর করার সহজ উপায় হ'ল সেই ভেরিয়েবলটিতে একটি খালি স্ট্রিং যুক্ত করা।
5.41 + '' // Result: the string '5.41'
Math.PI + '' // Result: the string '3.141592653589793'
(5.41 + '')
.substring()
আমি নিম্নলিখিত কেসগুলির জন্য একটি কেস কেস তৈরি করতে https://jsperf.com ব্যবহার করেছি :
number + ''
`${number}`
String(number)
number.toString()
https://jsperf.com/number-string-conversion-speed-comparison
২৪ শে জুলাই, 2018 পর্যন্ত ফলাফলগুলি বলেছে যে number + ''
ফায়ারফক্সে ক্রোমের মধ্যে সবচেয়ে দ্রুত যা টেম্পলেট স্ট্রিং লিটারেলের সাথে সম্পর্কযুক্ত।
উভয়ই String(number)
এবং number.toString()
দ্রুততম বিকল্পের চেয়ে প্রায় 95% ধীর।
আপনার যদি ফলাফলকে নির্দিষ্ট সংখ্যক দশমিক স্থানে ফর্ম্যাট করতে হয় , যেমন মুদ্রা উপস্থাপনের জন্য, আপনার toFixed()
পদ্ধতির মতো কিছু দরকার something
number.toFixed( [digits] )
digits
দশমিক স্থানের পরে প্রদর্শিত সংখ্যাগুলির সংখ্যা।
প্রায় সমস্ত সম্ভাব্য বিদ্যমান এবং ভবিষ্যতের ক্ষেত্রে একমাত্র বৈধ সমাধান (ইনপুটটি সংখ্যা, নাল, অপরিজ্ঞাত, প্রতীক, অন্য কিছু) String(x)
। "এখানে আমি স্পষ্টভাবে সংখ্যাকে স্ট্রিংয়ে রূপান্তর করি এবং এখানে অবশ্যই বুলিয়ানকে স্ট্রিংয়ে পরিণত করি" এর মতো সহজ অপারেশনের জন্য 3 টি উপায় ব্যবহার করবেন না।
ব্যাখ্যা:
String(x)
নালগুলি, অপরিজ্ঞাত, চিহ্নগুলি, [যেকোনো কিছু] পরিচালনা করে এবং .toString()
বস্তুর জন্য কল করে।
'' + x
.valueOf()
এক্স এ কল করুন (সংখ্যায় কাস্টিং), প্রতীকগুলিতে ছোঁড়া, বাস্তবায়ন নির্ভর ফলাফল সরবরাহ করতে পারে।
x.toString()
নাল এবং অপরিবর্তিত উপর নিক্ষেপ
দ্রষ্টব্য: String(x)
প্রোটোটাইপ-কম বস্তুর মতো এখনও ব্যর্থ হবে Object.create(null)
।
আপনি যদি 'হ্যালো, অপরিজ্ঞাতকৃত' মতো স্ট্রিং পছন্দ করেন না বা প্রোটোটাইপ-কম অবজেক্টগুলিকে সমর্থন করতে চান তবে নিম্নলিখিত ধরণের রূপান্তর ফাংশনটি ব্যবহার করুন:
/**
* Safely casts any value to string. Null and undefined are converted to ''.
* @param {*} value
* @return {string}
*/
function string (str) {
return value == null ? '' : (typeof value === 'object' && !value.toString ? '[object]' : String(value));
}
সংখ্যাটি আক্ষরিক সহ, কোনও সম্পত্তি অ্যাক্সেসের জন্য বিন্দুটি অবশ্যই দশমিক বিন্দুর চেয়ে আলাদা হওয়া উচিত। আপনি যদি আক্ষরিক 123 সংখ্যায় স্ট্রিং () তে প্রার্থনা করতে চান তবে এটি আপনাকে নিম্নলিখিত বিকল্পগুলির সাথে ছেড়ে দেয়:
123..toString()
123 .toString() // space before the dot 123.0.toString()
(123).toString()
নীচে জেএসে একটি পূর্ণসংখ্যাকে স্ট্রিংয়ে রূপান্তর করার পদ্ধতিগুলি রয়েছে
কর্মক্ষমতা হ্রাস ক্রমে পদ্ধতিগুলি সাজানো হয়।
(পারফরম্যান্স পরীক্ষার ফলাফলগুলি তার উত্তরে @ ডার্কব্লেজারের দেওয়া হয়েছে)
var num = 1
পদ্ধতি 1:
num = `$ {num}`
পদ্ধতি 2:
নাম = নাম + ''
পদ্ধতি 3:
সংখ্যা = স্ট্রিং (সংখ্যা)
পদ্ধতি 4:
সংখ্যা = num.to স্ট্রিং ()
দ্রষ্টব্য: আপনি সরাসরি একটি নম্বর থেকে টর্স্টিং () কল করতে পারবেন না
উদাহরণস্বরূপ: ২.to স্ট্রিং () আনচাক্ট সিনট্যাক্স এরর ফেলে দেবে : অবৈধ বা অপ্রত্যাশিত টোকেন
আপনি যদি কৌতূহল বোধ করেন তবে সর্বাধিক পারফরম্যান্ট কে এইটি পরীক্ষা করে দেখুন যেখানে আমি সমস্ত ভিন্ন সংখ্যা -> স্ট্রিং রূপান্তরগুলির তুলনা করি।
দেখে মনে হচ্ছে 2+''
বা 2+""
দ্রুততম।
আমরা স্ট্রিং কনস্ট্রাক্টরও ব্যবহার করতে পারি । এই বেঞ্চমার্ক অনুসারে
" + num
জনপ্রিয় ব্রাউজার গুগল ক্রোমের চেয়ে ধীর গতির হলেও এটি ফায়ারফক্স ৫৮ এ একটি নম্বরকে স্ট্রিংয়ে রূপান্তর করার দ্রুততম উপায় ।
পদ্ধতি toFixed()
এছাড়াও উদ্দেশ্যে solves হবে।
var n = 8.434332;
n.toFixed(2) // 8.43
সাম্প্রতিক এইটি জুড়ে আসুন, পদ্ধতি 3 এবং 4 যথাযথ নয় কারণ কীভাবে স্ট্রিংগুলি অনুলিপি করা হয় এবং তারপরে একসাথে রাখা হয়। একটি ছোট প্রোগ্রামের জন্য এই সমস্যাটি তুচ্ছ, তবে যে কোনও সত্যিকারের ওয়েব অ্যাপ্লিকেশনের জন্য এই ক্রিয়াটি যেখানে আমাদের ফ্রিকোয়েন্সি স্ট্রিং ম্যানিপুলেশনগুলির মোকাবেলা করতে হবে তা কার্য সম্পাদন এবং পাঠযোগ্যতাকে প্রভাবিত করতে পারে।
আমার যখন সময় হবে তখন আমি আরও তথ্য দিয়ে এটি পুনরায় সম্পাদনা করতে যাচ্ছি, এই মুহূর্তে এটি ঠিক আছে ...
নোডেজ v8.11.2: 2018/06/06 এ পরীক্ষা করুন
let i=0;
console.time("test1")
for(;i<10000000;i=i+1){
const string = "" + 1234;
}
console.timeEnd("test1")
i=0;
console.time("test1.1")
for(;i<10000000;i=i+1){
const string = '' + 1234;
}
console.timeEnd("test1.1")
i=0;
console.time("test1.2")
for(;i<10000000;i=i+1){
const string = `` + 1234;
}
console.timeEnd("test1.2")
i=0;
console.time("test1.3")
for(;i<10000000;i=i+1){
const string = 1234 + '';
}
console.timeEnd("test1.3")
i=0;
console.time("test2")
for(;i<10000000;i=i+1){
const string = (1234).toString();
}
console.timeEnd("test2")
i=0;
console.time("test3")
for(;i<10000000;i=i+1){
const string = String(1234);
}
console.timeEnd("test3")
i=0;
console.time("test4")
for(;i<10000000;i=i+1){
const string = `${1234}`;
}
console.timeEnd("test4")
i=0;
console.time("test5")
for(;i<10000000;i=i+1){
const string = 1234..toString();
}
console.timeEnd("test5")
i=0;
console.time("test6")
for(;i<10000000;i=i+1){
const string = 1234 .toString();
}
console.timeEnd("test6")
আউটপুট
test1: 72.268ms
test1.1: 61.086ms
test1.2: 66.854ms
test1.3: 63.698ms
test2: 207.912ms
test3: 81.987ms
test4: 59.752ms
test5: 213.136ms
test6: 204.869ms
নোড.জেএস ব্যবহার করার সময় এটি একই রকম ফলাফল বলে মনে হচ্ছে আমি এই স্ক্রিপ্টটি চালিয়েছি:
let bar;
let foo = ["45","foo"];
console.time('string concat testing');
for (let i = 0; i < 10000000; i++) {
bar = "" + foo;
}
console.timeEnd('string concat testing');
console.time("string obj testing");
for (let i = 0; i < 10000000; i++) {
bar = String(foo);
}
console.timeEnd("string obj testing");
console.time("string both");
for (let i = 0; i < 10000000; i++) {
bar = "" + foo + "";
}
console.timeEnd("string both");
এবং নিম্নলিখিত ফলাফল পেয়েছেন:
❯ node testing.js
string concat testing: 2802.542ms
string obj testing: 3374.530ms
string both: 2660.023ms
প্রতিবার একই সময় আমি এটি চালানো।
'' + 123e-50
রিটার্ন"1.23e-48"
।