JavaScript에서 후행 쉼표가 표준입니까, 아니면 Chrome 및 Firefox와 같은 대부분의 브라우저가 허용합니까?
나는 그것들이 표준이라고 생각했지만 IE8은 하나를 만난 후 당황했습니다. 물론 IE는 무언가를 거의 지원하지 않으면 표준이 아닙니다.
다음은 책 배열의 마지막 요소 다음에 의미하는 바의 예입니다.
var viewModel = {
books: ko.observableArray([
{ title: "..", display: function() { return ".."; } },
{ title: "..", display: function() { return ".."; } },
{ title: "..", display: function() { return ".."; } }, // <--right there
]),
currentTemplate: ko.observable("bookTemplate1"),
displayTemplate: function() { return viewModel.currentTemplate(); }
};
답변
사양 : ECMAScript 5 및 ECMAScript 3
ECMAScript 5 사양의 섹션 11.1.5 :
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
{ PropertyNameAndValueList , }
예, 사양의 일부입니다.
업데이트 : 분명히 이것은 ES5의 새로운 기능입니다. ES3 (41 페이지)에서 정의는 다음과 같습니다.
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
배열 리터럴 ( 11.1.4 절 )의 경우 훨씬 더 흥미 롭습니다 ( 업데이트 : ES3에 이미 존재 함).
ArrayLiteral :
[ Elisionopt ]
[ ElementList ]
[ ElementList , Elision_opt ]
(여기서 Elision_opt
생략 된 것입니다 옵트 , 이는 Elision이 선택 사항임을 의미합니다)
Elision
로 정의
Elision :
,
Elision ,
따라서 배열 리터럴은
var arr = [1,2,,,,];
완벽하게 합법적입니다. 이렇게하면 요소가 두 개인 배열이 만들어 지지만 배열 길이는로 설정됩니다 2 + 3 = 5
.
IE (IE9 이전)에서 너무 많이 기대하지 마십시오 …
답변
이것이 JavaScript / ECMAScript 표준 과 JSON 표준이 다른 영역 중 하나라는 것을 간단히 알리십시오 . 후행 쉼표은 유효 JS뿐만 유효하지 JSON있다.
답변
더 재미있는 것, IE7은
[1,].length --> 2
파이어 폭스와 크롬
[1,].length --> 1
답변
javascript (일명 ECMA Script) 사양은 여기에서 찾을 수 있습니다 . 63 페이지에서 배열에 대한 관련 정의를 찾을 수 있으며 Felix가 언급했듯이 65 페이지에서 나중에 두 페이지로 개체 정의를 정의 할 수 있습니다.
이 사양은 후행을 갖는 것이 좋다고 말하지만 그것이 ,
몇 가지 버전을 되돌아 보는 것이 진실인지는 모르겠습니다. 앞서 언급했듯이 IE8-은 쉼표를 남기지 만 Chrome과 FF는 잘 처리합니다.
답변
이것을 분해하자.
JavaScript에서 후행 쉼표가 표준입니까?
예. ECMAScript 5 사양 기준 (Google 및 Airbnb 스타일 가이드의 일부)
Chrome 및 Firefox와 같은 대부분의 브라우저는 허용합니까?
이것은 ECMAScript 5 지원 질문입니다.
Babel과 같은 트랜스 필러는 트랜스 필 된 코드에서 추가 후행 쉼표를 제거하므로 레거시 브라우저의 후행 쉼표 문제에 대해 걱정할 필요가 없습니다.
따라서 다음을 의미합니다.
var heroes = [
'Batman',
'Superman',
];
// heroes.length === 2 (not 3)
따라서 ES5 이상을 사용하는 경우 걱정할 필요가 없습니다.
나는 그것들이 표준이라고 생각했지만 IE8은 하나를 만난 후 당황했습니다. 물론 IE는 무언가를 거의 지원하지 않으면 표준이 아닙니다.
다시 말하지만, 이는 ECMAScript 5 지원 질문입니다. IE8은 ECMAScript 5를 지원하지 않습니다 (IE9 이상 만)
에어 비앤비의 ES5 지원 중단 된 문서 https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas를 살펴 보는 것이 좋습니다.
또한 Mozilla 문서를 추천합니다 :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas
답변
Chrome 52에서 :
[1,].length --> 1
[1,2,].length --> 2
[].length --> 0
[,].length --> 1 <<<<=== OUHHHHH !!!!
나는 단지 쉼표를 좋아하지 않습니다. 사람들은 보통 다른 커미터가 작성한 줄을 지우지 않기 위해 오픈 소스 프로젝트에서 사용합니다. Python에서 동일한 질문을 참조하십시오 : https : //.com/a/11597911/968988