Javascript 丢弃空错误

Javascript 丢弃空错误,javascript,null,Javascript,Null,在下面的代码中,如果用户在函数的参数中输入null,我想扔掉一个错误 function addSomething(array) { array=array.slice(); if(array === null) { throw Error('Thrown away') } array.push('nah man'); return array; }; let myArray = [1, 2]; addSomething(my

在下面的代码中,如果用户在函数的参数中输入null,我想扔掉一个错误

function addSomething(array) {
    array=array.slice();
    if(array === null) {
    throw Error('Thrown away')
    }
    array.push('nah man');
    return array;
    };
    let myArray = [1, 2];
    addSomething(myArray);
    //=> [1, 2, 'nah man']
    addSomething(myArray);
    //=> [1, 2, 'nah man']
但是当我试图调用函数addSomething(null)时,我总是在console.log中出现这个错误

VM2829:6未捕获类型错误:无法读取null的属性“push”
在某处(:6:11)
时间:1:1
无法读取null的属性“push”?什么?他们为什么连在一起?我想做的就是扔掉一个错误。我做错了什么?
请注意,我需要保留array=array.slice()部分,以便保持函数的纯净。提前谢谢

在对
数组
函数参数执行任何操作之前,需要检查
null
,例如:

function addSomething(array) {
  if (!array) throw Error('Thrown away');
  array = array.slice();
  array.push('nah man');
  return array;
};

最好检查它是否实际上是可以使用的数组,但在使用任何其他数组方法(如slice或push)之前先检查它

function addSomething(array) {
    if(!Array.isArray(array)){
       throw Error('Not an array');
    }
    array=array.slice();
    ...
}

原因是您在尝试使用数组后检查它是否为null

您需要将代码更改为以下内容:

function addSomething(array) {
    //First check if array is null
    if(array === null) {
        throw Error('Thrown away')
    }
    //If this gets executed it means that the array is not null
    array=array.slice();
    array.push('nah man');
    return array;
};
不过有一点值得注意:


<代码>代码>数组=数组SLICE()/代码>的意思是什么?这意味着你将一个拷贝<代码>数组 > <代码>数组< /COD>它自己。考虑在<代码> SLICE()中使用索引(<代码)> /p>在调用ARRAY之前,你应该做你的防御(数组==null)。当我运行你的代码时,这正是我所期望的。嘿,伙计,非常感谢你的帮助,但是“索引”是什么意思?@CodeSamurai它意味着索引。检查这个:
function addSomething(array) {
    //First check if array is null
    if(array === null) {
        throw Error('Thrown away')
    }
    //If this gets executed it means that the array is not null
    array=array.slice();
    array.push('nah man');
    return array;
};