在下面的代码中,如果用户在函数的参数中放入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()部分,以便保持函数纯。提前谢谢!
答案 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()