Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的逗号运算符:应为语法错误,但代码运行正常_Javascript_Syntax_Comma - Fatal编程技术网

JavaScript中的逗号运算符:应为语法错误,但代码运行正常

JavaScript中的逗号运算符:应为语法错误,但代码运行正常,javascript,syntax,comma,Javascript,Syntax,Comma,我刚刚修复了我的一个微不足道的web应用程序中的一些bug,并无意中发现了一些有趣的语句。 我记不起为什么我要像以前那样执行这些行。现在我把它们改成了“正常”语法,一切都好了。 我的问题只是出于好奇:为什么这个方法会奏效?我希望出现语法错误,但事实并非如此。代码确实起了作用 这是旧的方法实现: ListFillFilter: function(list){ if (OC.Shorty.Debug) OC.Shorty.Debug.log("using 'default' method t

我刚刚修复了我的一个微不足道的web应用程序中的一些bug,并无意中发现了一些有趣的语句。 我记不起为什么我要像以前那样执行这些行。现在我把它们改成了“正常”语法,一切都好了。 我的问题只是出于好奇:为什么这个方法会奏效?我希望出现语法错误,但事实并非如此。代码确实起了作用

这是旧的方法实现:

ListFillFilter: function(list){
    if (OC.Shorty.Debug) OC.Shorty.Debug.log("using 'default' method to filter filled list");
    // only makes sense for default OC.Shorty list
    var data=new Array();
    data['sum_shortys']=$('#desktop #list-of-shortys tbody tr').length;
    data['sum_clicks']=0;
    $('#desktop #list-of-shortys tbody tr').each(function(){
        data['sum_clicks']+=parseInt($(this).attr('data-clicks'),10);
    });
    OC.Shorty.WUI.Sums.fill.apply(OC.Shorty.Runtime.Context.ListOfShortys,[data]),
    // filter list
    OC.Shorty.WUI.List.filter.apply(this,[list,'target',list.find('thead tr#toolbar th#target #filter').val()]),
    OC.Shorty.WUI.List.filter.apply(this,[list,'title', list.find('thead tr#toolbar th#title #filter').val()]),
    OC.Shorty.WUI.List.filter.apply(this,[list,'status',list.find('thead tr#toolbar th#status select :selected').val()])
    // sort list
    $.when(
        OC.Shorty.Action.Preference.get('list-sort-code')
    ).done(function(pref){
        OC.Shorty.WUI.List.sort(list,pref['list-sort-code']);
    })
}, // OC.Shorty.Runtime.Context.ListOfShortys.ListAddInsert
在中间你可以看到5行都以“OC.Shorty.WUI.Sums.fill.apply”开头。这些行以逗号(,)而不是分号(;)结尾。为什么没有显示为语法错误?

基本上,将多个表达式组合在一起,它们表示最后一个表达式的值。在你的情况下,你也可以省略它

假设您有以下代码:

1
2
3
这是非常有效的JavaScript代码。这些数字只是用来表示三个任意表达式

如果您要执行以下操作:

var expression_value = 1
2
3
expression\u value
将具有值
1

如果使用逗号运算符和括号:

expression_value = (1,
2,
3)
它将具有值
3
,因为逗号运算符从最右边的表达式返回值

如果不使用任何括号,则以下括号将是隐含的:

implied = ((expression_value = 1),
2,
3)
expression\u value
的值将为
1
,但
隐含的
(即整个表达式)现在的值为3。

基本上,将多个表达式组合在一起,它们表示最后一个表达式的值。在你的情况下,你也可以省略它

假设您有以下代码:

1
2
3
这是非常有效的JavaScript代码。这些数字只是用来表示三个任意表达式

如果您要执行以下操作:

var expression_value = 1
2
3
expression\u value
将具有值
1

如果使用逗号运算符和括号:

expression_value = (1,
2,
3)
它将具有值
3
,因为逗号运算符从最右边的表达式返回值

如果不使用任何括号,则以下括号将是隐含的:

implied = ((expression_value = 1),
2,
3)

expression\u value
的值将为
1
,但
隐含的
(即整个表达式)现在的值为3。

此语法使用逗号运算符,
。它计算所有操作数并返回最后一个操作数的值

人们使用这种编码方式的原因是,他们可以快速地或在一行中执行代码。以下是一个例子:

var a = 0,
    b = 1,
    c;

c = ( a++, b++, a + 2 ); // a is incremented, b is incremented, then c is assigned a + 2

a; // 1
b; // 2
c; // 3

此语法使用逗号运算符,
。它计算所有操作数并返回最后一个操作数的值

人们使用这种编码方式的原因是,他们可以快速地或在一行中执行代码。以下是一个例子:

var a = 0,
    b = 1,
    c;

c = ( a++, b++, a + 2 ); // a is incremented, b is incremented, then c is assigned a + 2

a; // 1
b; // 2
c; // 3

逗号运算符标记一个序列;JS插入额外的“;”仅当这是使代码可解析所必需的时,才在第行的末尾添加。因此,代码类似于

alert("hi"),
alert("there"),
alert("bob") // no semi-colon here
是完全有效的-它被理解为

alert("hi"),
alert("there"),
alert("bob"); // notice the semi-colon
而不是(非法)


不过,可以考虑使用自动插入分号。

逗号运算符标记序列;JS插入额外的“;”仅当这是使代码可解析所必需的时,才在第行的末尾添加。因此,代码类似于

alert("hi"),
alert("there"),
alert("bob") // no semi-colon here
是完全有效的-它被理解为

alert("hi"),
alert("there"),
alert("bob"); // notice the semi-colon
而不是(非法)


尽管如此,还是考虑了自动插入分号的可能性。

我假设的可能重复与“添加”的意思是“增加”?我假设与“添加”的意思是“增加”?