【问题标题】:How to append a string value during assignment in Javascript?如何在Javascript中赋值期间附加字符串值?
【发布时间】:2011-01-26 07:15:35
【问题描述】:

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

我想要做的是,每次我将字符串传递给函数addstring 时,都会添加文本字段的值,例如 +=

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

}

我该怎么做?

【问题讨论】:

  • 你的意思是给元素值分配一个字符串引用,这样当字符串改变时值就改变?
  • 我不清楚您的实际问题涉及通过引用传递什么。
  • 当一个问题不清楚时会发生这种情况,你会得到很多混合的答案,只是猜测所问问题的真正含义。
  • 嗯..问题更多的是关于字符串连接,是吗?我对“引用变量”感到困惑。 :P
  • “通过引用传递变量”与提供的示例无关

标签: javascript variable-assignment


【解决方案1】:

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

此链接提供了一个很好的细分和一些解决方法-Passing by Value or reference

【讨论】:

    【解决方案2】:

    如果它是对输入文本字段的引用,那么您可以使用 value 属性

    function addstring(string)
    {
        document.getElementById("string").value += string.value;
    
    }
    

    value

    【讨论】:

      【解决方案3】:

      += 工作正常。

      var str = "stack";
      str += "overflow";
      
      console.log(str); //alert(str); Use firebug!!
      

      堆栈溢出

      【讨论】:

      • @streetparade:显示您要添加的代码以及您遇到的错误。 (在 firefox 上使用 firebug(add-on) 或在 Chrome 上使用开发者工具 (ctrl+shift+j))
      • hmm.. 这对我有用 document.getElementById("string").value +=string;但这不起作用 var sent = document.getElementById("string").value;发送+ = 字符串;
      • @streetparade: 是的,因为您所做的是将文本框内容的值检索到sending,然后将您的字符串添加到该值——此时它什么都没有与文本框有关。
      • 记住 a += b 是 a = a + b 的简写,它不是 array.push(foo) 的字符串版本,它会改变数组本身。
      【解决方案4】:

      您的代码示例可以很好地与+= 配合使用;下面的完整示例。这表明您遇到的问题出在其他地方。

      <!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>
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 你为什么不使用+=?为什么要多次查找元素?
        • 非常感谢您的快速回答,不幸的是 += 不起作用,我不知道为什么
        • @streetparade:是的 (pastie.org/864704)。这表明问题出在其他地方。
        【解决方案6】:

        您可以先将对象转换为 JSON(注意循环引用),然后再将其解析回来,从而克隆对象。像这样:

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

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

        【讨论】:

          【解决方案7】:

          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
          

          【讨论】:

          • 使用引用!= 通过引用传递。我们所说的真正的引用传递是什么意思,例如在 C++ 中,您可以将变量传递给函数(不是创建一些“引用”对象;而是直接传递变量),并且函数可以分配给该变量(而不是对其调用某些方法;分配)就像变量一样被分配到原始范围内。这在 JavaScript 中是不可能的。
          猜你喜欢
          • 1970-01-01
          • 2010-12-17
          • 2022-01-04
          • 2019-11-07
          • 2021-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多