2012-06-26 21 views
7

Birçok kodda %'u gördüm. Bana amacını veya ne yaptığını açıklayabilir misin?JavaScript'te yüzde (%) nedir?

Not: % Google aramalarından yoksayılmıştır, bu yüzden Google'da bulamadım.

Düzenleme: Ben matematikte 13 % 10 = 3 işlenenini biliyorum, ancak gördüğüm return %foo gibidir.

+0

Eh, 'yüzde işareti javascript' için arama yapmayı deneyebilirsiniz. Bu, bir modül operatörünün olduğunu bilmenizi sağlayacaktır. – bezmax

+1

'% foo'yu döndürüyor mu? Daha eksiksiz bir örneğiniz var mı? Bunun ne olabileceğini anlamıyorum. –

+0

@dystroy http://stackoverflow.com/a/7299040/1365010 Örnek – user1365010

cevap

9

yorumlarınızla sağlanan bağlantıyı dayanarak, % karakter JavaScript kaynağını ayrıştırılırken çalıştırılacaktır C++ çalışma zamanı için bir yöntem göstermek üzere V8 JavaScript engine kaynak kodunun bazı kullanılacak gibi görünüyor. Örneğin

, string.js satır:

çözümleyici karşılaştığı
return %StringBuilderConcat(parts, len + 1, ""); 

, StringBuilderConcat yöntem çalıştırılacaktır. runtime.h'daki V8 JavaScript dosyalarında kullanılabilen çalışma zamanı yöntemlerinin bir listesini bulabilirsiniz (not, C++ ile hiçbir deneyimim yok, bu yüzden bu, string.js numaralı başvuruda belirtilen StringBuilderConcat yöntemiyle hiçbir ilgisi olmadığını biliyorum, ancak Ben) aynı şeyi düşünüyorum:

zaten belirtildiği üzere
#define RUNTIME_FUNCTION_LIST_ALWAYS_1(F) \ 
    /* Property access */ \ 
    F(GetProperty, 2, 1) \ 
    F(KeyedGetProperty, 2, 1) \ 
    /* ... */ 
    F(StringBuilderConcat, 3, 1) \ 
    /* ... */ 

, return %foo JavaScript SyntaxError atardı.

+0

Küçük düzeltmeler: ayrıştırıcı gerçekten herhangi bir kodun kendisini _execute_ yapmaz (argüman bir değişken değilse, ayrıştırma hatasına neden olan% IS_VAR' hariç). Ayrıştırıcı sadece CallRuntime AST düğümünü oluşturur (https://github.com/v8/v8/blob/master/src/parser.cc#L4720-4763). Derleyici (ler) daha sonra ilgili çalışma zamanı işlevine çağrı gönderir (https://github.com/v8/v8/blob/master/src/ia32/full-codegen-ia32.cc#L3797-3834) veya satır içi Bu inline edilebilir (örnek '% _IsSmi': https://github.com/v8/v8/blob/master/src/ia32/full-codegen-ia32.cc#L2518-2536). –