如何在JavaScript中进行赋值时追加字符串?

5

嘿,我不知道是否可能,但我想通过引用在js中设置给定变量。

我的目的是,每次将字符串传递给addstring函数时,文本字段的值都会像+=一样添加。

function addstring(string)
{
    document.getElementById("string").value = string; // its a textfield

}

我该如何做到这一点?


5
你的意思是将一个字符串引用赋给元素值,从而使得当字符串更改时,元素值也会发生变化吗? - o.k.w
6
我不太清楚你实际问题中涉及哪些关于传递引用的内容。 - T.J. Crowder
5
当问题不清晰时,会出现很多混乱的答案,这些答案只是在猜测问题真正含义而已。 - Andy E
1
嗯...这个问题更多是关于字符串拼接,对吧?我被“引用变量”的概念困扰了。:P - o.k.w
“按引用传递变量”与提供的示例无关。 - Yura Omelchuk
7个回答

9

Javascript不支持通过引用传递参数。

该链接提供了很好的细分和一些解决方法- 按值或引用传递


2
如果它是对输入文本字段的引用,则可以使用value属性。
function addstring(string)
{
    document.getElementById("string").value += string.value;

}

请参见 value 属性。


1

您的代码示例使用+=将正常工作;下面是完整的示例。这表明您遇到的问题在其他地方。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Test Page</title>
<style type='text/css'>
body {
    font-family: sans-serif;
}
</style>
<script type='text/javascript'>
function addstring(string)
{
    document.getElementById('string').value += string;
}
</script>
</head>
<body><div>
<input type='text' id='string' value=''>
<br><input type='button' value='One' onClick="addstring('one');">
<input type='button' value='Two'     onClick="addstring('two');">
<input type='button' value='Three'   onClick="addstring('three');">
</div></body>
</html>

1

+= 运行良好。

var str = "stack";
str += "overflow";

console.log(str); //alert(str); Use firebug!!

stackoverflow


@streetparade:展示你正在添加的代码以及你遇到的错误。(使用火狐浏览器上的Firebug(插件),或者如果在Chrome上,则使用开发者工具(ctrl+shift+j)) - N 1.1
嗯..这对我起作用了 document.getElementById("string").value += string;但是这个没起作用var sending = document.getElementById("string").value; sending += string; - streetparade
1
@streetparade:没错,因为你已经把文本框的内容值获取到了 sending 中,然后在该值上添加了你的字符串 -- 而这时候与文本框就没有任何关系了。 - T.J. Crowder
记住,a += b是a = a + b的简写,它不是array.push(foo)的字符串版本,后者会改变数组本身。 - Douglas

0

您可以通过先将对象转换为JSON(注意循环引用)然后再解析它来克隆对象。就像这样:

function clone(obj) {
  return JSON.parse(JSON.stringify(obj));
}

这里使用浏览器内置的JSON例程(比使用外部资源更安全和更快)。如果您必须拥有向后兼容性,可以从JSON.org下载核心JSON例程。


0

document.getElementById("string").value = document.getElementById("string").value + string;

document.getElementById("string").value = document.getElementById("string").value + string;


3
为什么不使用 += 呢?为什么要多次查找元素? - T.J. Crowder
非常感谢您的快速回复,不幸的是 += 没有起作用,我不知道为什么。 - streetparade
1
@streetparade:是的,它确实可以(http://pastie.org/864704)。这表明问题出在其他地方。 - T.J. Crowder

-1

Javascript不支持通过引用传递参数 - 这是不正确的

实际上,它是可以的。原型使得创建真正的引用成为可能,包括字符串在内的所有类型的javascript对象。

所谓真正的引用是指:

  • 对于通过引用传递的变量或对象所做的更改会反映在实际传递的变量上
  • 所有引用同一变量的地方都能看到这种变化
  • 知道引用的每个人都可以更改被引用的变量

要创建一个真正的变量引用:

  • 创建一个构造函数
  • 在构造函数上原型化您的引用变量
  • 不要在构造函数内部声明与相同名称的变量!
  • 创建一个change()函数,该函数更改原型变量或直接进行更改
  • 可选:在您的构造函数内创建一个change()函数引用,该引用在创建时设置为ChangeRef()函数

以这种方式进行的更改将被所有其他TestRef()对象看到并且可以更改。

function TestRef(s) {
    this.string = 'Own test-string: ' + s;
    this.change = ChangeRef;
}
function ChangeRef(s) {
    TestRef.prototype.refStr = s;
    return TestRef.prototype.refStr;
}
r = 'RefStr';
TestRef.prototype.refStr = r; // PROTOTYPE => 'RefStr', copy of r

s = new TestRef('s'); // Obj.string = Own test-string: s, Obj.refStr = RefStr
o = new TestRef('o'); // Obj.string = Own test-string: o, Obj.refStr = RefStr
ChangeRef('ChangedStr');  // Change referenced string!
TestRef.prototype.refStr; // => ChangedStr, referenced string changed
r; // => RefStr, original string intact
x = new TestRef('x'); // Obj.string = Own test-string: x, Obj.refStr = ChangedStr. New sees changed string
s; // => Obj.string = Own test-string: s, Obj.refStr = ChangedStr. Old sees changed string
o; // => Obj.string = Own test-string: o, Obj.refStr = ChangedStr. Old sees changed string
s.change('Changed by local function');
x; // => Obj.string = Own test-string: o, Obj.refStr = Changed by local function

4
使用引用并不等同于按引用传递。所谓真正的按引用传递,比如在C++中,是指你可以将一个变量直接传入函数(而非创建某个“引用”对象),函数可以像在原始作用域中一样对该变量进行赋值(而非调用某个方法进行赋值)。但这在JavaScript中不可能实现。 - user102008

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接