无效的字符串长度/分配大小重载 JavaScript

Posted

技术标签:

【中文标题】无效的字符串长度/分配大小重载 JavaScript【英文标题】:Invalid String Length/Allocation Size Overload JavaScript 【发布时间】:2014-10-24 13:40:11 【问题描述】:

我有一系列复选框,检查它们是否已被选中,如果有,则将字符串添加到数组中。然后我循环遍历字符串数组并将数组中的字符串添加到以逗号分隔的新字符串中。不幸的是,这总是会导致错误。在 Chrome 中,控制台显示“无效的字符串长度”。在 Firefox 中,错误显示为“分配大小溢出”。

javascript

// Compile List of Interests
interests = new Array();
if ( $("input[name=interestRoofing]").is(':checked') == true ) interests.push("Roofing");
if ( $("input[name=interestSiding]").is(':checked') == true ) interests.push("Siding");
if ( $("input[name=interestGutters]").is(':checked') == true ) interests.push("Gutters");
if ( $("input[name=interestWindows]").is(':checked') == true ) interests.push("Windows");
if ( $("input[name=interestPaint]").is(':checked') == true ) interests.push("Exterior Paint");
interestsString = "";
for ( i = 0; i < interests.length; i++ )  // "Invalid String Length" in Chrome on This Line
    interestsString = interestsString + interests[i]; // "Allocation Size Overload" in Firefox on This Line
    if ( i < interests.length - 2 ) interestsString += ", ";
    if ( i = interests.length - 2 ) interestsString += "and ";

html

<p>Interested In:</p>
<p><input type="checkbox" name="interestRoofing" value="">Roofing</p>
<p><input type="checkbox" name="interestSiding" value="">Siding</p>
<p><input type="checkbox" name="interestGutters" value="">Gutters</p>
<p><input type="checkbox" name="interestWindows" value="">Windows</p>
<p><input type="checkbox" name="interestPaint" value="">Exterior Paint</p>

我确信当我看到它时,无论出现什么问题都会打我的脸,但我整天都在处理这个问题,还没有想出解决方案。显然这里有一些我没有看到的东西。任何帮助将非常感激。奇怪的是,Internet Explorer 中的控制台并没有吐出任何东西,就好像没有出现任何问题一样。 我可以通过在 for 循环检查的开头添加一个 if 语句来消除 Chrome 的 Invalid String Length 错误,以确保数组的长度不为 0。但是,Firefox 中的错误仍然存​​在,所以这一定不是解决方案.

【问题讨论】:

我会尝试interests = [] 而不是new Array() 代码似乎是正确的。它可能与您的其余代码有关。请检查您的其余代码。 应该始终使用var声明变量 由于某种原因, [] 而不是 new Array() 摆脱了错误。但是 new Array() 是正确的语法,不是吗?不过谢谢。感谢您的帮助。 使用数组字面量,[] 实际上快一点。所有现代 JS VM 都理解 [] 表示“新数组字面量”。当您使用“new Array()”时,它需要几个额外的周期,因为 Array 构造函数已重载。简而言之——你应该使用 [],而不是 new Array()。我在 here 上找到了一个很好的旧答案。 【参考方案1】:
if ( i = interests.length - 2 ) interestsString += "and ";

你在这里做作业。你可能是想比较。

【讨论】:

是的。我也错过了那个。没有==,这是一个无限循环。 天哪,是的,它有效!正如预期的那样,它确实击中了我的脸。将来当我遇到这个错误时,我会知道它是什么。我几乎希望我早点发布这个问题,但真的不急。在此代码到期之前,我还有几周的时间。我真的很感谢你的帮助,你不知道。谢谢,谢谢,谢谢! 我很高兴能提供帮助。请记住标记答案或支持那些有助于解决您的问题的答案。 (即使不是我的!)保重!

以上是关于无效的字符串长度/分配大小重载 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript的内存

Python 如何将长度不同的字符串尽量均匀地分配到N个文件中?每一行的字符串作为整体,不能打散。

如何根据字符串长度和标签大小调整标签的字体大小

在 C++ 中重载比较运算符会导致“无效运算符<”

JavaScrip对象

具有 DSNAME 长度的 IBM Window Services (DWS) CSRIDAC 无效