Javascript 什么';s";“字符串数学”;为什么不好?
我最近因为在我编写的一个应用程序中使用“字符串数学”而受到一位开发人员的斥责。我对整个开发工作还很陌生,没有接受过正式培训,也没有听说过这个问题。这是什么 有关守则:Javascript 什么';s";“字符串数学”;为什么不好?,javascript,Javascript,我最近因为在我编写的一个应用程序中使用“字符串数学”而受到一位开发人员的斥责。我对整个开发工作还很陌生,没有接受过正式培训,也没有听说过这个问题。这是什么 有关守则: $('.submit-input').click( function() { var valid = true; $('input, select, radio').removeClass('error'); $('.error-message').hide(); $('.validate').e
$('.submit-input').click( function() {
var valid = true;
$('input, select, radio').removeClass('error');
$('.error-message').hide();
$('.validate').each( function() {
if($(this).val() == $(this).attr('default')){
valid = false;
$(this).addClass('error');
}
});
if(!$('select[name="contact"] option:selected').val() != ''){
$('select[name="contact"]').addClass('error');
valid = false;
}
if(!$('input[name="ampm"]:checked').length){
$('input[name="ampm"]').addClass('error');
valid = false;
}
if(!valid){
$('.error-message').css('display','block');
return false;
} else {
var services_selected = 'Services Selected: ';
services_selected += $('.l3').text() + ', ' + $('.l4').text() + ', ' + $('.l5').text() + '; ' + $('.l6').text();
var prices = 'Prices: ';
prices += $('.l7').text() + ', ' + $('.l8').text() + ', ' + $('.l9').text() + ', ' + $('.l10').text();
var name = 'Name: ';
name += $('input[name="name"]').val();
var phone = 'Phone: '
phone += $('input[name="phone"]').val();
var time = 'Preferred contact time: ';
time += $('select[name="contact"] option:selected').val() + $('input[name="ampm"]:checked').val();
$.ajax({
url: 'php/mailer.php',
data: 'services_selected=' + services_selected +'&prices=' + prices + '&name=' + name + '&phone=' + phone + '&time=' + time,
type: "POST",
success: function() {
$('#email_form_box .container').children().fadeOut(500, function() {
$('#email_form_box .container').html('<div style="margin:20px auto;text-align:center;width:200px;">yada yada yada<br /><span class="close">Close</span></div>');
});
}
});
}
});
$('.submit input')。单击(函数(){
var valid=true;
$('input,select,radio')。removeClass('error');
$('.error message').hide();
$('.validate')。每个(函数(){
if($(this.val()==$(this.attr('default')){
有效=错误;
$(this.addClass('error');
}
});
如果(!$('select[name=“contact”]选项:selected')。val(){
$('select[name=“contact”]”)。addClass('error');
有效=错误;
}
if(!$('input[name=“ampm”]:checked')。长度){
$('input[name=“ampm”]”)。addClass('error');
有效=错误;
}
如果(!有效){
$('.error message').css('display','block');
返回false;
}否则{
var services_selected='services selected:';
所选服务+=$('.l3').text()+,'+$('.l4').text()+,'+$('.l5').text()+';'+$('.l6').text();
var价格='价格:';
价格+=$('.l7').text()+'、'+$('.l8').text()+'、'+$('.l9').text()+'、'+$('.l10').text();
变量名称='名称:';
name+=$('input[name=“name”]”)。val();
var phone='电话:'
phone+=$('input[name=“phone”]”)。val();
变量时间='首选联系时间:';
时间+=$('select[name=“contact”]选项:selected').val()++$('input[name=“ampm”]:checked').val();
$.ajax({
url:'php/mailer.php',
数据:'services_selected='+services_selected+'&prices='+prices+'&name='+name+'&phone='+phone+'&time='+time,
类型:“POST”,
成功:函数(){
$('#email_form_box.container').children().fadeOut(500,function()){
$('#email_form_box.container').html('yada yada yada
Close');
});
}
});
}
});
编辑:我在这里得到的要点是,这不是一个标准的开发口语,我可能应该和一开始给我废话的人谈谈。所以我会这么做。谢谢各位。我会回来给你一个答案,或者去核实已经知道的人。编辑:好的,我的错,你不使用
+
进行连接。编辑如下:
Edit2:好的,是JavaScript,返回到+
:p
我想他可能指的是:
$my_html = "<p>" + someVar + "<em>" + somethingImportant + "</em></p>";
services_selected = '{0} , {1}, {2}, {3}; {4}'.format($('.l3').text(), $('.l4').text(), $('.l5').text(), $('.l6').text());
$my_html=“”+someVar+“”+somethingImportant+””;
i、 e.使用
进行连接。您是否可能使用字符串存储/处理数字数据?这很少是个好主意。扩展斯基尔德里克的答案:
在其中一个变量不是字符串之前,使用“+”表示字符串(取决于您的语言)没有任何错误:
echo 0 + ": hi!<br />";
echo 0 .. ": hi!<br />";
echo 0+”:嗨!
;
回声0。。“:嗨!
”;
第一行可能输出“0”(当它尝试将字符串转换为数字时)。
第二行写的是“0:hi!
”。因为您是开发新手,最好的做法是与这位开发人员讨论什么是“字符串数学”,如何识别何时再次执行,以及如何避免。
然后,回到这里,回答您自己的问题,这样我们就可以从您的开发伙伴的角度来了解“字符串数学”到底是什么了。既然您用javascript重新标记了您的问题,那么您的同事可能会指出您的代码中的错误,从而导致类似这样的问题
基本上,
“1”+1
在javascript中计算为11
,而1+1
计算为2
。现在,将+
的第一个参数替换为一个变量,您会得到一些意外的行为。在大多数Javascript浏览器实现中,由于过度复制,连接字符串的速度很慢。看
首选方法是使用数组和联接:
var pieces = ["You purchased "];
pieces.push(num, " widgets.");
el.innerHTML = pieces.join('');
增加更多:
我认为您的代码中可能有一个潜在的bug:您似乎没有逃逸数据值。如果其中任何一个包含一个符号,你就有麻烦了。对所有数据值使用escape()
另外,这是一个其他开发人员遗漏的真正的bug。字符串数学问题是一个性能/可维护性问题
增加:
我(很快)重写了你的电子邮件作文部分。我认为使用碎片阵列时会更干净(并且会稍微快一点)
....
} else {
var d = []; // the post_data pieces table
d.push ('services_selected='); // Start the services_selected value
d.push ('Services Selected: ');
d.push ($('.l3').text(), ', ', $('.l4').text(), ', ', $('.l5').text(),
'; ', $('.l6').text());
d.push ('&prices='); // Start the prices value
d.push ('Prices: ');
d.push ($('.l7').text(), ', ', $('.l8').text(), ', ', $('.l9').text(),
', ', $('.l10').text());
d.push ('&name='); // Start the name value
d.push ('Name: ', $('input[name="name"]').val());
d.push ('&phone='); // Start the phone value
d.push ('Phone: ', $('input[name="phone"]').val());
d.push ('&time='); // Start the timevalue
d.push ('Preferred contact time: ',
$('select[name="contact"] option:selected').val(),
$('input[name="ampm"]:checked').val());
$.ajax({
url: 'php/mailer.php',
data: d.join(''),
type: "POST",
success: function() {
$('#email_form_box .container').children().fadeOut(500, function() {
$('#email_form_box .container').html('<div style="margin:20px auto;text-align:center;width:200px;">yada yada yada<br /><span class="close">Close</span></div>');
});
}
});
}
。。。。
}否则{
var d=[];//post_数据块表
d、 push('services_selected=');//启动services_selected值
d、 推送('所选服务:');
d、 推送($('.l3').text(),,,,,$('.l4').text(),,,,,$('.l5').text(),
“;”,$(“.l6”).text();
d、 推送(“&prices=”);//启动prices值
d、 推动(价格:);
d、 推送($('.l7').text(),,,,,$('.l8').text(),,,,,,$('.l9').text(),
“,”,$(“.l10”).text());
d、 push(“&name=”);//启动名称值
d、 push('Name:',$('input[Name=“Name”]”)val();
d、 推送(“&phone=”);//启动电话值
d、 push('Phone:',$('input[name=“Phone”]”)val();
d、 push(“&time=”);//启动时间值
d、 推送('首选接触时间:',
$('select[name=“contact”]选项:selected').val(),
$('input[name=“ampm”]:checked').val();
$.ajax({
url:'php/mailer.php',
数据:d.连接(“”),
类型:“POST”,
成功:函数(){
$('#email_form_box.container').children().fadeOut(500,function()){
$('#email_form_box.container').html('yada yada yada
Close');
});
}
});
}
您的同事可能对这样的行有意见。理论上,这是完全正确的代码,但它几乎不可能被读取
services_selected += $('.l3').text() + ', ' + $('.l4').text() + ', ' + $('.l5').text() + '; ' + $('.l6').text();
在此处查看功能和讨论:
您可以轻松添加
public String StringAdd (String str1, String str2){
int int1, int2;
switch (str1){
case "Zero":
int1 = 0;
break;
case "One":
int1 = 1;
break;
//...etc...
default:
throw new BadNumberSpellingException("You spelled a number wrong.");
}
switch (str2){
case "Zero":
int2 = 0;
break;
//...etc...
}
int result = int1 + int2;
switch (result){
case 0:
return "Zero";
case 1:
return "One";
case 2:
return "Two";
//etc....
}
}