我需要了解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));
}
&#13;
我是编程的新手,我开始使用javascript,所以如果我通过询问这个问题而显得愚蠢请原谅并通过解释帮助我...谢谢
答案 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;
}
}