如何将这个C#代码段转换为Javascript

时间:2015-07-02 05:24:32

标签: javascript c#

我需要了解Javascript如何处理新的字符串对象,就像下面的C#代码一样

var UpperBound = 14;
for (int i = 0; i < UpperBound; i++) {
    Console.WriteLine(new string('*', i));
  }
Console.ReadLine();

这就是我在Javascript中的表现:

&#13;
&#13;
var upperBound = 14;
for(var i=0;i<upperBound;i++){
  console.log(new string("*", i));
}
&#13;
&#13;
&#13;

我是编程的新手,我开始使用javascript,所以如果我通过询问这个问题而显得愚蠢请原谅并通过解释帮助我...谢谢

3 个答案:

答案 0 :(得分:2)

除了这部分你的代码很好:

new string("*", i)

JS的语法不正确。你需要以另一种方式创建字符串。

这就是你应该如何在JavaScript中创建一个重复字符的字符串 我应该注意String.prototype.repeat是ECMAScript 6的一部分。

var upperBound = 14;
for(var i=0;i<upperBound;i++)
{
    document.write('*'.repeat(i));
    document.write("<br/>");
}

在此之前,您应该使用另一种方法,例如在for循环中手动创建此字符串,如下所示:

function repeatString(ch, t)
{
  var res = '';
  for (var i = 0; i < t; i++) res += ch;
  return res;
}

var upperBound = 14;
for(var i=0;i<upperBound;i++)
{
  document.write(repeatString('*', i));
  document.write("<br/>");
}

还有其他一些方法和黑客。您可以在上面阅读this StackOverflow topic

我建议你在尝试编写之前阅读一本关于JavaScript的好教程 C#和JavaScript在所有方面都是非常不同的语言。你不能只是采用C#代码,改变语法并认为它会起作用。

答案 1 :(得分:2)

JS中没有new string("*", i)的等价物。你需要自己重复。

一个方便的黑客是Array(i + 1).join("*"),但它不是很有效我不认为,因为它需要构建数组。最好的方法可能是循环和连接。

答案 2 :(得分:1)

我想结合两个解决方案,所以(最好的选择是使用es6-shim)这里是一个polyfill(借鉴here

Configuration

用法:

if (!String.prototype.repeat) {
  String.prototype.repeat = function(count) {
    'use strict';
    if (this == null) {
      throw new TypeError('can\'t convert ' + this + ' to object');
    }
    var str = '' + this;
    count = +count;
    if (count != count) {
      count = 0;
    }
    if (count < 0) {
      throw new RangeError('repeat count must be non-negative');
    }
    if (count == Infinity) {
      throw new RangeError('repeat count must be less than infinity');
    }
    count = Math.floor(count);
    if (str.length == 0 || count == 0) {
      return '';
    }
    // Ensuring count is a 31-bit integer allows us to heavily optimize the
    // main part. But anyway, most current (August 2014) browsers can't handle
    // strings 1 << 28 chars or longer, so:
    if (str.length * count >= 1 << 28) {
      throw new RangeError('repeat count must not overflow maximum string size');
    }
    var rpt = '';
    for (;;) {
      if ((count & 1) == 1) {
        rpt += str;
      }
      count >>>= 1;
      if (count == 0) {
        break;
      }
      str += str;
    }
    return rpt;
  }
}