[javascript] 자바 스크립트 오류의 가능한 경우 : ‘예상 식별자, 문자열 또는 숫자’

일부 사용자가 내 사이트에서 가끔 JS 오류를보고합니다. 오류 메시지는 “예상 식별자, 문자열 또는 번호”이며 줄 번호는 423725915입니다. 이는 임의의 숫자 일 뿐이며이 경우 각 보고서에 대해 변경됩니다. 이것은 대부분 IE7 / Mozilla 4.0 브라우저에서 발생합니다.

내 코드를 여러 번 스캔하고 jslint를 실행했지만 아무것도 선택하지 않았습니다.이 오류 메시지로 이어지는 일반적인 유형의 JS 문제를 아는 사람이 있습니까?



답변

이러한 유형의 오류의 원인은 종종 개체 또는 배열 정의에서 잘못 배치 된 쉼표 일 수 있습니다.

var obj = {
   id: 23,
   name: "test",  <--
}

임의의 줄에 나타나는 경우 동적으로 만드는 개체 정의의 일부일 수 있습니다.


답변

Javascript 사전에서 class 라는 단어를 키로 사용하면 class 가 Internet Explorer에서 예약 된 키워드 이기 때문에 두려운 “예상 식별자, 문자열 또는 숫자”오류가 발생할 수 있습니다.

나쁜

{ class : 'overlay'} // ERROR: Expected identifier, string or number

좋은

{'class': 'overlay'}

Javascript 사전에서 예약 된 키워드를 키로 사용하는 경우 키를 따옴표로 묶으십시오.

이 힌트가 지옥 디버깅의 하루를 절약하기를 바랍니다.


답변

사실 저는 최근에 IE에서 이와 같은 것을 얻었으며 JavaScript 구문 “오류”와 관련이있었습니다. IE를 제외한 모든 곳에서 괜찮 았기 때문에 따옴표로 오류를 말합니다. 이것은 IE6에서였습니다. 문제는 JSON 객체 생성 및 다음과 같은 추가 쉼표와 관련이 있습니다.

{ one:1, two:2, three:3, }

IE6는 3 이후의 쉼표를 정말 좋아하지 않습니다. 그런 식의 작은 구문 형식 문제를 찾을 수 있습니다.

네, 25 줄 JavaScript의 수백만 줄 번호도 흥미 롭다고 생각했습니다.

행운을 빕니다.


답변

이것은 확실한 답이 아닙니다. 유혹적이지만 틀린 답을 제거하여 다른 사람들이 올바른 답을 찾을 수 있도록 도와줍니다.

디버깅이 문제를 강조하는 것처럼 보일 수 있습니다. 그러나 문제가 발생하는 유일한 브라우저는 IE이며 IE에서는 원본 문서의 일부인 코드 만 디버그 할 수 있습니다. 동적으로 추가 된 코드의 경우 디버거는 본문 요소를 현재 명령으로 표시하고 IE는 오류가 엄청난 줄 번호에서 발생했다고 주장합니다.

다음은 IE에서이 문제를 보여주는 샘플 웹 페이지입니다.

<html>
<head>
<title>javascript debug test</title>
</head>
<body onload="attachScript();">
<script type="text/javascript">
function attachScript() {
   var s = document.createElement("script");
   s.setAttribute("type", "text/javascript");
   document.body.appendChild(s);
   s.text = "var a = document.getElementById('nonexistent'); alert(a.tagName);"
}
</script>
</body>

이로 인해 다음과 같은 오류가 발생했습니다.

Line: 54654408
Error: Object required


답변

내 응용 프로그램 중 하나에서 버그를 보았습니다. 포괄적으로 키워드와 동일한 모든 자바 스크립트 속성의 이름을 묶는 것을 잊지 마십시오.

다음과 같은 객체가있는 버그를 확인한 후이 버그를 발견했습니다.

var x = { class: 'myClass', function: 'myFunction'};

오류가 발생했습니다 (클래스 및 함수는 키워드 임) 따옴표를 추가하여 수정되었습니다.

var x = { 'class': 'myClass', 'function': 'myFunction'};

시간을 절약하고 싶습니다


답변

http://closure-compiler.appspot.com/home 은 문제가되는 스크립트의 실제 줄 번호에 대한 정확한 참조와 함께이 오류를 선택합니다.


답변

앞서 언급했듯이 추가 쉼표가 있으면 오류가 발생했습니다.

또한 IE 7.0에서는 줄 끝에 세미콜론이 없으면 오류가 발생했습니다. Safari 및 Chrome에서 제대로 작동합니다 (콘솔에 오류 없음).