调用 .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 语句中的第一个条件将检查
null
或
undefined
,如果它不为 null,则仅计算匹配项的
length
。
Ankit Agarwal
2017-12-02