数组和对象中的尾部逗号是否属于规范的一部分?

2020/10/14 07:21 · javascript ·  · 0评论

JavaScript中的尾部逗号是标准格式吗,还是大多数浏览器(例如Chrome和Firefox)都可以接受?

我以为它们是标准的,但是IE8在遇到一个标准后就呕吐了—当然IE几乎不支持某些功能,这意味着它不是标准的。

这是我的意思的示例(在books数组的最后一个元素之后):

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 5ECMAScript 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_optElision opt在哪里,这意味着Elision是可选的)

Elision 被定义为

Elision :
    ,
    Elision ,

因此,像这样的数组文字

var arr = [1,2,,,,];

是完全合法的。这将创建一个包含两个元素的数组,但将数组长度设置为2 + 3 = 5

不要对IE期望太多(在IE9之前)...

快速提醒/警告,这是JavaScript / ECMAScript标准JSON标准不同的领域之一;尾部逗号在JS有效,但在JSON中无效

IE7甚至提供了更有趣的功能

[1,].length  --> 2

而Firefox和Chrome

[1,].length  --> 1

您可以在此处找到javascript(又称为ECMA脚本)的规范您可以在第63页上找到数组的相关定义,正如Felix所指出的,对象定义在稍后第65页上的几页中找到。

虽然此规范说有尾随是很好的,但,回头看几个版本,我不知道那是不是真的。正如您已经指出的,如果您留下逗号,IE8-会自行处理,但是Chrome和FF可以很好地处理它。

在Chrome 52上:

[1,].length --> 1
[1,2,].length --> 2
[].length --> 0 
[,].length --> 1    <<<<=== OUHHHHH !!!!

我只是不喜欢尾随逗号。人们通常在开源项目中使用它们,以避免擦除其他提交者编写的行。在Python中看到相同的问题:https : //stackoverflow.com/a/11597911/968988

让我们分解一下。

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及更高版本)

我强烈建议您看看Airbnb不推荐使用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

本文地址:http://javascript.askforanswer.com/shuzuheduixiangzhongdeweibudouhaoshifoushuyuguifandeyibufen.html
文章标签:
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!