所以我有一个非常简单的ajax设置,它运行得很好。
function ajax_post(){
var hr = new XMLHttpRequest();
var f = "foo";
var j = "bar";
hr.open("POST", "ajax7.php", true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var rd = hr.responseText;
}
}
hr.send("f="+f+"&j="+j);
}
然后我决定通过删除所有空格来减少它,所以我最终得到了
function ajax_post(){var hr = new XMLHttpRequest();var f = "foo";var j = "bar";hr.open("POST", "ajax7.php", true);hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");hr.onreadystatechange = function(){if(hr.readyState == 4 && hr.status == 200){ var rd = hr.responseText;}}hr.send("f="+f+"&j="+j)}
它停止工作,抛出错误。 SyntaxError:missing;在陈述之前
所以,我最后通过在一行版本的hr.send之前添加一个逗号来修复它,它又重新运行了。
我的问题......这个逗号有什么意义?它适用于"扩展"没有它的版本。我真的应该把这个逗号放在"扩展"版本一直......?
答案 0 :(得分:3)
这个逗号有什么意义?
逗号使程序在语法上正确。
var foo = function(){}bar();
只是无效,因为你不能有两个表达式(function(){}
是一个函数表达式,bar()
是一个调用表达式)其他没有经营者。逗号是operator:
逗号运算符计算每个操作数(从左到右)并返回最后一个操作数的值。
var foo = function(){},bar();
由于逗号运算符的工作方式,这与直接将bar()
分配给foo
具有相同的效果:
var foo = bar();
因此,即使添加逗号使您的程序在语法上正确,它也不会产生您想要的结果。在您的具体情况下,这会将hr.send()
的返回值分配给hr.onreadystatechange
,这实际上没有任何意义:
// hr.onreadystatechange = function(){}, hr.send();
// is equivalent to
hr.onreadystatechange = hr.send();
您确实需要添加分号才能获得两个单独的语句:
var foo = function(){}; bar();
许多语句(例如变量声明语句)以分号结束。在函数表达式之后添加分号告诉解析器变量声明语句在那里结束,并且以下部分(bar();
)是不相关的。