ใ“ใฎใƒšใƒผใ‚ธใฏใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใƒผใฎๅฐฝๅŠ›ใง่‹ฑ่ชžใ‹ใ‚‰็ฟป่จณใ•ใ‚Œใพใ—ใŸใ€‚MDN Web Docs ใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใƒผใซใคใ„ใฆใ‚‚ใฃใจ็Ÿฅใ‚Šใ€ไปฒ้–“ใซใชใ‚‹ใซใฏใ“ใกใ‚‰ใ‹ใ‚‰ใ€‚

View in English Always switch to English

Error

Baseline Widely available *

This feature is well established and works across many devices and browser versions. Itโ€™s been available across browsers since โจ2015ๅนด7ๆœˆโฉ.

* Some parts of this feature may have varying levels of support.

Error ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ€ๅฎŸ่กŒๆ™‚ใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ—ใŸๆ™‚ใซ็™บ็”Ÿใ—ใพใ™ใ€‚ Error ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ€ใƒฆใƒผใ‚ถใƒผๅฎš็พฉใฎไพ‹ๅค–ใฎๅŸบๅบ•ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใจใ—ใฆไฝฟ็”จใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚ๆจ™ๆบ–ใฎ็ต„ใฟ่พผใฟใ‚จใƒฉใƒผๅž‹ใซใคใ„ใฆใฏไธ‹่จ˜ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

่งฃ่ชฌ

ๅฎŸ่กŒๆ™‚ใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ™ใ‚‹ใจใ€ๆ–ฐใ—ใ„ Error ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใŒ็”Ÿๆˆใ•ใ‚Œใ‚นใƒญใƒผใ•ใ‚Œใพใ™ใ€‚

Error ใฏใ‚ทใƒชใ‚ขใƒฉใ‚คใ‚บๅฏ่ƒฝใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใชใฎใงใ€ structuredClone() ใง่ค‡่ฃฝใ—ใŸใ‚Šใ€ใƒฏใƒผใ‚ซใƒผ้–“ใง postMessage() ใ‚’ไฝฟ็”จใ—ใฆใ‚ณใƒ”ใƒผใ—ใŸใ‚Šใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

ใ‚จใƒฉใƒผใฎๅž‹

JavaScript ใซใฏใ€ไธ€่ˆฌ็š„ใช Error ใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผใฎไป–ใซใ€ไธญๆ ธใจใชใ‚‹ไป–ใฎใ‚จใƒฉใƒผใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผใŒใ‚ใ‚Šใพใ™ใ€‚ใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆๅดใฎไพ‹ๅค–ใซใคใ„ใฆใฏใ€ไพ‹ๅค–ๅ‡ฆ็†ๆ–‡ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

EvalError

ใ‚ฐใƒญใƒผใƒใƒซ้–ขๆ•ฐ eval() ใซ้–ขใ—ใฆ็™บ็”Ÿใ™ใ‚‹ใ‚จใƒฉใƒผใ‚’่กจใ™ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

RangeError

ๆ•ฐๅ€คๅค‰ๆ•ฐใพใŸใฏๅผ•ๆ•ฐใŒใ€ใใฎๆœ‰ๅŠน็ฏ„ๅ›ฒๅค–ใงใ‚ใ‚‹ๅ ดๅˆใซ็™บ็”Ÿใ™ใ‚‹ใ‚จใƒฉใƒผใ‚’่กจใ™ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

ReferenceError

ไธๆญฃใชๅ‚็…งใ‹ใ‚‰ๅ‚็…งๅ…ˆใฎๅ€คใ‚’ๅ–ๅพ—ใ—ใŸๆ™‚ใซ็™บ็”Ÿใ™ใ‚‹ใ‚จใƒฉใƒผใ‚’่กจใ™ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

SyntaxError

ๆง‹ๆ–‡ใ‚จใƒฉใƒผใ‚’่กจใ™ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

TypeError

