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

how to convert this C# code snippet to Javascript

本文关键字:片段 转换 Javascript 代码      更新时间:2023-09-26

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

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

这就是我在Javascript中的做法:

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

我是一个编程新手,我从javascript开始,所以如果我问这个问题显得很愚蠢,请原谅并帮助我解释。。感谢

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

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

您的代码很好,除了以下部分:

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/>");
}

还有其他一些方法和技巧。你可以在上面阅读这个StackOverflow主题。

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

我想结合两种解决方案,所以(最好的选择是使用es6垫片)这里有一个polyfill(从这里借用)

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;
  }
}

用途:

var upperBound = 14;
for(var i=0;i<upperBound;i++){
    console.log("*".repeat(i));
}