在我的第一个简单的网站/数据库上辛苦工作了2周后,我被困住了。我的朋友帮助我添加jquery,但现在它只适用于Mozilla,他不知道为什么。我根本不懂java(而且几乎不知道php)。你能看看吗?
Chrome控制台指出错误
Uncaught SyntaxError: Unexpected token =
第49行
self.dataAdapter = function(id = 0, imie = '', nazwisko = '', kredyt = 0)
你知道什么是最兼容的语法吗?
整个剧本:
$(document).ready(function()
{
sui = new swiezakUI();
sui.getData();
});
function swiezakUI()
{
var self = this;
self.scriptURL = "/data.php";
self.send = function(key, stuff)
{
var post = {};
post[key] = JSON.stringify(stuff);
$.ajax({
type: "POST",
url: self.scriptURL,
data: post,
contentType: "application/x-www-form-urlencoded",
dataType: "json",
success: function(data)
{
self.getData();
self.cleanForm();
},
failure: function(errMsg)
{
alert('fail');
},
error: function(errMsg)
{
alert("Blad \n" + errMsg.responseText);
}
});
}
self.id2Id = function(id)
{
for(var i = 0; i < self.myData.length; i++)
{
if(id == self.myData[i].id)
return i;
}
}
self.dataAdapter = function(id = 0, imie = '', nazwisko = '', kredyt = 0)
{
var data = new Object();
data.id = id;
data.imie = imie;
data.nazwisko = nazwisko;
data.kredyt = kredyt;
return data;
}
self.dodajNowy = function()
{
return function()
{
var data = self.dataAdapter(null, $('#imie').val(), $('#nazwisko').val(), $('#kredyt').val().replace(/\D+/g,""));
self.send('nowy',data);
}
}
self.edytujWpis = function(id)
{
return function()
{
var data = self.dataAdapter(id, $('#imie').val(), $('#nazwisko').val(), $('#kredyt').val().replace(/\D+/g,""));
self.send('edycja',data);
}
}
self.kasujWpis = function(id)
{
return function()
{
var data = self.dataAdapter(id);
self.send('kasuj',data);
}
}
self.cleanForm = function()
{
$('#imie').val('');
$('#nazwisko').val('');
$('#kredyt').val('');
$('#bZapisz').unbind();
$('#bZapisz').click(self.dodajNowy());
}
self.editButtons = function()
{
$('.edit').click(function()
{
var did = $(this).attr('id').replace(/\D+/g,"");
id = self.id2Id(did);
$('#imie').val(self.myData[id].imie);
$('#nazwisko').val(self.myData[id].nazwisko);
$('#kredyt').val(self.myData[id].kredyt);
$('#bZapisz').unbind();
$('#bZapisz').click(self.edytujWpis(did));
});
}
self.delButtons = function()
{
$('.delete').click(function()
{
var id = $(this).attr('id').replace(/\D+/g,"");
console.log(id);
self.kasujWpis(id)();
});
}
$('#bZapisz').click(self.dodajNowy());
$('#bCzysc').click(function(){
self.cleanForm();
});
self.getData = function()
{
$('#lista').children('table').html("<tr><th>id</th><th>imie</th><th>nazwisko</th><th>kredyt</th>"+
"<th>edycja</th><th>usun</th></tr>");
$.getJSON(self.scriptURL, function(data)
{
console.log(data);
self.myData = data;
for(var i = 0; i < data.length; i++)
{
$('#lista').children('table').append(
'<tr><td>'+ data[i].id +'</td>'+
'<td>'+ data[i].imie +'</td>'+
'<td>'+ data[i].nazwisko +'</td>'+
'<td>'+ data[i].kredyt +'</td>'+
'<td><button class="edit" id="e#'+data[i].id+'">e</button></td>'+
'<td><button class="delete" id="d#'+data[i].id+'">d</button></td></tr>');
}
self.editButtons();
self.delButtons();
});
}
}
答案 0 :(得分:2)
Default parameters目前是ES6 draft的一部分。此功能不是最新的最终ECMAScript标准(5.1)的一部分,因此browser support目前是最小的。在撰写本文时,只有Firefox(通过实验方式)实现了默认参数。
有许多方法可以模拟默认参数。 ES6默认参数的替代方法是比较arg === undefined
以设置默认值:
//if the kredyt argument has not been passed or is undefined
if (kredyt === undefined) {
kredyt = 0;
}
当调用函数传递的参数少于其参数count时,没有相应参数的参数初始化为undefined
。
这样,不传递参数的值以及显式传递undefined
作为参数值将使用默认参数值,与ES6的默认参数相同。
所以这是完整的例子:
self.dataAdapter = function(id, imie, nazwisko, kredyt)
{
//default parameters
if (id === undefined) {
id = 0;
}
if (imie === undefined) {
imie = '';
}
if (nazwisko === undefined) {
nazwisko = '';
}
if (kredyt === undefined) {
kredyt = 0;
}
//function code
var data = new Object();
data.id = id;
data.imie = imie;
data.nazwisko = nazwisko;
data.kredyt = kredyt;
return data;
}
另一种常见方法是比较arg == null
,它具有相同的效果,但也接受传递null
以使用默认参数值:
//if kredyt is null, undefined or not passed
if (kredyt == null) {
kredyt = 0;
}
这是有效的,因为==
会输入强制,而null
会强制执行undefined
(ES5#11.9.3)。
另一种常见方法是使用||
作为“默认运算符”(请参阅related question):
kredyt = kredyt || 0; //in the beginning of the function
//...
data.kredyt = kredyt;
或者如果参数仅在一个地方使用,也可以内联它:
data.kredyt = kredyt || 0;
好处基本上是更短的代码,但请注意,它不仅会在参数为undefined
时使用默认参数值,还会使用null
,false
,{{1} },空字符串或0
。因此,当其中一个值是与其默认参数值不同的可接受参数值时,这不是一种可行的方法。
最后,对于需要区分NaN
/ null
值与未传递参数的用例(这种情况很少而且不是这里的情况),可以检查{{3} object的arguments
属性:
undefined