这个javascript连接对我来说曾经工作过,但这总是可以接受的javascript吗?
This javascript concatenation worked once for me, but is this always acceptable javascript?
在我的网站的一个函数(myFunction)中,我需要将四个变量传递给另一个函数(一个具有通用格式的Ajax函数 - 函数GeneralFunction('id1','id2',param1,param2,param3))。
在这一点上,我需要保留这种通用格式,但是myFunction有太多的参数要传递给GeneralFunction。所以我连接如下:
function myFunction(a, b, c, d) {
//Lots of code then
var param3 = c + "," + d;
GeneralFunction('id1', 'id2', a, b, param3);
}
然后我分解 param3 并处理 php 文件中的 c 和 d,GeneralFunction 将 param3 传递给该文件。这工作正常。
但是,我的问题如下...以下代码是否始终可以接受?我想我会通过将myFunction重写为来节省一个步骤:
function myFunction(a, b, c, d) {
//Lots of code then
GeneralFunction('id1', 'id2', a, b, c + "," + d);
}
c 和 d 在传递给 GeneralFunction 时连接起来。尽管这按预期工作,并且我使用的在线lint js检查器(http://www.javascriptlint.com/online_lint.php)没有检测到任何错误,但连接(或执行任何类型的操作,算术,连接等)并传递参数 - 同时 - 一个普遍接受的协议?
我在谷歌搜索中没有找到太多,在我看来,仅仅因为它工作过一次并不意味着它总是会起作用!
执行任何类型的操作(算术、串联等)并同时传递参数是否是普遍接受的协议?
是的,完全可以接受。实际上,只有普通变量传递给函数的情况非常罕见,大多数情况下,参数由任意表达式组成。请注意,它们不会"同时"发生,而是从左到右计算参数,然后将它们的结果值传递给函数。
<html>
<head>
<title></title>
</head>
<script>
function fun1(a,b,c,d)
{
alert(a+" "+b+" "+c+" "+d);
var demo=c+","+d;
fun2(a,b,demo);
}
function fun2(a,b,d)
{
alert(a+" "+b+" "+d);
}
</script>
<body>
<a href="javascript:void(0)" onclick="fun1(1,2,3,4)">Call</a>
</body>
</html>
如果","(逗号)在串联中不起作用,请使用 # 或其他符号。
老实说,这不是很可取。 不仅代码本身看起来相当不卫生,而且您将丢失额外参数的类型信息。 例如,如果c
和d
分别是bool
和number
:
var c = true,
d = 3;
var combined = c + ',' + d; // "true,3"
combined.split(','); // ["true", "3"]
请注意,您现在有两个字符串("true"
和 "3"
),而不是您的初始值。
还有其他问题。 例如,如果 c
或 d
是带有逗号的字符串,则最终会在另一端得到意想不到的结果:
var c = 'hello,world',
d = 'foo,bar';
var combined = c + ',' + d; // "hello,world,foo,bar"
combined.split(','); // ["hello", "world", "foo", "bar"]
在这一点上,无法分辨哪些"零件"最初来自c
,哪些来自d
。 所以现在你必须引入一些逗号的转义......呸。
理想的解决方案是简单地更改严格的 4 参数要求。 但是,如果这是不可能的,我建议在数组中传递额外的变量:
function myFunction(a, b, c, d) {
//Lots of code then
GeneralFunction('id1', 'id2', a, b, [c, d]);
}
使用此方法,您将不会丢失类型信息,并且可以更轻松地检索另一端的值。
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- 是JavaScript中曾经使用过的@字符
- 曾经在Javascript中可调用的函数
- Javascript window.print 适用于 IE 和 FF,但不适用于 Chrome(在旧版本中曾经如此)
- Javascript曾经繁荣
- IE7: javascript画布代码曾经在IE7中工作,现在不能了.这两次修订之间发生了什么导致了这种情况
- 这个javascript连接对我来说曾经工作过,但这总是可以接受的javascript吗?