ๅค‰ๆ•ฐใพใŸใฏๅผ•ๆ•ฐใฎๅž‹ใŒๆœ‰ๅŠนใงใชใ„ๅ ดๅˆใซ็™บ็”Ÿใ™ใ‚‹ใ‚จใƒฉใƒผใ‚’่กจใ™ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

URIError

encodeURI() ใพใŸใฏ decodeURI() ใซไธๆญฃใชๅผ•ๆ•ฐใŒๆธกใ•ใ‚ŒใŸๆ™‚ใซ็™บ็”Ÿใ™ใ‚‹ใ‚จใƒฉใƒผใ‚’่กจใ™ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

AggregateError

ๅ‡ฆ็†ใ‹ใ‚‰่ค‡ๆ•ฐใฎใ‚จใƒฉใƒผใ‚’ๅ ฑๅ‘Šใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ๅ ดๅˆ๏ผˆไพ‹ใˆใฐ Promise.any() ๏ผ‰ใซ่ค‡ๆ•ฐใฎใ‚จใƒฉใƒผใ‚’ๅ˜ไธ€ใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใจใ—ใฆ่กจ็พใ™ใ‚‹ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

InternalError

"too much recursion" (ๆทฑใ™ใŽใ‚‹ๅ†ๅธฐ) ใชใฉใ€JavaScript ใ‚จใƒณใ‚ธใƒณใงๅ†…้ƒจใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ—ใŸๆ™‚ใซ็™บ็”Ÿใ™ใ‚‹ใ‚จใƒฉใƒผใ‚’่กจใ™ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

ใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผ

Error()

ๆ–ฐใ—ใ„ Error ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

้™็š„ใƒกใ‚ฝใƒƒใƒ‰

Error.captureStackTrace() ้žๆจ™ๆบ–

ๆจ™ๆบ–ๅค–ใฎ V8 ใฎ้–ขๆ•ฐใงใ€ Error ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใซ stack ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

Error.stackTraceLimit ้žๆจ™ๆบ–

ๆจ™ๆบ–ๅค–ใฎ V8 ใฎๆ•ฐๅ€คใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใงใ€ใ‚จใƒฉใƒผใฎใ‚นใ‚ฟใƒƒใ‚ฏใƒˆใƒฌใƒผใ‚นใซๅซใ‚ใ‚‹ใ‚นใ‚ฟใƒƒใ‚ฏใƒ•ใƒฌใƒผใƒ ใฎๆ•ฐใ‚’ๅˆถ้™ใ—ใพใ™ใ€‚

Error.prepareStackTrace() ้žๆจ™ๆบ– ็œ็•ฅๅฏ

ๆจ™ๆบ–ๅค–ใฎ V8 ใฎ้–ขๆ•ฐใงใ€๏ผˆใƒฆใƒผใ‚ถใƒผใ‚ณใƒผใƒ‰ใ‹ใ‚‰ๆไพ›ใ•ใ‚ŒใŸๅ ดๅˆใซ๏ผ‰็™บ็”Ÿใ—ใŸไพ‹ๅค–ใซๅฏพใ—ใฆ V8 Javascript ใ‚จใƒณใ‚ธใƒณใซใ‚ˆใฃใฆๅ‘ผใณๅ‡บใ•ใ‚Œใ€ใƒฆใƒผใ‚ถใƒผใฏใ‚นใ‚ฟใƒƒใ‚ฏใƒˆใƒฌใƒผใ‚นใ‚’็‹ฌ่‡ชใซใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃ

ใ“ใ‚Œใ‚‰ใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใฏ Error.prototype ใงๅฎš็พฉใ•ใ‚ŒใฆใŠใ‚Šใ€ใ™ในใฆใฎ Error ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใงๅ…ฑๆœ‰ใ•ใ‚Œใพใ™ใ€‚

Error.prototype.constructor

ใ“ใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ—ใŸใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผ้–ขๆ•ฐใงใ™ใ€‚ Error ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎๅ ดๅˆใ€ๅˆๆœŸๅ€คใฏ Error ใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผใงใ™ใ€‚

Error.prototype.name

ใ‚จใƒฉใƒผใฎๅ็งฐใ‚’่กจใ—ใพใ™ใ€‚Error.prototype.name ใฎๅ ดๅˆใ€ๅˆๆœŸๅ€คใฏ "Error" ใงใ™ใ€‚ TypeError ใ‚„ SyntaxError ใฎใ‚ˆใ†ใชใ‚ตใƒ–ใ‚ฏใƒฉใ‚นใฏๅ„่‡ชใฎ name ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’ๆไพ›ใ—ใพใ™ใ€‚

Error.prototype.stack ้žๆจ™ๆบ–

ใ‚นใ‚ฟใƒƒใ‚ฏใƒˆใƒฌใƒผใ‚นใฎใŸใ‚ใฎ้žๆจ™ๆบ–ใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ€‚

ใ“ใ‚Œใ‚‰ใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใฏใใ‚Œใžใ‚Œใฎ Error ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚น่‡ช่บซใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใงใ™ใ€‚

cause

็พๅœจใฎใ‚จใƒฉใƒผใŒใชใœ็™บ็”Ÿใ—ใŸใฎใ‹ใ‚’็คบใ™ใ‚จใƒฉใƒผใฎๅŽŸๅ› ใ€‚้€šๅธธใฏๆ•ๆ‰ใ—ใŸๅˆฅใฎใ‚จใƒฉใƒผใ€‚ใƒฆใƒผใ‚ถใƒผใŒ็”Ÿๆˆใ—ใŸ Error ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใงใฏใ€ใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผใฎ็ฌฌไบŒๅผ•ๆ•ฐใง cause ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใจใ—ใฆๆธกใ•ใ‚ŒใŸๅ€คใ€‚

Error.prototype.columnNumber

ๆจ™ๆบ–ๅค–ใฎ Mozilla ใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใงใ€ใ“ใฎใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ—ใŸ่กŒๅ†…ใฎๆก็•ชๅทใงใ™ใ€‚

Error.prototype.fileName

ๆจ™ๆบ–ๅค–ใฎ Mozilla ใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใงใ€ใ“ใฎใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ—ใŸใƒ•ใ‚กใ‚คใƒซใธใฎใƒ‘ใ‚นใงใ™ใ€‚

Error.prototype.lineNumber

ๆจ™ๆบ–ๅค–ใฎ Mozilla ใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใงใ€ใ“ใฎใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ—ใŸใƒ•ใ‚กใ‚คใƒซๅ†…ใฎ่กŒ็•ชๅทใงใ™ใ€‚

Error.prototype.message

ใ‚จใƒฉใƒผใƒกใƒƒใ‚ปใƒผใ‚ธใ€‚

ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใƒกใ‚ฝใƒƒใƒ‰

Error.prototype.toString()

ๆŒ‡ๅฎšใ—ใŸใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’่กจใ™ๆ–‡ๅญ—ๅˆ—ใ‚’่ฟ”ใ—ใพใ™ใ€‚Object.prototype.toString() ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไธŠๆ›ธใใ—ใพใ™ใ€‚

ไพ‹

ไธ€่ˆฌ็š„ใชใ‚จใƒฉใƒผใ‚’็™บ็”Ÿใ•ใ›ใ‚‹

้€šๅธธใ€throw ใ‚ญใƒผใƒฏใƒผใƒ‰ใ‚’ไฝฟใ„ๆ„ๅ›ณ็š„ใซใ‚จใƒฉใƒผใ‚’็™บ็”Ÿใ•ใ›ใฆ Error ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚ try...catch ๆง‹ๆ–‡ใ‚’ไฝฟ็”จใ—ใฆใ‚จใƒฉใƒผใ‚’ๅ‡ฆ็†ใ—ใฆใใ ใ•ใ„:

js
try {
  throw new Error("Whoops!");
} catch (e) {
  console.error(`${e.name}: ${e.message}`);
}

็‰นๅฎšใฎใ‚จใƒฉใƒผใ‚’ๅ‡ฆ็†ใ™ใ‚‹

instanceof ใงใ‚จใƒฉใƒผๅž‹ใ‚’ใƒ†ใ‚นใƒˆใ™ใ‚‹ใ“ใจใซใ‚ˆใ‚Šใ€็‰นๅฎšใฎใ‚จใƒฉใƒผๅž‹ใ ใ‘ใ‚’้ธใ‚“ใงๅ‡ฆ็†ใงใใพใ™:

js
try {
  foo.bar();
} catch (e) {
  if (e instanceof EvalError) {
    console.error(`${e.name}: ${e.message}`);
  } else if (e instanceof RangeError) {
    console.error(`${e.name}: ${e.message}`);
  }
  // ใชใฉ
  else {
    // ใ„ใšใ‚Œใฎๅ ดๅˆใซใ‚‚ใƒžใƒƒใƒใ—ใชใ„ๅ ดๅˆใ€Errorใ‚’ๆœชๅฏพๅ‡ฆใฎใพใพใซใ™ใ‚‹
    throw e;
  }
}

้กžไผผใ™ใ‚‹ใ‚จใƒฉใƒผใจๅŒบๅˆฅใ™ใ‚‹

็•ฐใชใ‚‹ๅฏพๅ‡ฆใŒๅฟ…่ฆใชๅŽŸๅ› ใงๅคฑๆ•—ใ™ใ‚‹ใซใ‚‚ใ‹ใ‹ใ‚ใ‚‰ใšใ€ใ‚ณใƒผใƒ‰ใƒ–ใƒญใƒƒใ‚ฏใŒ้žๅธธใซใ‚ˆใไผผใŸใ‚จใƒฉใƒผ๏ผˆใ™ใชใ‚ใกๅŒใ˜ๅž‹ใ‚„ใƒกใƒƒใ‚ปใƒผใ‚ธ๏ผ‰ใ‚’ๆŠ•ใ’ใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚

็™บ็”Ÿใ—ใŸๅ…ƒใฎใ‚จใƒฉใƒผใŒ็ฎก็†ไธ‹ใซใชใ„ๅ ดๅˆใ€ใ‚จใƒฉใƒผใ‚’ๆ•ๆ‰ใ—ใฆใ‚ˆใ‚Š่ฉณ็ดฐใชใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’ๆŒใคๆ–ฐใ—ใ„ Error ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ๆŠ•ใ’ใ‚‹ใ“ใจใŒไธ€ใคใฎ้ธๆŠž่‚ขใจใชใ‚Šใพใ™ใ€‚ ๅ…ƒใฎใ‚จใƒฉใƒผใฏๆ–ฐใ—ใ„ Error ใฎใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผใฎ options ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใฎ cause ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใซๆธกใ™ในใใงใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใฃใฆใ€ไธŠไฝใฎ try/catch ใƒ–ใƒญใƒƒใ‚ฏใŒๅ…ƒใฎใ‚จใƒฉใƒผใจใ‚นใ‚ฟใƒƒใ‚ฏใƒˆใƒฌใƒผใ‚นใ‚’ๅˆฉ็”จใงใใ‚‹ใ“ใจใ‚’ไฟ่จผใ—ใพใ™ใ€‚

ไปฅไธ‹ใฎไพ‹ใฏใ€ไผผใŸใ‚จใƒฉใƒผใงๅคฑๆ•—ใ™ใ‚‹ 2 ใคใฎใƒกใ‚ฝใƒƒใƒ‰ใ‚’็คบใ—ใฆใ„ใพใ™๏ผˆdoFailSomeWay() ใจ doFailAnotherWay()๏ผ‰:

js
function doWork() {
  try {
    doFailSomeWay();
  } catch (err) {
    throw new Error("Failed in some way", { cause: err });
  }
  try {
    doFailAnotherWay();
  } catch (err) {
    throw new Error("Failed in another way", { cause: err });
  }
}

try {
  doWork();
} catch (err) {
  switch (err.message) {
    case "Failed in some way":
      handleFailSomeWay(err.cause);
      break;
    case "Failed in another way":
      handleFailAnotherWay(err.cause);
      break;
  }
}

ใƒกใƒข: ใ‚‚ใ—ใ‚ใชใŸใŒใƒฉใ‚คใƒ–ใƒฉใƒชใ‚’ๅˆถไฝœใ—ใฆใ„ใ‚‹ใชใ‚‰ใ€ๅˆฉ็”จ่€…ใซใ‚จใƒฉใƒผใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’ใƒ‘ใƒผใ‚นใ™ใ‚‹ใ‚ˆใ†ใŠ้ก˜ใ„ใ™ใ‚‹ใ‚ˆใ‚Šใ‚‚็™บ็”Ÿใ—ใŸใ‚จใƒฉใƒผใ‚’ๅŒบๅˆฅใ™ใ‚‹ใŸใ‚ใซ Error ใฎ cause ใ‚’ไฝฟ็”จใ™ในใใงใ™ใ€‚ไพ‹ใซใคใ„ใฆใฏ Error ใฎ cause ใƒšใƒผใ‚ธ ใ‚’ใ”่ฆงใใ ใ•ใ„ใ€‚

ใ‚ตใƒ–ใ‚ฏใƒฉใ‚นใฎใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผใŒ super() ใ‚’ๅ‘ผใณๅ‡บใ™ใจใใซ options ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใ‚’ๆธกใ›ใฐใ€็‹ฌ่‡ชใฎใ‚จใƒฉใƒผๅž‹ใ‚‚ cause ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’ๅˆฉ็”จใงใใพใ™ใ€‚ๅŸบๅบ•ใ‚ฏใƒฉใ‚นใฎใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผ Error() ใฏ options.cause ใ‚’่ชญใฟๅ–ใฃใฆใ€ๆ–ฐใ—ใ„ใ‚จใƒฉใƒผใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใซ cause ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’ๅฎš็พฉใ—ใพใ™ใ€‚

js
class MyError extends Error {
  constructor(message, options) {
    // "cause" ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’่จญๅฎšใ™ใ‚‹ใŸใ‚ใซ็ฌฌไบŒๅผ•ๆ•ฐใซ `options` ใ‚’ๆธกใ™ๅฟ…่ฆใŒใ‚ใ‚‹ใ€‚
    super(message, options);
  }
}

console.log(new MyError("test", { cause: new Error("cause") }).cause);
// Error: cause

็‹ฌ่‡ชใฎใ‚จใƒฉใƒผๅž‹

Error ใ‹ใ‚‰ๆดพ็”Ÿใ—ใŸ็‹ฌ่‡ชใฎใ‚จใƒฉใƒผๅž‹ใ‚’ๅฎš็พฉใ—ใฆ throw new CustomError() ใŒใงใใ‚‹ใ‚ˆใ†ใซใ—ใ€instanceof CustomError ใงไพ‹ๅค–ใƒใƒณใƒ‰ใƒฉใƒผๅ†…ใฎใ‚จใƒฉใƒผใฎ็จฎ้กžใ‚’็ขบ่ชใ—ใŸใ„ใงใ—ใ‚‡ใ†ใ€‚ใ“ใ‚Œใ‚’่กŒใ†ไธ€่ˆฌ็š„ใชๆ–นๆณ•ใฎๅฎŸไพ‹ใ‚’ไปฅไธ‹ใซ็คบใ—ใพใ™ใ€‚

StackOverflow ใฎ็ชใฃ่พผใ‚“ใ ่ญฐ่ซ–ใ€ "What's a good way to extend Error in JavaScript?" ใ‚‚ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

