JavaScript中的百分比(%)是多少?

use*_*010 8 javascript syntax v8

%在许多代码中看到过.你能解释一下它的目的或它的作用吗?

PS:%谷歌的搜索被忽略了,所以我在Google上找不到它.

编辑:我知道数学中的操作数,13 % 10 = 3但我看到的是return %foo.

Jam*_*ice 9

根据您在注释中提供的链接,该%字符似乎在某些V8 JavaScript引擎源代码中使用,以指示将在解析JavaScript源时执行的C++运行时的方法.

例如,string.js中的行:

return %StringBuilderConcat(parts, len + 1, "");
Run Code Online (Sandbox Code Playgroud)

当解析器遇到该StringBuilderConcat方法时,将执行该方法.您可以在runtime.h中找到V8 JavaScript文件可用的运行时方法列表(注意,我没有使用C++的经验,所以我知道这与string.js中StringBuilderConcat引用的方法无关,但是我认为这是一回事):

#define RUNTIME_FUNCTION_LIST_ALWAYS_1(F) \
  /* Property access */ \
  F(GetProperty, 2, 1) \
  F(KeyedGetProperty, 2, 1) \
  /* ... */
  F(StringBuilderConcat, 3, 1) \
  /* ... */
Run Code Online (Sandbox Code Playgroud)

正如已经说过的那样,return %foo会在JavaScript中抛出一个SyntaxError.

  • 小修正:解析器本身并不真正_执行_任何代码(“%IS_VAR”除外,如果参数不是变量,它会导致解析错误)。解析器仅创建 CallRuntime AST 节点 (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)。 (2认同)