[英]array.splice not working
我想删除数组元素,但是在使用拼接时出现错误,
我使用以下函数将myAra用作全局变量,但是在控制台中,它给我一个错误,TypeError:myAra.splice不是函数
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);
}
}
在调用splice
时, myAra
是一个String
而不是一个Array
。 它具有元素的值。
这是一个很好的例子,说明为什么全局变量是EVIL ,请确保var myAra = Array()
变量声明为数组(严重): 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]
作为额外的好处,它也需要较少的键入操作
替换以下内容:
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);
}
注意 - splice
更改实际的数组,这就是循环失败的原因。 希望能帮助到你。
您直接将字符串值分配给myAra,以便它将其转换为字符串..typeOf myAra。 使用myAra [0] = $(“#” + textAreaId).val(); ...因为javascript是一种松散耦合的语言
在第一行中,您使用var myAra = Array()
,但是jQuery val()
函数返回一个字符串。
编辑:另外,我认为在JS中创建数组的首选方法是var myArray = []
,而不使用var myArray = new Array()
表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.