繁体   English   中英

Node.js SyntaxError:无效或意外令牌(但很奇怪)

[英]Node.js SyntaxError: Invalid or unexpected token (but its weird)

我一生中从未见过这个错误

奇怪的错误 ?

我只是觉得它很奇怪......

我的代码如下所示:

const no = require('noparenth');

(在 index.js:1 处)

我这辈子从来没有见过这样的……


有问题的库是一个只允许您调用不带括号的 function 的库。 我这样做是为了让它更容易编码 + 让它更快。 代码如下所示:

Function.prototype.valueOf = function() {
    this.call(this);
    return 0; 
};

而已...

实际错误:

C:\Users\summit\testing\index.js:1
��c


SyntaxError: Invalid or unexpected token

获取该类型字符的一种可能方法是将文件另存为UTF-16 LE并像UTF-8一样加载它。
如果您使用 PowerShell,则很容易生成UTF-16 LE编码的文件,例如,如果您运行echo "" > index.js 如果您在 VSCode 中打开生成的文件,您可以在右下角看到它是UTF-16 LE

请注意,生成的文件并不是真正的空文件,您可以通过在 Node.js REPL 中输入require('fs').readFileSync('index.js')来验证这一点。 你会得到<Buffer ff fe 0d 00 0a 00> ,当用UTF-16 LE解释时,它由字节顺序标记( U+FEFF )、回车符( U+000D )和换行符( U+000A )组成.

即使您使用文本编辑器打开该文件并将所有内容替换为您的文本,字节顺序标记仍然存在(只要您仍然保存在UTF-16 LE中)。 例如,如果您保存const x = 0缓冲区将变为ff fe 63 00... ,请注意ff fe仍然存在。

当程序尝试将其加载为UTF-8时,它将得到<invalid character> <invalid character> c <null character>等等。 您在 output 中看到的内容正是来自<invalid character> <invalid character> c (Unicode:U+FFFD U+FFFD U+0063),显然不是 Z3B18019D4C249EDA 中的有效令牌。


至于你实际的 function,它只会在你有类型强制(如+myFunctionmyFunction + "" )或你像myFunction.valueOf()一样直接调用它时调用。 而且我希望它(稍微)慢一些,因为它调用用户定义的 function 而不仅仅是本机代码。

除了修改你不拥有的对象的原型的坏主意之外,这样做的用处有限(如果有的话)。
this.call(this)意味着您不能在 function 调用中添加更多 arguments 。
此外,它就像myFunction.call(myFunction) ,我不确定你为什么要这样做。 当用于 object 的方法时,它就像myObject.myMethod.call(myObject.myMethod)this等于 function 本身)而不是myObject.myMethod.call(myObject)

它会破坏依赖于myFunction + ""等行为的东西。
好像没那么容易找到例子,不过我还是找到了这个例子isNative(Math.sin)本来应该是返回true的,但是按照上图的方式修改原型后,变成了3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM