λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“‚ μ‚½μ§ˆ λ…ΈνŠΈ/μ—λŸ¬ ν•΄κ²°

μžλ°”μŠ€ν¬λ¦½νŠΈ μ˜₯νƒˆ λ¦¬ν„°λŸ΄? Octal literals are not allowed μ—λŸ¬ 원인과 ν•΄κ²° 방법

by Dev. Ella 2023. 12. 2.

πŸ€”  였늘의 μ—λŸ¬

0으둜 μ‹œμž‘ν•˜λŠ” μˆ«μžκ°€ ν¬ν•¨λ˜μ—ˆμ„ λ•Œμ˜ μ˜ˆμ™Έ 처리λ₯Ό ν•΄μ•Όν•˜λŠ”λ°, 이λ₯Ό ν…ŒμŠ€νŠΈν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ‹€ μ•„λž˜μ™€ 같은 μ—λŸ¬λ₯Ό λ§Œλ‚¬λ‹€.

Octal literals둜 μΈν•œ μ—λŸ¬ ν™”λ©΄

 

Octal literals..? 처음 λ³΄λŠ” μ—λŸ¬μ— 처음 λ“€μ–΄λ³΄λŠ” λ‹¨μ–΄μ˜€λ‹€. 일단 사전을 μ°Ύμ•„λ³΄λ‹ˆ octal은 8μ§„λ²•μ΄λΌλŠ” 뜻이라고 ν•˜λ‹ˆ, μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” 8진법에 λŒ€ν•œ μ–΄λ– ν•œ κ·œμΉ™μ΄ μžˆλ‚˜λ³΄λ‹€ μΆ”μΈ‘ν–ˆλ‹€.

 

octal의 뜻 @naverdic

 

μš°μ„ μ€ μ—λŸ¬ λ©”μ‹œμ§€κ°€ μΆ”μ²œν•΄ μ£ΌλŠ” λ°©λ²•μ²˜λŸΌ μˆ«μžκ°€ μ•„λ‹Œ λ¬Έμžμ—΄λ‘œ λ§Œλ“€μ—ˆλŠ”λ°, 이 μ—λŸ¬κ°€ μ™œ λ°œμƒν•˜λŠ”μ§€, μ˜₯νƒˆ λ¦¬ν„°λŸ΄μ€ 무엇인지, 그리고 λ‹€λ₯Έ ν•΄κ²° 방법은 μ—†λŠ”μ§€ κΆκΈˆν•΄ μ°Ύμ•„λ³΄μ•˜λ‹€.

 

 

🧐 처음 μž‘μ„±ν•œ μ½”λ“œ

describe('μ‹œλ„ 횟수 μœ νš¨μ„± 검사', () => {
  const validTryCounts = [1, 5, 99];
  const invalidTryCounts = [-1, 02, 'abc', '@']; // 02 둜 μž‘μ„±

  test('μ–‘μ˜ μ •μˆ˜κ°€ μ•„λ‹ˆλ©΄ μ‹€νŒ¨', () => {
    invalidTryCounts.forEach((tryCount) => {
      expect(isValidTryCount(tryCount)).toBe(false);
    });
  });
});

 

μœ„μ™€ 같이 02둜 μž‘μ„±ν–ˆλ‹€. 0이 맨 μ•žμ— μ™”λ˜ 게 μ—λŸ¬μ˜ μ›μΈμ΄μ—ˆλ‹€.

 

 

πŸ’‘ 원인과 ν•΄κ²° 방법

μ—λŸ¬μ—μ„œ λ§ν•˜λŠ” λ‚΄μš©κ³Ό 원인에 λŒ€ν•΄μ„œλŠ” μ•„λž˜μ™€ 같이 μ—¬λŸ¬ μžλ£Œλ“€μ„ μ„œμΉ­ν•΄ λ³΄μ•˜λ‹€.

 

μš°μ„  첫 번째둜 μ°Ύμ•„λ³Έ λΈ”λ‘œκ·Έ κΈ€μ—μ„œ 0으둜 μ‹œμž‘ν•˜λŠ” Octal literals은 JavaScript strict modeμ—μ„œλŠ” ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€κ³  ν•œλ‹€. ES6 λͺ¨λ“ˆμ„ μ •μ˜ν•˜λŠ” 경우, μŠ€μ½”ν”„λŠ” μžλ™μœΌλ‘œ strict modeκ°€ λ˜λŠ”λ°, 엄격 λͺ¨λ“œμ—μ„œλŠ” 8μ§„μˆ˜ ν‘œκΈ°λ²•μ„ μ• λ§€ν•œ ν‘œκΈ°λ²•μœΌλ‘œ κ·œμ •ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€. 

 

λΈ”λ‘œκ·Έ κΈ€ μ„€λͺ…

 

 

두 번째둜 μ°Ύμ•„λ³Έ stackoverflow κΈ€μ—μ„œλŠ” μ—λŸ¬ λ©”μ‹œμ§€μ—μ„œ μ£ΌλŠ” ν•΄κ²° λ°©λ²•μ²˜λŸΌ λ¬Έμžμ—΄ 처리λ₯Ό ν•΄μ£Όμ—ˆλ‹€κ³  ν•œλ‹€. λ¬Όλ‘  μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄μž₯ ν•¨μˆ˜μΈ parseInt( )λ₯Ό ν™œμš©ν•œ μ‚¬λžŒλ„ μžˆμ—ˆλ‹€.

 

stackoverflow μ„€λͺ…

 

 

λ§ˆμ§€λ§‰μœΌλ‘œ, 더 곡식적인 MDNμ—μ„œ μ•Œλ €μ£ΌλŠ” λ‚΄μš©λ„ μ°Ύμ•„λ³΄μ•˜λ‹€. μœ„ λΈ”λ‘œκ·Έ κΈ€μ—μ„œ μ„€λͺ…ν•œ κ²ƒμ²˜λŸΌ 엄격 λͺ¨λ“œμ—μ„œ 8진 λ¦¬ν„°λŸ΄μ€ μ—λŸ¬λ₯Ό λ˜μ§€κΈ°μ— μ—λŸ¬ λ©”μ‹œμ§€μ—μ„œ μ•Œλ €μ€€ ν•΄κ²° λ°©λ²•μ²˜λŸΌ 0을 맨 μ•žμžλ¦¬μ— 두고 λŒ€λ¬Έμž Oλ‚˜ μ†Œλ¬Έμž oλ₯Ό μž‘μ„±ν•΄ '0O2'λ‚˜ '0o2'와 같은 ν˜•μ‹μœΌλ‘œ μ‚¬μš©ν•˜λΌκ³  μ œμ•ˆν•œλ‹€.

 

MDN μ„€λͺ…

 

 

πŸ‘©πŸ»‍πŸ’» μˆ˜μ •ν•œ μ½”λ“œ

μ •λ¦¬ν•˜μžλ©΄, μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 숫자 λ¦¬ν„°λŸ΄μ΄ '0'으둜 μ‹œμž‘ν•˜λŠ” 경우, μ΄λŠ” 8μ§„μˆ˜(μ˜₯νƒˆ) λ¦¬ν„°λŸ΄λ‘œ ν•΄μ„λœλ‹€. μ΄λŠ” ν˜„λŒ€μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ—μ„œλŠ” μ‚¬μš©λ˜μ§€ μ•ŠλŠ” ꡬ식 문법이닀.

 

그렇기에 이λ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•  λ•Œ "Octal literals are not allowed"λΌλŠ” μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. λ”°λΌμ„œ 02와 같은 값을 ν…ŒμŠ€νŠΈν•˜κ³ μž ν•˜λŠ” 경우, 02와 같은 숫자 λŒ€μ‹  '02'와 같이 λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.

 

μ•„λž˜λŠ” μˆ˜μ •λœ μ½”λ“œλ‹€.

 

describe('μ‹œλ„ 횟수 μœ νš¨μ„± 검사', () => {
  const validTryCounts = [1, 5, 99];
  const invalidTryCounts = [-1, '02', 'abc', '@']; // '02'와 같이 λ¬Έμžμ—΄λ‘œ λ³€κ²½

  test('μ–‘μ˜ μ •μˆ˜κ°€ μ•„λ‹ˆλ©΄ μ‹€νŒ¨', () => {
    invalidTryCounts.forEach((tryCount) => {
      expect(isValidTryCount(tryCount)).toBe(false);
    });
  });
});

 

 

 

λŒ“κΈ€