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

时间:2017-12-02 10:14:26

标签: javascript

  • 我编写了一个小函数,它接收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 个答案:

答案 0 :(得分:0)

您可以使用此代码:

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

答案 1 :(得分:0)

您需要考虑传递给函数的备用值和空值 - 您也可以忽略返回中的三元方程式,并简单地返回比较运算符的结果。

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