ऐसा करने के लिए कम से कम 5 तरीके हैं:
यदि आप केवल पूर्णांकों में बदलना चाहते हैं, तो एक और तेज़ (और छोटा) तरीका डबल-बिटवाइज़ है (अर्थात दो टिल्ड वर्णों का उपयोग करके):
जैसे
~~x;
संदर्भ: http://james.padolsey.com/cool-stuff/double-bitwise-not/
5 सामान्य तरीके जो मैं अब तक एक स्ट्रिंग को एक संख्या में बदलने के लिए जानता हूं, सभी में उनके अंतर हैं (अधिक बिटवाइज़ ऑपरेटर हैं जो काम करते हैं, लेकिन वे सभी समान परिणाम देते हैं ~~)। यह JSField डिबग कंसोल में आपके द्वारा अपेक्षित विभिन्न परिणामों को दर्शाता है: http://jsfiddle.net/TrueBlueAussie/j7x0q0e3/22/
var values = ["123",
undefined,
"not a number",
"123.45",
"1234 error",
"2147483648",
"4999999999"
];
for (var i = 0; i < values.length; i++){
var x = values[i];
console.log(x);
console.log(" Number(x) = " + Number(x));
console.log(" parseInt(x, 10) = " + parseInt(x, 10));
console.log(" parseFloat(x) = " + parseFloat(x));
console.log(" +x = " + +x);
console.log(" ~~x = " + ~~x);
}
डिबग कंसोल:
123
Number(x) = 123
parseInt(x, 10) = 123
parseFloat(x) = 123
+x = 123
~~x = 123
undefined
Number(x) = NaN
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = NaN
~~x = 0
null
Number(x) = 0
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = 0
~~x = 0
"not a number"
Number(x) = NaN
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = NaN
~~x = 0
123.45
Number(x) = 123.45
parseInt(x, 10) = 123
parseFloat(x) = 123.45
+x = 123.45
~~x = 123
1234 error
Number(x) = NaN
parseInt(x, 10) = 1234
parseFloat(x) = 1234
+x = NaN
~~x = 0
2147483648
Number(x) = 2147483648
parseInt(x, 10) = 2147483648
parseFloat(x) = 2147483648
+x = 2147483648
~~x = -2147483648
4999999999
Number(x) = 4999999999
parseInt(x, 10) = 4999999999
parseFloat(x) = 4999999999
+x = 4999999999
~~x = 705032703
~~x"अधिक" मामलों, जहां दूसरों को अक्सर में परिणाम में एक संख्या में संस्करण परिणाम undefinedहै, लेकिन यह अमान्य इनपुट के लिए विफल रहता है (उदाहरण के लिए यह वापस आ जाएगी 0अगर स्ट्रिंग गैर संख्या वर्ण हैं के बाद एक वैध संख्या)।
बाढ़
कृपया ध्यान दें: पूर्णांक अतिप्रवाह और / या बिट ट्रंकेशन के साथ हो सकता है ~~, लेकिन अन्य रूपांतरण नहीं। हालांकि इस तरह के बड़े मूल्यों में प्रवेश करना असामान्य है, आपको इसके बारे में पता होना चाहिए। उदाहरण को बहुत बड़े मूल्यों को शामिल करने के लिए अद्यतन किया गया।
कुछ पूर्ण परीक्षण यह दर्शाते हैं कि मानक parseIntऔर parseFloatफ़ंक्शंस वास्तव में सबसे तेज़ विकल्प हैं, संभवतः ब्राउज़रों द्वारा अत्यधिक अनुकूलित, लेकिन यह सब आपकी आवश्यकता पर निर्भर करता है क्योंकि सभी विकल्प पर्याप्त तेज़ हैं : http://jsperf.com/best-of-string-to -number-रूपांतरण / 37
यह सब इस बात पर निर्भर करता है कि कुछ टेस्टिंग parseInt / parseFloat के रूप में कितना धीमी गति से पूर्ण परीक्षण कॉन्फ़िगर किया गया है।
मेरा सिद्धांत है:
- झूठ
- डै्रन लाइनें
- आंकड़े
- JSPerf परिणाम :)