如何创建将给定字符串与第二个参数连接的函数?

时间:2019-05-23 16:05:15

标签: javascript string function concatenation string-concatenation


我正在尝试创建一个可以与任何字符串重用的函数,将字符串作为第一个参数传递给它,并在将其与运算符连接时,我正在尝试创建一个基本的计算器,并且正在使用几个字符串,这些字符串为运算符显示不同的值(例如,用“ x”代替“ *”)。

let evalString = '';
let displayString = '';
let currentNumber = '5';

function concOperator(str, operator) {
  str += currentNumber + ' ' + operator + ' ';
}

concOperator(evalString, '*');
concOperator(displayString, 'x');

console.log(evalString);
console.log(evalString);

因此,我希望在调用函数后evalString为“ 5 *”,而displayString为“ 5 x”,但是它将返回空字符串。怎么解决?

4 个答案:

答案 0 :(得分:1)

这是因为您没有在函数中返回任何内容,也没有将其分配给变量。实际上,strconcOperator函数的范围内。

一种解决方法:

let evalString = '';
let displayString = '';
let currentNumber = '5';

function concOperator(str, operator) {
    return `${str} ${currentNumber} ${operator} `;
}

evalString = concOperator(evalString, '*');
displayString = concOperator(displayString, 'x');

答案 1 :(得分:0)

JavaScript不会通过引用传递字符串。字符串和其他基元按值传递,这意味着在代码的第一个函数调用中,str是evalString的副本-修改str不会修改evalString。您需要返回串联的值,并将evalString分配给此结果。

(相关且重要的注意事项:Java语言中的对象与基元相反,使用共享调用。这意味着当对象作为函数参数传递时,该参数采用引用。换句话说,重新分配参数变量不会更改原始对象,但是修改参数的属性会影响原始对象。)

答案 2 :(得分:0)

我还将尝试将字符串附加到数组中,然后将数组连接到字符串中,例如:


let evalString = '';
let displayString = '';
let currentNumber = '5';

let test = []

function concOperator(data) {
  test = [...test, data]
}

concOperator('5');
concOperator('x');

concOperator('5');
concOperator('*');

console.log(evalString);
console.log(evalString);

console.log(test.join(' '))

我希望这会有所帮助。

答案 3 :(得分:0)

字符串在JavaScript中不可更改,str+=somethingstr=str+something的简写形式,其中右侧创建了一个全新的字符串,然后将其存储在局部变量{{1}中},而无需更改原始字符串(它们仍然可以访问,并且在外部不变)。
如果希望从外面看到结果,可以return

str

所以你的功能可能是

function test(a,b){
  console.log("before a,b:",a,b);
  a+=b;
  console.log("after a,b:",a,b);
  return a;
}

var x="x";
var y="y";
var z=test(x,y);
console.log("x,y,z:",x,y,z);

或者简单地

function concOperator(str, operator) {
  str += currentNumber + ' ' + operator + ' ';
  return str;
}

,在这两种情况下,您都必须将返回的字符串存储在外部(上面的function concOperator(str, operator) { return currentNumber + ' ' + operator + ' '; } 就是这种情况)。

或者,您也可以对物体做魔术:

z

因为对象(如第二个片段中的function test(a,b){ console.log("before a:",a); console.log("before b:",b); a.data+=b; console.log("after a:",a); console.log("after b:",b); } var x={data:"x"}; var y="y"; test(x,y); console.log("x has changed:",x);)是可变的。