कोड गोल्फ के खेल में स्ट्रिंग बहुवचन अनुकूलित करने का प्रयास करते समय मैं इस quirk में आया था। मैं विचार बहुवचन के रूप में तार बारे में और उसके बाद substr
का उपयोग अंतिम वर्ण काट था, सशर्त:String.prototype.slice() में, .slice (0, -0) और .slice (0, + 0) एक ही परिणाम आउटपुट चाहिए?
var counter = 1;
var myText = counter + " units".substr(0, 6-(counter===1));
यह ठीक है - यह है कि मैं क्या चाहता था। लेकिन MDN docs for String.prototype.slice() को देखते हुए, मैंने सोचा कि मैं यह भी कम, कार्य करने के लिए दूसरा तर्क के रूप में नकारात्मक शून्य गुजर का उपयोग करके बनाने के लिए एक रास्ता मिल गया था। डॉक्स से:
endSlice
वैकल्पिक। शून्य-आधारित इंडेक्स जिस पर निष्कर्षण समाप्त होता है। यदि स्ट्रिंग के अंत तक छोड़ा जाता है, टुकड़ा() निष्कर्ष निकाला जाता है। नकारात्मक है, तो वह sourceLength + endSlice जहां sourceLength स्ट्रिंग की लंबाई है व्यवहार किया जाता है (उदाहरण के लिए, अगर endSlice -3 है यह sourceLength के रूप में व्यवहार किया जाता है - 3)।
var myText = counter + " units".slice(0,-(counter===1));
यह .slice(0,-1)
का मूल्यांकन जब counter
1 के बराबर है, जो स्ट्रिंग से अंतिम अक्षर काटना होगा, या यह अन्यथा .slice(0,-0)
, जो डॉक्स के अनुसार मतलब यह होना चाहिए 0 वर्ण से घटाया गया करने के लिए मूल्यांकन करेगा स्ट्रिंग की लंबाई पर संचालित किया जा रहा है।
ऐसा होता है, -0 String.prototype.slice
द्वारा +0 के रूप में ही किया जाता है। मैं अगर यह एक सम्मेलन था, इलाज के लिए -0 (मुझे मालूम है, उदाहरण के लिए, -0 === +0
true
का मूल्यांकन) +0 रूप में एक ही होने के रूप में सोचा। मैंने String.prototype.substr
को देखा, लेकिन उस समारोह में +0 और -0 को उसी तरह संभाला जाना चाहिए।
किसी को भी इस में किसी भी समय आप अधिक जानकारी है? क्या भाषा डिजाइन में कुछ बुनियादी सम्मेलन है जो बताता है कि, शून्य पर हस्ताक्षर किए जाने पर एक भाषा सुविधा है, इसे कुछ परिदृश्यों (जैसे 1/-0
) को छोड़कर अनदेखा किया जाना चाहिए?
tl; डॉ मैं नमकीन है कि मैं टुकड़ा करने की क्रिया द्वारा कोड गोल्फ जीतने बारे में मजाक नहीं कर सकता हूँ।
[मानक] (http://www.ecma-international.org/ecma-262/6.0/#sec-string.prototype.slice) भी कहते हैं, "अगर अंत नकारात्मक है, यह sourceLength + अंत जहां माना जाता है स्रोत लम्बाई स्ट्रिंग की लंबाई है। " मुझे लगता है कि वे यहां "नकारात्मक" शब्द के बारे में पर्याप्त सावधान नहीं थे। – user2357112
आप "नकारात्मक अगर" कैसे कार्यान्वित करेंगे? मेरी कोड में मैं परीक्षण है कि कह 'अगर (वैल <0)', और यह देखते हुए कि '-0 <0' रिटर्न' FALSE' ... यह के रूप में करना चाहिए द्वारा: कल्पना अगर हम के बीच अंतर करना हमारे कोड के सभी लिखना पड़ा '-0' और' + 0' ... – nnnnnn
दूसरा पैरामीटर शून्य के खिलाफ तुलना किए जाने से पहले एक पूर्णांक (ToLimit द्वारा) करने के लिए मजबूर कर रहा है। इंटीग्रर्स का ऋणात्मक शून्य नहीं है। यह ईसीएमए स्पेक में दर्दनाक विस्तार में समझाया गया है (जो सज़ा के लिए केवल वास्तविक गलटन पढ़ेगा)। एमडीएन एक सरलीकृत विवरण है। –