Javascript array.splice不工作
我想删除数组元素,但在使用拼接时出现错误 我正在使用下面的函数 以myAra作为全局var, 但在控制台中,它给了我一个错误,TypeError:myAra.splice不是一个函数Javascript array.splice不工作,javascript,jquery,html,textarea,Javascript,Jquery,Html,Textarea,我想删除数组元素,但在使用拼接时出现错误 我正在使用下面的函数 以myAra作为全局var, 但在控制台中,它给了我一个错误,TypeError:myAra.splice不是一个函数 var myAra = Array(); function charCounts(e,textAreaId) { myAra = $("#"+textAreaId).val(); var countNewLines = stringOccurrences(myAra, "\n"); if
var myAra = Array();
function charCounts(e,textAreaId)
{
myAra = $("#"+textAreaId).val();
var countNewLines = stringOccurrences(myAra, "\n");
if(myAra.length>75)
{
for (var i = 75; i >myAra.length; i++)
{
myAra.splice(i, 1);
}
$("#"+textAreaId).val(myAra);
}
}
myAra
在调用splice
时是一个字符串,而不是数组。它具有元素的值。您直接将字符串值分配给myAra,以便它将其转换为string..typeOf myAra。使用myAra[0]=$(“#”+textAreaId).val();。。。因为javascript是一种松散耦合的语言这是一个很好的例子,说明了为什么globals是邪恶的,当然你声明了一个数组(很糟糕):var myAra=array()
(我将在最后解释它的坏处),但稍后:
myAra = $("#"+textAreaId).val();//returns a string, variable is now a string, not an array
您已将一个字符串重新分配给数组,因此该变量现在引用一个字符串常量,并且不能用作数组(至少在X浏览器中不安全)
Array()
不好,为什么?首先,您要调用构造函数,但没有使用new
关键字。对于数组来说,这不是什么大问题(它将返回一个新的实例),但是当您开始定义自己的对象和构造函数时,您会发现自己在全局中处于非常重要的地位
另外,假设您需要一个数组,并将第一个元素初始化为int:var anArray=new array(2)
,您将不会得到这样的数组:anArray[0]==2
,您将得到anArray====[undefined,undefined]
。将其与var anArray('2')
-->['2']进行比较。考虑到JS是松散类型的,并且在初始化数组时经常使用变量,很难判断是否正在向构造函数传递数字字符串或数字
初始化数组的最佳方法是使用文字符号:[2,3,4]
,另外,在您使用的第一行var myAra=Array()
,它也需要更少的键入,但是jQueryval()
函数返回一个字符串
编辑:我还认为在JS中创建数组的首选方法是var myArray=[]
,而不是使用var myArray=new Array()
表达式。替换以下内容:
if(myAra.length>75)
{
for (var i = 75; i >myAra.length; i++)
{
myAra.splice(i, 1);
}
$("#"+textAreaId).val(myAra);
}
使用以下代码:
if(myAra.length>75)
{
var moreNum = myAra.length - 75;
myAra.splice(75, moreNum ); // remove all items after the 75th item
$("#"+textAreaId).val(myAra);
}
注意-拼接
更改实际阵列,这就是循环失败的原因。希望有帮助。您的循环永远不会执行:if条件和for条件永远都不会为true。您确定不只是想使用。substr(0,75)
?