2012-06-26 15 views
7

मैंने कई कोडों में % देखा। क्या आप मुझे इसका उद्देश्य बता सकते हैं या यह क्या करता है?जावास्क्रिप्ट में प्रतिशत (%) क्या है?

पीएस: % को Google खोजों से अनदेखा किया गया है, इसलिए मुझे Google पर यह नहीं मिला।

संपादित करें: मैं गणित 13 % 10 = 3 में ऑपरेंड को जानता हूं लेकिन मैंने जो देखा वह return %foo जैसा है।

+0

ठीक है, आप 'प्रतिशत साइन जावास्क्रिप्ट 'की खोज करने का प्रयास कर सकते हैं। इससे आपको यह पता चल जाएगा कि यह एक मॉड्यूलस ऑपरेटर है। – bezmax

+1

'वापसी% foo'? क्या आपके पास एक और पूरा उदाहरण है? मैं नहीं देखता कि यह क्या हो सकता है। उदाहरण के लिए –

+0

@dystroy http://stackoverflow.com/a/7299040/1365010 उदाहरण – user1365010

उत्तर

9

टिप्पणियों में दिए गए लिंक के आधार पर, वर्ण V8 JavaScript engine स्रोत कोड में से कुछ में उपयोग किया जाता है ताकि सी ++ रनटाइम की विधि इंगित की जा सके जो जावास्क्रिप्ट स्रोत को पार्स करते समय निष्पादित किया जाएगा।

उदाहरण के लिए, string.js में लाइन:

return %StringBuilderConcat(parts, len + 1, ""); 

जब पार्सर द्वारा सामना करना पड़ा, StringBuilderConcat विधि निष्पादित किया जाएगा। आप runtime.h में वी 8 जावास्क्रिप्ट फ़ाइलों के लिए उपलब्ध रनटाइम विधियों की एक सूची पा सकते हैं (ध्यान दें, मुझे सी ++ के साथ कोई अनुभव नहीं है, इसलिए मुझे पता है कि string.js में संदर्भित विधि के साथ इसका कोई लेना-देना नहीं है, लेकिन मुझे लगता है कि यह एक ही बात) है:

#define RUNTIME_FUNCTION_LIST_ALWAYS_1(F) \ 
    /* Property access */ \ 
    F(GetProperty, 2, 1) \ 
    F(KeyedGetProperty, 2, 1) \ 
    /* ... */ 
    F(StringBuilderConcat, 3, 1) \ 
    /* ... */ 

जैसा कि पहले ही कहा गया है, return %foo जावास्क्रिप्ट में एक सिंटैक्स त्रुटि फेंक होगा।

+0

मामूली सुधार: पार्सर वास्तव में किसी भी कोड को _execute_ नहीं करता है ('% IS_VAR' के अपवाद के साथ जो तर्क को एक चर नहीं है तो पार्सिंग त्रुटि का कारण बनता है)। पार्सर सिर्फ कॉलरंटिम एएसटी नोड (https://github.com/v8/v8/blob/master/src/parser.cc#L4720-4763) बनाता है। कंपाइलर या तो संबंधित रनटाइम फ़ंक्शन (https://github.com/v8/v8/blob/master/src/ia32/full-codegen-ia32.cc#L3797-3834) पर कॉल को छोड़ दें या इसे इनलाइन करें यह अटूट है (उदाहरण '% _IsSmi': https://github.com/v8/v8/blob/master/src/ia32/full-codegen-ia32.cc#L2518-2536)। –

संबंधित मुद्दे