【问题标题】:Throwing away a null error丢弃空错误
【发布时间】:2018-03-27 05:39:33
【问题描述】:

在下面的代码中,如果用户将 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

无法读取 null 的属性“push”?什么?为什么他们甚至相互联系?我想做的就是扔掉一个错误。我究竟做错了什么? 请注意,我需要保留 array=array.slice() 部分,以便保持函数纯净。提前致谢!

【问题讨论】:

  • 你应该在调用 array.slice 之前做好防御 if (array === null)
  • 当我运行您的代码时,我得到“无法读取属性 'slice' of null”,这正是我所期望的。

标签: javascript null


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    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() 中使用索引

    【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 2018-03-17
      • 2016-11-28
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      相关资源
      最近更新 更多