[英]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,它只会在你有类型强制(如+myFunction
或myFunction + ""
)或你像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.