Przeglądając drzewo v8, pod katalogiem , niektóre pliki js tam były, dostarczając podstawowych obiektów JS takich jak Math, Array itd. Przeglądając te pliki, widziałem identyfikatory zawierające znak procentu (%) w ich nazwach, tj. %Foo
. Najpierw naiwnie pomyślałem, że to jakaś inna dozwolona postać w identyfikatorach JS, ale kiedy wypróbowałem ją w powłoce, krzyknęła na mnie, mówiąc, że łamie zasady składni. Ale jeśli jest to błąd składniowy, dlaczego działa d8? Oto przykład z rzeczywistego kodu źródłowego:W jaki sposób używać znaków% w identyfikatorach
linie src/apinatives.js 44 do 47, git clone z GitHub linii/V8/v8
function Instantiate(data, name) {
if (!%IsTemplate(data)) return data;
var tag = %GetTemplateField(data, kApiTagOffset);
switch (tag) {
src/apinatives.js 41 do 43 clone git z github/V8/v8
function SetConstructor() {
if (%_IsConstructCall()) {
%SetInitialize(this);
Jak to się stało identyfikatory nie dają błędy składniowe. Wszystkie pliki js, w tym math.js i string.js i wszystkie inne?: Wq
'%' jest [operator modulus] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Arithmetic_Operators); to * testowanie czegoś *, chociaż nie jestem pewien co. –
@DavidThomas Jak to się stało '!% IsTemplate (dane)' –
To, co robi, zależy od tego, co jest zwracane z 'IsTemplate (dane)'. –