जवाबों:
इस तरह:
var foo = 45;
var bar = '' + foo;
वास्तव में, भले ही मैं आम तौर पर इसे सरल सुविधा के लिए करता हूं, 1,000 से अधिक पुनरावृत्तियों में यह कच्ची गति के लिए प्रकट होता है , इसके लिए एक फायदा है.toString()
यहां प्रदर्शन परीक्षण देखें (मेरे द्वारा नहीं, लेकिन जब मैं अपना लिखने के लिए गया तो पाया गया): http://jsben.ch/#/#QQR
ऊपर दिए गए JSPerf टेस्ट के आधार पर सबसे तेज़: str = num.toString();
यह ध्यान दिया जाना चाहिए कि गति में अंतर अत्यधिक महत्वपूर्ण नहीं है जब आप विचार करते हैं कि यह किसी भी तरह से 1 मिलियन बार 0.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()
कि ज्यादातर लोग ऐसी स्थिति में क्या चाहते हैं मैं दृढ़ता से असहमत हूं, हमें इसे सभी सवालों में काम करना चाहिए। यह संख्याओं को स्ट्रिंग्स, अच्छी वास्तुकला और अन्य प्रकार के रूपांतरणों में परिवर्तित करने के बारे में था, जहां अलग-अलग पाठों की आवश्यकता होती है।
स्पष्ट रूपांतरण किसी ऐसे व्यक्ति के लिए बहुत स्पष्ट हैं जो भाषा के लिए नया है। यदि किसी डेवलपर ने जोर-जबरदस्ती के नियमों के बारे में जानकारी नहीं दी है, तो टाइप कॉर्शन का उपयोग करना, जैसा कि दूसरों ने सुझाव दिया है, अस्पष्टता की ओर जाता है। अंततः डेवलपर समय सीपीयू समय की तुलना में अधिक महंगा है, इसलिए मैं बाद की कीमत पर पूर्व के लिए अनुकूलन करूंगा। यह कहा जा रहा है, इस मामले में अंतर नगण्य होने की संभावना है, लेकिन अगर मुझे यकीन नहीं है कि कुछ सभ्य जावास्क्रिप्ट कंप्रेशर्स हैं जो इस तरह की चीज का अनुकूलन करेंगे।
इसलिए, उपरोक्त कारणों से मैं साथ जाऊंगा: 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}`
लघु, रसीला, पहले से ही कई अन्य स्थानों में उपयोग किया जाता है (यदि आप एक आधुनिक ढांचे / ES संस्करण का उपयोग कर रहे हैं) तो यह एक सुरक्षित शर्त है जिसे कोई भी प्रोग्रामर समझ जाएगा।
ऐसा नहीं है कि यह (आमतौर पर) बहुत मायने रखता है, लेकिन यह अन्य तरीकों की तुलना में सबसे तेज भी है ।
n.toString()
, है ना?
n
है तो undefined
इसका उपयोग करके एक वाक्यविन्यास त्रुटि को फेंक दिया जाएगा.toString()
String(n)
सभी मामलों में वैसा ही परिणाम नहीं देता है ? अंतर केवल इतना है कि यह कम स्पष्ट है।
किसी भी वैरिएबल को स्ट्रिंग में बदलने का सबसे सरल तरीका उस वेरिएबल में एक खाली स्ट्रिंग जोड़ना है।
5.41 + '' // Result: the string '5.41'
Math.PI + '' // Result: the string '3.141592653589793'
(5.41 + '')
स्ट्रिंग के तरीकों .substring()
और अन्य का उपयोग करने के लिए
यदि आपको परिणाम को दशमलव स्थानों की एक विशिष्ट संख्या के लिए प्रारूपित करने की आवश्यकता है , उदाहरण के लिए मुद्रा का प्रतिनिधित्व करने के लिए, आपको toFixed()
विधि की तरह कुछ चाहिए ।
number.toFixed( [digits] )
digits
दशमलव स्थान के बाद प्रदर्शित करने के लिए अंकों की संख्या है।
मैंने निम्न मामलों के लिए एक टेस्ट केस बनाने के लिए https://jsperf.com का उपयोग किया :
number + ''
`${number}`
String(number)
number.toString()
https://jsperf.com/number-string-conversion-speed-comparison
24 जुलाई, 2018 तक, परिणाम कहते हैं कि number + ''
फ़ायरफ़ॉक्स में क्रोम में सबसे तेज़ है, जो टेम्पलेट स्ट्रिंग शाब्दिकों के साथ संबंध रखता है।
दोनों String(number)
, और number.toString()
सबसे तेज़ विकल्प की तुलना में लगभग 95% धीमी हैं।
लगभग सभी संभव मौजूदा और भविष्य के मामलों के लिए एकमात्र वैध समाधान (इनपुट संख्या, शून्य, अपरिभाषित, प्रतीक, कुछ और) है 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..toString()
123 .toString() // space before the dot 123.0.toString()
(123).toString()
नीचे JS में स्ट्रिंगर को Integer में बदलने के तरीके दिए गए हैं
तरीकों को प्रदर्शन के घटते क्रम में व्यवस्थित किया जाता है।
(प्रदर्शन परीक्षण के परिणाम उनके उत्तर में @DarckBlezzer द्वारा दिए गए हैं)
var संख्या = 1
विधि 1:
संख्या = `$ {संख्या}`
विधि 2:
संख्या = संख्या + ''
विधि 3:
संख्या = स्ट्रिंग (संख्या)
विधि 4:
num = num.toString ()
ध्यान दें : आप सीधे नंबर से tostring () कॉल नहीं कर सकते
जैसे: 2.toString () बिना सिलेक्ट किए सिंटेक्स को फेंक देगा : अमान्य या अप्रत्याशित टोकन
यदि आप इस बात से उत्सुक हैं कि सबसे अधिक प्रदर्शन करने वाला व्यक्ति यह जाँच करता है कि मैं सभी भिन्न संख्याओं की तुलना कहाँ करता हूँ -> स्ट्रिंग रूपांतरण।
लगता है 2+''
या 2+""
सबसे तेज हैं।
हम स्ट्रिंग कंस्ट्रक्टर का भी उपयोग कर सकते हैं । इस बेंचमार्क के अनुसार यह फ़ायरफ़ॉक्स 58 में नंबर को स्ट्रिंग में बदलने का सबसे तेज़ तरीका है, भले ही यह
" + num
लोकप्रिय ब्राउज़र Google क्रोम की तुलना में धीमा है ।
हाल ही में इस पर आएँ, विधि 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"
।