자바 스크립트 오류의 가능한 경우 : '예상 식별자, 문자열 또는 숫자'
일부 사용자가 내 사이트에서 가끔 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
http://closure-compiler.appspot.com/home 은 문제가되는 스크립트의 실제 줄 번호에 대한 정확한 참조와 함께이 오류를 선택합니다.
Just saw the bug in one of my applications, as a catch-all, remember to enclose the name of all javascript properties that are the same as keyword.
Found this bug after attending to a bug where an object such as:
var x = { class: 'myClass', function: 'myFunction'};
generated the error (class and function are keywords) this was fixed by adding quotes
var x = { 'class': 'myClass', 'function': 'myFunction'};
I hope to save you some time
As noted previously, having an extra comma threw an error.
Also in IE 7.0, not having a semicolon at the end of a line caused an error. It works fine in Safari and Chrome (with no errors in console).
IE7 is much less forgiving than newer browsers, especially Chrome. I like to use JSLint to find these bugs. It will find these improperly placed commas, among other things. You will probably want to activate the option to ignore improper whitespace.
In addition to improperly placed commas, at this blog in the comments someone reported:
I've been hunting down an error that only said "Expected identifier" only in IE (7). My research led me to this page. After some frustration, it turned out that the problem that I used a reserved word as a function name ("switch"). THe error wasn't clear and it pointed to the wrong line number.
Remove the unwanted , sign in the function. you will get the solution.
Refer this
http://blog.favrik.com/2007/11/29/ie7-error-expected-identifier-string-or-number/
This error occurs when we add or missed to remove a comma at the end of array or in function code. It is necessary to observe the entire code of a web page for such error.
I got it in a Facebook app code while I was coding for a Facebook API.
<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>
This sounds to me like a script that was pulled in with src, and loaded just halfway, causing a syntax error sine the remainder is not loaded.
IE7 has problems with arrays of objects
columns: [
{
field: "id",
header: "ID"
},
{
field: "name",
header: "Name" , /* this comma was the problem*/
},
...
Another variation of this bug: I had a function named 'continue' and since it's a reserved word it threw this error. I had to rename my function 'continueClick'
Maybe you've got an object having a method 'constructor' and try to invoke that one.
You may hit this problem while using Knockout JS. If you try setting class attribute like the example below it will fail:
<span data-bind="attr: { class: something() }"></span>
Escape the class string like this:
<span data-bind="attr: { 'class': something() }"></span>
My 2 cents.
I too had come across this issue. I found below two solutions. 1). Same as mentioned by others above, remove extra comma from JSON object. 2). Also, My JSP/HTML was having . Because of this it was triggering browser's old mode which was giving JS error for extra comma. When used it triggers browser's HTML5 mode(If supported) and it works fine even with Extra Comma just like any other browsers FF, Chrome etc.
Here is a easy technique to debug the problem: echo out the script/code to the console. Copy the code from the console into your IDE. Most IDE's perform error checking on the code and highlight errors. You should be able to see the error almost immediately in your JavaScript/HTML editor.
Had the same issue with a different configuration. This was in an angular factory definition, but I assume it could happen elsewhere as well:
angular.module("myModule").factory("myFactory", function(){
return
{
myMethod : function() // <--- error showing up here
{
// method definition
}
}
});
Fix is very exotic:
angular.module("myModule").factory("myFactory", function(){
return { // <--- notice the absence of the return line
myMethod : function()
{
// method definition
}
}
});
This can also happen in Typescript if you call a function in middle of nowhere inside a class. For example
class Dojo implements Sensei {
console.log('Hi'); // ERROR Identifier expected.
constructor(){}
}
Function calls, like console.log()
must be inside functions. Not in the area where you should be declaring class fields.
'Nice programing' 카테고리의 다른 글
주어진 커밋을 포함하는 분기를 나열하는 방법은 무엇입니까? (0) | 2020.09.27 |
---|---|
Android로 파일을 다운로드하고 ProgressDialog에 진행률 표시 (0) | 2020.09.27 |
컨테이너 크기에 따라 글꼴 크기를 설정하는 방법은 무엇입니까? (0) | 2020.09.25 |
TypeError : $ (…) .modal은 부트 스트랩 Modal이있는 함수가 아닙니다. (0) | 2020.09.25 |
탐색 스택에서 뷰 컨트롤러 제거 (0) | 2020.09.25 |