일부 사용자가 내 사이트에서 가끔 JS 오류를보고합니다. 오류 메시지는 "예상 식별자, 문자열 또는 번호"이며 줄 번호는 423725915입니다. 이는 임의의 숫자 일 뿐이며이 경우 각 보고서에 대해 변경됩니다. 이것은 대부분 IE7 / Mozilla 4.0 브라우저에서 발생합니다.
내 코드를 여러 번 스캔하고 jslint를 실행했지만 아무것도 선택하지 않았습니다.이 오류 메시지로 이어지는 일반적인 유형의 JS 문제를 아는 사람이 있습니까?
일부 사용자가 내 사이트에서 가끔 JS 오류를보고합니다. 오류 메시지는 "예상 식별자, 문자열 또는 번호"이며 줄 번호는 423725915입니다. 이는 임의의 숫자 일 뿐이며이 경우 각 보고서에 대해 변경됩니다. 이것은 대부분 IE7 / Mozilla 4.0 브라우저에서 발생합니다.
내 코드를 여러 번 스캔하고 jslint를 실행했지만 아무것도 선택하지 않았습니다.이 오류 메시지로 이어지는 일반적인 유형의 JS 문제를 아는 사람이 있습니까?
답변:
이러한 유형의 오류의 원인은 종종 개체 또는 배열 정의에서 잘못 배치 된 쉼표 일 수 있습니다.
var obj = {
id: 23,
name: "test", <--
}
임의의 줄에 나타나는 경우 동적으로 만드는 개체 정의의 일부일 수 있습니다.
,\s*?\n?\s*?]과 같은 줄 바꿈이있는 자바 스크립트 정규식 : and,\s*?\n?\s*?\}
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
<script>태그 를 통해 문서 자체에 자바 스크립트를 로컬 또는로드 된 리소스로 넣습니다 . 디버그. 작업 스크립트로 다시 전환하십시오.
내 응용 프로그램 중 하나에서 버그를 보았습니다. 포괄적으로 키워드와 동일한 모든 자바 스크립트 속성의 이름을 묶는 것을 잊지 마십시오.
다음과 같은 객체가있는 버그를 확인한 후이 버그를 발견했습니다.
var x = { class: 'myClass', function: 'myFunction'};
오류가 발생했습니다 (클래스 및 함수는 키워드 임) 따옴표를 추가하여 수정되었습니다.
var x = { 'class': 'myClass', 'function': 'myFunction'};
시간을 절약하고 싶습니다
if(_features.delete){...}삭제가 키워드이기 때문에 오류를 일으키는 것과 같은 것을 사용하고 있습니다. stackoverflow.com/questions/26255/…
http://closure-compiler.appspot.com/home 은 문제가되는 스크립트의 실제 줄 번호에 대한 정확한 참조와 함께이 오류를 선택합니다.
IE7은 최신 브라우저, 특히 Chrome보다 훨씬 덜 관대합니다. 나는 JSLint 를 사용 하여 이러한 버그를 찾는 것을 좋아합니다 . 다른 것들 중에서 부적절하게 배치 된 쉼표를 찾을 수 있습니다. 부적절한 공백을 무시하는 옵션을 활성화 할 수 있습니다.
부적절하게 배치 된 쉼표 외에도 누군가가보고 한 댓글 의이 블로그 에서 :
IE (7)에서만 "예상 식별자"라는 오류를 찾아 냈습니다. 내 조사를 통해이 페이지로 이동했습니다. 약간의 좌절 끝에 예약어를 함수명 ( "switch")으로 사용하는 문제가 발견되었습니다. 오류가 명확하지 않았고 잘못된 줄 번호를 가리 켰습니다.
원하지 않는을 제거하고 기능에 로그인하십시오. 당신은 해결책을 얻을 것입니다.
이것을 참조하십시오
http://blog.favrik.com/2007/11/29/ie7-error-expected-identifier-string-or-number/
이 오류는 배열 끝이나 함수 코드에서 쉼표를 제거하기 위해 추가하거나 누락했을 때 발생합니다. 이러한 오류에 대해서는 웹 페이지의 전체 코드를 관찰 할 필요가 있습니다.
Facebook API를 코딩하는 동안 Facebook 앱 코드에서 가져 왔습니다.
<div id='fb-root'>
<script type='text/javascript' src='http://connect.facebook.net/en_US/all.js'</script>
<script type='text/javascript'>
window.fbAsyncInit = function() {
FB.init({appId:'".$appid."', status: true, cookie: true, xfbml: true});
FB.Canvas.setSize({ width: 800 , height: 860 , });
// ^ extra comma here
};
</script>
아마도 당신은 '생성자'메소드를 가진 객체를 가지고 있고 그것을 호출하려고 할 것입니다.
저도이 문제를 접했습니다. 두 가지 해결책을 찾았습니다. 1). 위에서 언급 한 것과 동일하게 JSON 개체에서 추가 쉼표를 제거합니다. 2). 또한 내 JSP / HTML에는. 이 때문에 추가 쉼표에 대한 JS 오류를 제공하는 브라우저의 이전 모드를 트리거했습니다. 사용하면 브라우저의 HTML5 모드 (지원되는 경우)를 트리거하며 다른 브라우저 FF, Chrome 등과 마찬가지로 Extra Comma에서도 잘 작동합니다.
다른 구성으로 동일한 문제가 발생했습니다. 이것은 각진 공장 정의에 있었지만 다른 곳에서도 발생할 수 있다고 가정합니다.
angular.module("myModule").factory("myFactory", function(){
return
{
myMethod : function() // <--- error showing up here
{
// method definition
}
}
});
수정은 매우 이국적입니다.
angular.module("myModule").factory("myFactory", function(){
return { // <--- notice the absence of the return line
myMethod : function()
{
// method definition
}
}
});
후행 쉼표 또는 일부가 아닌이 구문이 constants.js에서 사용 된이 오류가 발생했습니다.
var titles = {
[title.X]: 'X title',
[title.Y]: 'Y title'
}
IE 11은 이것을 전혀 좋아하지 않았습니다.
앞서 언급했듯이 이것은 사용하여 쉽게 수정되었지만
var titles = {
'title.X': 'X title',
'title.Y': 'Y title'
}