这个javascript连接对我来说曾经工作过,但这总是可以接受的javascript吗?

This javascript concatenation worked once for me, but is this always acceptable javascript?

本文关键字:javascript 曾经 对我来说 连接 工作 这个      更新时间:2023-09-26

在我的网站的一个函数(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>

如果","(逗号)在串联中不起作用,请使用 # 或其他符号。

老实说,这不是很可取。 不仅代码本身看起来相当不卫生,而且您将丢失额外参数的类型信息。 例如,如果cd分别是boolnumber

var c = true,
    d = 3;
var combined = c + ',' + d; // "true,3"
combined.split(','); // ["true", "3"]

请注意,您现在有两个字符串("true""3" ),而不是您的初始值。

还有其他问题。 例如,如果 cd 是带有逗号的字符串,则最终会在另一端得到意想不到的结果:

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]);
}

使用此方法,您将不会丢失类型信息,并且可以更轻松地检索另一端的值。