在浏览v8代码树下的
为什么这些标识符不会产生语法错误?包括math.js,string.js和其他所有js文件? :wq
src
目录时,我看到了一些js文件,提供了一些基本的JS对象,如Math、Array等。在浏览这些文件时,我看到它们的名字中包含了百分号(%),例如%Foo
。起初我天真地认为这是JS标识符中允许的其他字符,但当我在shell中尝试时,它告诉我违反了语法规则。但如果这是语法错误,为什么d8还能工作呢?以下是实际源代码的示例:
src/apinatives.js第44到47行,在github/v8/v8上使用git clone获得。
function Instantiate(data, name) {
if (!%IsTemplate(data)) return data;
var tag = %GetTemplateField(data, kApiTagOffset);
switch (tag) {
源代码位于 src/apinatives.js 的第 41 至 43 行,可从 github/v8/v8 进行克隆
function SetConstructor() {
if (%_IsConstructCall()) {
%SetInitialize(this);
为什么这些标识符不会产生语法错误?包括math.js,string.js和其他所有js文件? :wq
%
是模数运算符; 这是在测试某些东西,但我不确定是什么。 - David Thomas!%IsTemplate(data)
? - user1621465IsTemplate(data)
返回的内容。 - David Thomas!%2
应该是有效的,但是在控制台中尝试时,会产生语法错误。 - user1621465