我是javascript的新手。我正在做一个试图在javascript中从数组中删除第一个项目的任务。
方法一
function getFirst(arr, item) {
arr.push(item);
var removed = arr.shift();
return removed;
}
方法二
function getFirst2(arr, item) {
arr = arr.push(item);
var removed = arr.shift();
return removed;
}
我提出了这两个解决方案,但只接受方法一,方法二是错误的返回Uncaught TypeError:arr.shift不是函数()。
Uncaught TypeError的含义是什么,以及arr.shift不是函数但是它适用于方法一的状态是什么?
任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
由于getFirst2()
,您的功能arr = arr.push(item)
无效。
这里arr
实际上变成了一个数字,因为数组上的push方法返回the new length property of the object upon which the method was called
。
因此调用方法推送数字会引发TypeError。
答案 1 :(得分:0)
你的第一种方法没问题。但我要指出,您并不总是需要创建本地的fumpntion-scope变量。您的return
语句可以返回计算值。而不是
function getFirst(arr, item) {
arr.push(item);
var removed = arr.shift();
return removed;
}
我会去
function getFirst(arr, item) {
arr.push(item);
return arr.shift();
}
答案 2 :(得分:0)
您可以在数组上应用shift函数。在方法2中,arr不再是一个数组,因为我认为push方法返回数组的长度。这就是你得到一个typeError的原因。 在应用shift方法之前尝试打印arr以查看它是什么。
答案 3 :(得分:0)
Javascript有许多内置函数,它们附加到不同的数据类型。 Array类型具有附加到每个数组但不附加到其他非数组类型的函数push(), unshift(), shift()
等。
当您在任何不是数组的类型上使用这些Array函数时,您会收到Uncaught类型错误,因为Javascript解释器无法读取该类型的函数。
此行上的第二个函数:arr = arr.push(item);
,将arr
的值更改为数字,因为函数arr.push(item);
的返回值是一个数字(Int) 。因此,不再允许尝试在.shift()
上调用arr
,因为arr
不再是数组。