के लिए ब्राउज़र विशिष्ट या अंतर्निहित है, मैंने जेएस में थोड़ा range
फ़ंक्शन जोड़ा है। मैंने क्रोम 1 9, एफएफ, और आईई (7-9) में इसका परीक्षण किया है और यह अच्छी तरह से काम कर रहा है। मुझे प्रश्न while
कथन के साथ करना है।जावास्क्रिप्ट का नियंत्रण प्रवाह संरचना: जेएस
function range(from,to,step)
{
'use strict';
var sCode,eCode,result;
result = [];
step = (!step || isNaN(step) || step === 0 ? 1 : step);
sCode = (''+from).charCodeAt(0);
eCode = (''+to).charCodeAt(0);
step *= (sCode > eCode && step > 0 ? -1 : 1);
do
{
if (String.fromCharCode(sCode))
{
result.push(String.fromCharCode(sCode));
}
}while((step > 0 && eCode >= (sCode+=step)) || (step < 0 && eCode <= (sCode+=step)));
return result;
}
मुझे कुछ समय पहले एक प्रश्न पढ़ना याद है कि जेएस नियंत्रण प्रवाह संरचनाओं और तार्किक ऑपरेटरों को कैसे नियंत्रित करता है। मुझे लगता है कि यह जांचने के साथ कुछ करना था कि किसी ऑब्जेक्ट की एक निश्चित विधि थी, और यदि ऐसा है, तो इसका रिटर्न वैल्यू (if (event.returnValue && e.returnValue === true)
सामान) का उपयोग करना।
मुझे लगता है कि सवाल किसी भी अधिक जानकारी प्राप्त नहीं कर पा रहे हैं, यहाँ है कि मैं क्या जानना चाहता था है:
while((step > 0 && eCode >= (sCode+=step)) || (step < 0 && eCode <= (sCode+=step)));
समारोह बर्ताव करता है के बाद से के रूप में मैं यह करना चाहता हूँ, मुझे लगता है कि मैं कर रहा हूँ सही कह रही है कि, step < 0
है अगर में झूठी, && eCode >= (sCode+=step)
को अनदेखा किया जाएगा, sCode
के मूल्य को अपरिवर्तित छोड़ दिया जाएगा।
जब step
चेक सत्य है, sCode
इन/कमी होगी। मैंने इस असाइनमेंट को ब्रैकेट में रखा है, यह सुनिश्चित करने के लिए कि sCode
का नया असाइन किया गया मान eCode
से तुलना की जाएगी। दोबारा, मुझे लगता है कि ब्रैकेट लॉजिकल ऑपरेटर पर असाइनमेंट को प्राथमिकता देंगे।
यह सभी ब्राउज़र के लिए यह सच है, या यह ब्राउज़र कुछ हद तक विशिष्ट है? क्या कोई मौका है कि यह फ़ंक्शन कुछ ब्राउज़र में sCode
के मूल्य में वृद्धि (या कमी) करेगा?
इस मामले में, यह महत्वपूर्ण नहीं है (किसी भी मुद्दे को रोकने के लिए यह एक आसान फिक्स है)। लेकिन मैं जानना चाहता हूं कि यह व्यवहार जावास्क्रिप्ट के लिए या ब्राउज़र कार्यान्वयन के लिए निहित है या नहीं।
इसे दूर पढ़ने के लिए धन्यवाद। आप
अन्य चीजों के एक जोड़े को कोई आपत्ति नहीं है (महत्वपूर्ण नहीं है, लेकिन बस सोच):
- जावास्क्रिप्ट में अधिकतम charCode क्या है? Google पर एक त्वरित रूप ने मुझे नहीं बताया, और जेएस कंसोल में परीक्षण करने के लिए मुझे विश्वास है कि यह
5999999999989759
था जो लगभग अविश्वसनीय लगता है, लेकिन फिर मुझे अपने चीनी पर ब्रश करने की आवश्यकता हो सकती है। - जब
from
अपरिभाषित है, (jslint अनुमोदित) दृष्टिकोणfrom.toString().charCodeAt(0);
विफल रहता है, जाहिर है,undefined
कोईtoString
विधि, क्यों करता है,(''+from).charCodeAt(0);
वापसीU
सभी एक ही था, क्योंकि? मैंने सोचा कि इसे पूरी तरह सेtoString
विधि कहा जाता है?
"कह रही है कि, अगर' चरण <0' गलत है में ... "मुझे लगता है कि आप का मतलब' चरण <0' संपादन मेरी टिप्पणी: शानदार सवाल। मैं इसके साथ मुद्दों/परेशानियों में भाग गया (शायद मैंने आपके द्वारा वर्णित मूल प्रश्न पोस्ट किया है)। मुझे परीक्षण का _lot_ करना याद है। मैं यह देखने जा रहा हूं कि क्या मैं जेएस स्पेक में यह जानकारी पा सकता हूं। – taz
@taz, नहीं ... मैं माफी चाहता हूँ, लेकिन मैं एक कठिन समय शुक्रवार पर ध्यान केंद्रित किया है: मैं का मतलब है कि, जब तार्किक जांच के पहले भाग (किया जा रहा है 'चरण <0') false_ को _evaluates, दूसरे भाग 'eCode> = ... 'को अनदेखा कर दिया जाएगा। मानों के साथ उदाहरण '((-1> 0 && 3> = (15 + = - 1)) || ...' भाग '&& 3> = (15 + = - 1)' को अनदेखा कर दिया जाएगा, क्योंकि ' -1> 0' किसी भी तरह झूठा है –
मुझे वास्तव में शॉर्ट सर्किट मूल्यांकन के लिए कोई चश्मा नहीं दिखता है (http://ecma-international.org/ecma-262/5.1/#sec-11 देखें) मुझे कुछ साल पहले याद आया एक स्थिति है जिसमें इस व्यवहार ब्राउज़रों में अनुरूप नहीं था सोच मैंने पाया लेकिन मुझे याद नहीं है का परिणाम क्या रहा – taz