使用包含空格的字符串调用Error.constructor时的语法错误

时间:2019-05-14 08:01:56

标签: javascript node.js

我在Firefox和chrome&Node.js中尝试了以下代码:

Error.constructor.call({}, 'specified string'); // Uncaught SyntaxError: Unexpected identifier
Error.constructor.call({}, 'specified '); // work well
Error.constructor.call({}, 'specified'); // work well

我想知道JS解释器给我该错误的原因。看来eval()是用第二个参数调用的,但是我真的不知道发生了什么。

2 个答案:

答案 0 :(得分:3)

首先,Error.constructor实际上是Object.constructor

> Error.constructor === Object.constructor
true

第二,Object.constructor可用于创建函数:

> f = Object.constructor('foo', 'bar', 'return "hello " + foo + " and " + bar;')
[Function: anonymous]
> f('Alice', 'Bob')
'hello Alice and Bob'

最后一个参数是函数主体,而先前的参数是函数参数。

最后,您的代码:

Error.constructor.call({}, 'specified string');

表示您正在调用Object.constructor以创建具有函数主体specified string的函数。函数主体specified string是一段无效的JavaScript代码,因此是错误。

答案 1 :(得分:0)

杨,我可能会误解您的问题,但是如果您只想抛出一个错误,可以使用 throw new Error('Something is broken'),因为在这种情况下也会调用Error构造函数,因此您无需显式使用.call,因为您始终不会在其中传递任何上下文。

希望这会有所帮助。