่ญฆๅ‘Š: ็ต„ใฟ่พผใฟใฎใ‚ตใƒ–ใ‚ฏใƒฉใ‚นๅŒ–ใฏใ€ES6 ใ‚ˆใ‚Šๅคใ„ใ‚ณใƒผใƒ‰ใซ็ขบๅฎŸใซใƒˆใƒฉใƒณใ‚นใƒ‘ใ‚คใƒซใงใใ‚‹ใ‚ใ‘ใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚ใชใœใชใ‚‰ใ€ Reflect.construct() ใ‚’ไฝฟใ‚ใšใซ็‰นๅฎšใฎ new.target ใ‚’ๆŒใคๅŸบๅบ•ใ‚ฏใƒฉใ‚นใ‚’ๆง‹็ฏ‰ใ™ใ‚‹ๆ‰‹ๆฎตใŒใชใ„ใŸใ‚ใงใ™ใ€‚่ฟฝๅŠ ใฎ่จญๅฎšใ‚’่กŒใ†ใ‹ใ€ใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผใฎๆœ€ๅพŒใง Object.setPrototypeOf(this, CustomError.prototype) ใ‚’ๆ‰‹ๅ‹•ใงๅ‘ผใถๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ใใ†ใ—ใชใ„ใจใ€ๆง‹็ฏ‰ใ•ใ‚ŒใŸใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฏ CustomError ใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใซใชใ‚Šใพใ›ใ‚“ใ€‚่ฉณใ—ใใฏ the TypeScript FAQ ใ‚’ใ”่ฆงใใ ใ•ใ„ใ€‚

ใƒกใƒข: ES2015 ใ‚ฏใƒฉใ‚นใ‚’ไฝฟ็”จใ—ใŸๅ ดๅˆใ€ไธ€้ƒจใฎใƒ–ใƒฉใ‚ฆใ‚ถใƒผใฏใ‚นใ‚ฟใƒƒใ‚ฏใƒˆใƒฌใƒผใ‚นไธŠใซ CustomError ใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผใ‚’ๅซใ‚ใพใ™ใ€‚

js
class CustomError extends Error {
  constructor(foo = "bar", ...params) {
    // ่ฆชใฎใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใƒผใซ๏ผˆใƒ™ใƒณใƒ€ใƒผๅ›บๆœ‰ใฎใ‚‚ใฎใ‚‚ๅซใ‚ใฆ๏ผ‰ๆฎ‹ใ‚Šใฎๅผ•ๆ•ฐใ‚’ๆธกใ™
    super(...params);

    // ใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ—ใŸ็ฎ‡ๆ‰€ใฎๆญฃใ—ใ„ใ‚นใ‚ฟใƒƒใ‚ฏใƒˆใƒฌใƒผใ‚นใ‚’็ถญๆŒใ™ใ‚‹ ๏ผˆV8ใงใฎใฟๆœ‰ๅŠน๏ผ‰
    if (Error.captureStackTrace) {
      Error.captureStackTrace(this, CustomError);
    }

    this.name = "CustomError";
    // ใ‚ซใ‚นใ‚ฟใƒ ใฎใƒ‡ใƒใƒƒใ‚ฐๆƒ…ๅ ฑ
    this.foo = foo;
    this.date = new Date();
  }
}

try {
  throw new CustomError("baz", "bazMessage");
} catch (e) {
  console.error(e.name); // CustomError
  console.error(e.foo); // baz
  console.error(e.message); // bazMessage
  console.error(e.stack); // stacktrace
}

ไป•ๆง˜ๆ›ธ

Specification
ECMAScriptยฎ 2026 Language Specification
# sec-error-objects

ใƒ–ใƒฉใ‚ฆใ‚ถใƒผใฎไบ’ๆ›ๆ€ง

้–ข้€ฃๆƒ…ๅ ฑ