Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript array.splice不工作_Javascript_Jquery_Html_Textarea - Fatal编程技术网

Javascript array.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

我想删除数组元素,但在使用拼接时出现错误

我正在使用下面的函数 以myAra作为全局var, 但在控制台中,它给了我一个错误,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);
    }
}

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()
,它也需要更少的键入,但是jQuery
val()
函数返回一个字符串

编辑:我还认为在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)