【问题标题】:Javascript string prototype method splitJavascript字符串原型方法拆分
【发布时间】:2016-06-08 06:35:43
【问题描述】:

我创建了一个名为“show_alphabet”的函数,并分配给一个名为“str”的变量,这是一个由大写字母组成的字符串。 我使用 String 对象的原型属性添加了一个名为“sendArray”的方法,并为这个 (sendArray) 分配了一个返回 split() 方法的函数。 split() 方法将拆分字母字符串。 我还有一个名为“arr”的变量,并为“str”分配了 sendArray() 方法。 我有一个按钮,单击该按钮将运行 show_alphabet 函数。 该函数应该将“str”中的字母显示为一个数组,其中冒号后跟每个字母,并将每个字母放在单独的行上。 例如:

答:

乙:

C: …

但是,每当我单击按钮时,什么都不会显示。

这是我的代码:

<form>
  <button type = "submit" value = "submit" onclick = "show_alphabet()">submit </button>
</form>
<script type="text/javascript">
  function show_alphabet() {
    var str = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    String.prototype.sendArray() = function() {
      return this.split("");
    }
    for (i=0; i<str.length-1; i++) {
      var arr = str.sendArray(":" + "<br />");
      document.write(arr[i]);
    }
  } 
</script>

【问题讨论】:

  • 您在定义函数之前调用了sendArray()for 循环似乎不完整? arr 定义在哪里?
  • 1.在此处删除 String.prototype.sendArray() 括号。 2、sendArray不带任何参数
  • @TheReason 爱你的名字。
  • 1) 调用sendArray() 时添加了一个参数,但原型函数sendArray() 没有参数,2) 应该是String.prototype.sendArray =,不带括号
  • 您已将按钮放入表单中。默认情况下,它是一个提交按钮,因此它会提交表单并重新加载页面,因此即使函数运行,您也不会看到结果。摆脱表单或制作按钮type="button"

标签: javascript arrays string


【解决方案1】:

我无法忍受这些可怕的答案,所以我不得不提供一个正确的答案。

<button type="button" value="submit" onclick="show_alphabet()">submit</button>

<div id="dynamic"></div>

<script type="text/javascript">
  function show_alphabet() {
    var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    document.querySelector('#dynamic').innerHtml = str.split('').join(':<br/>');
  } 
</script>

回顾一些问题:

  • 在 DOM 加载后,您不能 document.write。这样做通常只会让你感到沮丧。相反,如上所述,调整 innerHtml 或使用其他十几种方法来更改 DOM。
  • 将按钮设置为 type="button" 而不是 type="submit"。这样做会阻止实际形式或隐含形式的执行。
  • 您的 sendArray 函数没有任何意义......但大多数答案也没有。只需制作字符串并将其设置在某处,这里就不需要迭代。

【讨论】:

  • 很好的答案。只是一个挑剔-通过使用String.join()Z之后将没有:&lt;br/&gt;
  • 您可以在页面加载后使用document.write,但结果是它会替换页面的全部内容。
  • @RobG - 当然。但是你有没有遇到过这样的情况,在加载的 DOM 上的 document.write 实际上对某些东西有用?我记得 1995 年 Netscape 2 出来时,我觉得它很整洁。
  • 关键是它可以做到,而不是作为一般策略这样做是否明智。
  • @RobG - 这当然是真的......如果我们对什么是“好”答案存在分歧,我很好。代码的实用性在我的范式中很高,但我可以理解“它有效”是否对其他人来说足够好。
【解决方案2】:

好吧,我没想到会看到这么多不完整的答案。那么我们来总结一下

  1. sendArray 原型函数的定义不能有括号
  2. 最重要的是,您不需要任何 sendArray 原型函数(除非作业练习明确要求它)
  3. 您正在向 sendArray 传递一个未在函数内部使用的参数
  4. 按钮上的操作submit 将提交表单并刷新页面,因此您不会看到代码的任何其他结果
  5. 您必须了解,按下按钮将使用 document.write,它会(在 DOM 加载后)始终擦除之前的文档,包括您的脚本

这样试试

<button type="button" onclick="show_alphabet()">Show alphabet</button>
<div id="output"></div>
<script type="text/javascript">
  function show_alphabet() {
    var str = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    var arr = str.split("");
    document.getElementById("output").innerHTML = arr.join(":<br/>");
  } 
</script>

【讨论】:

  • 感谢上帝。为什么最简单的问题得到最差的答案?
  • @RobG - 老实说,这个答案再好不过了。由于 document.write,它仍然永远无法工作。
  • 你是绝对正确的。自从我使用 document.write 以来已经很久了,所以我实际上忘记了它实际上是多么无用:-)
  • @JohnGreen——它的“工作原理”在于它将字母表写入页面,并注意它会首先删除页面的全部内容,因此涵盖了基础。
  • @RobG - 是的,这些规定是在我的回答和 cmets 之后做出的编辑版本中添加的。
【解决方案3】:

sendArray = function() 而不是 sendArray() = function()

【讨论】:

  • 这只是不到一半的答案
  • 是的,但他应该从那开始。抱歉没看到你的评论
猜你喜欢
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多