修改原语的方法的完整清单是什么?

时间:2018-10-27 09:23:53

标签: javascript

我正在写一些语法分析器,不允许更改原语。

所以我知道人们可以通过以下方式修改原语:

     <?xml version="1.0" encoding="UTF-8"?>

<response errorcode="0" errormessage="">
    <categories>
                <category>
            <id>33</id>
            <title><![CDATA[Audio HIFI]]></title>
        </category>
                <category>
            <id>34</id>
            <title><![CDATA[Audio HI End]]></title>
        </category>
                <category>
            <id>35</id>
            <title><![CDATA[Receivers]]></title>
        </category>
</categories>

这真的是完整,详尽的方法清单吗?还是我忘记了什么...

P.S。该分析仪用于我特有的库。不允许将传递的参数更改为返回测试闭包的对象常量的函数,即每个闭包都不得更改其公共原语。

1 个答案:

答案 0 :(得分:1)

您在这里:

 // assignment operators
 p = 1; 
 p += 1;
 p -= 1;
 p *= 1;
 p /= 1;
 p %= 1;
 p <<= 1;
 p >>= 1;
 p >>>= 1;
 p &= 1; 
 p ^= 1;
 p |= 1;
 p **= 1;
 // decrement / increment operators
 p++;
 ++p;
 p--;
 --p;
// destructuring
({ p } = { p: 1 });
({ a: p } = { a: 1 });
([p] = [1]);

请注意,以上所有内容也可能出现在解析的字符串中:

 (new Function("p = 1"))();
 eval("p = 1");
  

分析器用于我特有的库。不允许更改传递的参数。

那我想最简单的方法就是解析:

 function toTest(p) { /* body */ }

对此并执行:

 const p = 1;
 try {
   eval(/* body */);
} catch(e) {
  //...
}

如果发生错误,则有人试图对const进行变异。