开发者问题收集

调用 .length 时无法读取 null 的属性“length”

2017-12-02
2919
  • 我编写了一个小函数,它接受 x 和 o。如果字符串中每个字母的数量相同,则该函数返回 true

  • 我的问题是,我试图让这个测试通过 code wars ,但测试返回:

    TypeError:无法读取 XO 处为 null 的属性“length”

为什么会这样?我该怎么做才能解决这个问题?

    function XO(str) {
      x = str.match(/[x]/gi).length
      y = str.match(/[o]/gi).length



       return x == y ? true : false 
    }
2个回答

您需要考虑传递给函数的替代值和空值 - 您也可以忽略返回中的三元方程并仅返回比较运算符的结果。

console.log(XO('x')); // returns false since there is 1 'x' and 0 'o'
console.log(XO('o')); // returns false since there is 0 'x' and 1 'o'
console.log(XO('abc')); // returns true since there is 0 'x' and 0 'o'

function XO(str) {
 if(str) {
    x = str.match(/[x]/gi) || [];
    y = str.match(/[o]/gi) || [];
    return x.length == y.length;
  } else {
    return false;
  }
}
gavgrif
2017-12-02

您可以使用此代码:

function XO(str) {
      var x = str.match(/[x]/gi) && str.match(/[x]/gi).length;
      var y = str.match(/[o]/gi) && str.match(/[o]/gi).length;
      return x == y;
}

AND 语句中的第一个条件将检查 nullundefined ,如果它不为 null,则仅计算匹配项的 length

Ankit Agarwal
2017-12-02