213
var err1 = Error('message');
var err2 = new Error('message');

違いは何ですか?Chrome コンソールでそれらを見ると、同じように見えます。オブジェクトと同じ__proto__チェーンの同じプロパティ。ほとんどError工場のような行為のようです。

どれが正しいですか、なぜですか?

4

2 に答える 2

216

どちらも問題ありません。これは仕様で明示的に述べられています:

... したがって、関数呼び出しは、同じ引数を持つError(…)オブジェクト作成式と同等です。new Error(…)

于 2012-11-08T17:43:22.373 に答える
24

Error他のネイティブ コンストラクタのように、ファクトリのように動作します: ArrayObjectなど。すべて のようなものをチェックしますif (!(this instanceof Array)) { return new Array(arguments); }。(ただし、String(x)とは非常に異なることに注意してください。とnew String(x)も同様です。)NumberBoolean

とはいえ、エラーが発生した場合、Errorオブジェクトをスローする必要さえありません...throw 'Bad things happened';動作します。
デバッグのためにオブジェクトリテラルをスローすることもできます。

throw {message:"You've been a naughty boy",
       context: this,
       args: arguments,
       more:'More custom info here'};
于 2012-11-08T17:46:16.513 に答える