扔掉一个空错误

时间:2017-10-15 17:18:34

标签: 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(myArray);
    //=> [1, 2, 'nah man']
    addSomething(myArray);
    //=> [1, 2, 'nah man']

但是当我尝试调用函数addSomething(null)时,我总是在console.log中结束这个错误。

VM2829:6 Uncaught TypeError: Cannot read property 'push' of null
        at addSomething (<anonymous>:6:11)
        at <anonymous>:1:1

无法读取属性&#39;推送&#39;是吗?什么?为什么他们甚至相互联系?我想做的就是抛弃一个错误。我究竟做错了什么? 请注意,我需要保留array = array.slice()部分,以便保持函数纯。提前谢谢!

3 个答案:

答案 0 :(得分:0)

在对signalAll()函数参数执行任何操作之前,您需要检查null,如:

array

答案 1 :(得分:0)

最好检查它是否实际上是一个数组而不是你可以使用Array.isArray(),但在使用任何其他数组方法(如slice或push

)之前执行此操作
function addSomething(array) {
    if(!Array.isArray(array)){
       throw Error('Not an array');
    }
    array=array.slice();
    ...
}

答案 2 :(得分:0)

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

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

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;
};

但需注意一点:

array = array.slice()有什么意义?这意味着您将自己的array副本分配给array。使用slice()

中的索引来考虑