题目:删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组
方法一:slice();

function curtail(arr) {
var newarr=[];
    newarr=arr.slice(1,arr.length);
    return newarr;
}

方法二:push进新数组

function curtail(arr) {
    var ar = new Array();
    for(var i=1;i<arr.length;i++){
        ar.push(arr[i])
    }
    return ar
}

方法三:shift()是删除第一个元素

function curtail(arr) {
let a1=arr.slice(0)
a1.shift()
    return a1
}

slice和splice辨析
使用 slice() 截取数组

slice() 方法与 splice() 方法功能相近,但是它仅能够截取数组中指定区段的元素,并返回这个子数组。该方法包含两个参数,分别指定截取子数组的起始和结束位置的下标。

  1. 第 1 个参数指定起始下标位置,包括该值指定的元素;第 2 个参数指定结束位置,不包括指定的元素。
  2. 该方法的参数可以自由设置。如果不传递参数,则不会执行任何操作;如果仅指定一个参数,则表示从该参数值指定的下标位置开始,截取到数组的尾部所有元素。
  3. 当参数为负值时,表示按从右到左的顺序进行定位,即倒数定位法,而不再按正数顺序定位(从左到右),但取值顺序依然是从左到右。
    如果起始下标值大于或等于结束下标值,将不执行任何操作。
  4. 当起始参数值大于或等于 length 属性值时,将不会执行任何操作,返回空数组。而如果第二个参数值大于 length 属性值时,将被视为 length属性值。

使用 splice() 截取数组
splice() 方法可以添加元素、删除元素,也可以截取数组片段。删除元素时,将返回被删除的数组片段,因此可以使用 splice() 方法截取数组片段。

由于 splice() 方法的功能多,参数复杂,使用时应该注意下面几个问题。

  1. splice() 方法的参数是可选的。如果不给它传递参数,则该方法不执行任何操作。如果给它传递一个参数,则该方法仅执行删除操作,参数值指定删除元素的起始下标,(包含该下标元素),splice() 方法将删除后面所有元素。
    如果指定两个参数,则第 2 个参数值表示要删除元素的个数。
    如果指定三个或多个参数,则第 3 个以及后面所有参数都被视为插入的元素。
    如果不执行删除操作,第 2 个参数值应该设置为 0,但是不能够空缺,否则该方法无效。
  2. splice() 方法的删除和插入操作是同时进行的,且是在原数组基础上执行操作。插入的元素将填充被删除元素的位置,并根据插入元素个数适当调整插入点位置。而不是在删除数组之后重新计算插入点的位置。
  3. splice() 方法执行的返回值是被删除的子数组。
    如果没有删除元素,则返回的是一个空数组。
  4. 当第 1 个参数值大于 length 属性值时,被视为在数组尾部执行操作,因此删除无效,但是可以在尾部插入多个指定元素。
  5. 参数取负值问题。如果第 1 个参数为负值,则按绝对值从数组右侧开始向左侧定位。如果第 2 个参数为负值,则被视为 0。

shift()
移除数组的第一项,返回移除项。
push()
在数组的末尾添加一个或多个元素 返回数组新长度。