var err1 = Error('message');
var err2 = new Error('message');
違いは何ですか?それらをChromeコンソールで見ると、同じに見えます。オブジェクトと同じ__proto__チェーンの同じプロパティ。ほとんどError工場のように振る舞うようです。
どちらが正しいのですか?その理由は?
var err1 = Error('message');
var err2 = new Error('message');
違いは何ですか?それらをChromeコンソールで見ると、同じに見えます。オブジェクトと同じ__proto__チェーンの同じプロパティ。ほとんどError工場のように振る舞うようです。
どちらが正しいのですか?その理由は?
回答:
Errorいくつかの他のネイティブコンストラクタと同様に、工場のように振る舞うんArray、Objectなどのようにすべてのチェック何かをif (!(this instanceof Array)) { return new Array(arguments); }。(しかし、注目すべきことString(x)とnew String(x)は非常に異なる、と同様にするためのものであるNumberとBoolean。)
、エラーの場合には、さえスローする必要はないと述べているErrorオブジェクトを... throw 'Bad things happened';動作しますが、あまりにも
あなたも、デバッグするためのオブジェクトリテラルを投げることができます。
throw {message:"You've been a naughty boy",
context: this,
args: arguments,
more:'More custom info here'};
String("abc")はStringオブジェクトを作成しませんが、作成しますnew String("abc")。
Object=>は、Object('foo')文字列オブジェクトを返します...それの事に来るほとんどすべてのネイティブのコンストラクタをビット間違っている... Number、Boolean、Date、Stringすべてが...ないArray、ObjectとErrorやります、しかしEvent、すべてのDOMxxxx-apiコンストラクターはエラーをスローします
new Array(arguments)正確には何もしないと思いますArray(1, 2, 3)。しかし、おそらく私はつまらないです:)
Errorインスタンス(または文字列リテラル)をスローすると、スタックトレースが失われます。リンクされた記事のarguments.callee
newます。