Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在标识符中使用%符号_Javascript_Syntax_V8_Identifier - Fatal编程技术网

Javascript 如何在标识符中使用%符号

Javascript 如何在标识符中使用%符号,javascript,syntax,v8,identifier,Javascript,Syntax,V8,Identifier,浏览树,在src目录下,有一些js文件,提供了一些基本的js对象,如数学、数组等。浏览这些文件时,我看到标识符的名称中包含百分号(%),即%Foo。我起初天真地认为它是JS标识符中允许的其他字符,但当我在shell中尝试它时,它对我大喊大叫,说我违反了语法规则。但如果这是一个语法错误,那么d8是如何工作的呢?以下是来自实际源代码的示例: src/apinantives.js第44到47行,git克隆自github/v8/v8 src/apinantives.js第41到43行,git克隆自git

浏览树,在
src
目录下,有一些js文件,提供了一些基本的js对象,如数学、数组等。浏览这些文件时,我看到标识符的名称中包含百分号(%),即
%Foo
。我起初天真地认为它是JS标识符中允许的其他字符,但当我在shell中尝试它时,它对我大喊大叫,说我违反了语法规则。但如果这是一个语法错误,那么d8是如何工作的呢?以下是来自实际源代码的示例:

src/apinantives.js第44到47行,git克隆自github/v8/v8

src/apinantives.js第41到43行,git克隆自github/v8/v8


为什么这个标识符不会产生语法错误。所有js文件,包括math.js和string.js以及所有其他文件?:wq

它在技术上不是有效的JavaScript。这些是对V8的调用。从该页:

大部分JavaScript库都是用JavaScript代码实现的 本身,使用一个最小的C++运行时函数集,可以调用 JavaScript。其中一些使用以%开头的名称进行调用, 并使用“允许本地人语法”标志。其他的只由 代码生成器生成的代码,即使在JS中也不可见 使用%语法

如果查看,可以看到一些与
allow_natives\u syntax
相关的代码,这些代码确定解析器是否接受V8用于与其运行时交互的JavaScript语言的此扩展。必须在启用该选项的情况下解析这些文件


我推测,V8默认情况下不允许您进行这些调用,因为它会与JavaScript标准相矛盾,并且可能会允许您在运行时执行您不能执行的操作。

%
;这是在测试一些东西,尽管我不确定是什么。@DavidThomas为什么
!%IsTemplate(数据)
它所做的完全取决于从
IsTemplate(数据)
返回的内容。它要求模为一元运算符,因此
!%2
应该是有效的,在控制台中尝试时会产生语法错误。我相信该文件在编译之前是由宏或其他东西预处理的。
function Instantiate(data, name) {
  if (!%IsTemplate(data)) return data;
      var tag = %GetTemplateField(data, kApiTagOffset);
      switch (tag) {
function SetConstructor() {
  if (%_IsConstructCall()) {
    %SetInitialize(this);