繁体   English   中英

在函数内部 >>> TypeError:无法读取未定义的属性“长度”

[英]Inside the function >>> TypeError: Cannot read property 'length' of undefined

这是根据给定要求验证信用卡号的代码。 我以一种适合主函数中所有检查函数的方式编写了代码,并且它在这种方式下运行良好。 但是我想稍微整理一下我的代码并使其更好地练习,所以现在的代码是这样的。 我想我还有一部分功能我还不能完全理解。 你能告诉我我的错误是什么吗? 任何输入表示赞赏。

 'use strict'; let cardNumLength = getLength(); let isNumOnly = /^\\d+$/.test(cardNum); let isLastDigitEven = isEndEven(); let isSumValid = isSumGreaterThan16(); let allDigitsNotSame = allEqualCheck(cardNum); let errorArray = []; function cardNumValidator(cardNum) { if (cardNumLength, isNumOnly, isLastDigitEven, isSumValid, allDigitsNotSame) { console.log(`"${cardNum}" is a valid credit card number.`); return } return errorArray; } // getLength function to check if the number has 16 digits function getLength(cardNum) { //console.log(cardNum.length); //debugging if (cardNum.length == 16) { return true; } return false; } // to check the final digit if its even function isEndEven(cardNum) { if (cardNum[cardNum.length - 1] % 2 == 0) { return true; } return false; } // to check if the sum of the digits are greater than 16 function isSumGreaterThan16(cardNum) { let intCardNum = parseInt(cardNum); let sum = 0; for (let i = 0; i < cardNum.length; i++) { sum = parseInt(sum) + parseInt(cardNum[i]); //parseInt() converts string into number } if (sum > 16) { return true; } return false; } function allEqualCheck(cardNum) { if (cardNum.split('').every(char => char === cardNum[0])) { return false; } return true; } /* using switch statement to final validation regarding to the requirements those checked seperately by previous inner functions*/ function isValidError() { if (cardNumLength === false) { errorArray.push('Number must be 16 digits!'); } else if (isNumOnly === false) { errorArray.push('Invalid characters!'); } else if (isLastDigitEven === false) { errorArray.push('Odd final number!'); } else if (isSumValid === false) { errorArray.push('Sum less than 16!'); } else if (allDigitsNotSame === false) { errorArray.push('All numbers can not be the same!'); } return errorArray; } cardNumValidator('9999777788880000'); //valid number example cardNumValidator('6666666666661666'); //valid number example cardNumValidator('a92332119c011112'); //Invalid number example cardNumValidator('4444444444444444'); //Invalid number example cardNumValidator('1111111111111110'); //Invalid number example cardNumValidator('6666666666666661'); //Invalid number example

在第一行中,您没有将任何参数传递给getLength函数。

我像你一样使用全局变量,但根据 cardNum 设置它们。 cardNumValidator 函数现在将始终返回一个错误数组,当没有错误时,该数组的长度为零。 当有多个错误时,errorArray 将包含所有错误,而不仅仅是一个。

 'use strict'; let cardNumLength = false; let isNumOnly = false; let isLastDigitEven = false; let isSumValid = false; let allDigitsNotSame = false; let errorArray = []; function cardNumValidator(cardNum) { cardNumLength = getLength(cardNum); isNumOnly = /^\\d+$/.test(cardNum); isLastDigitEven = isEndEven(cardNum); isSumValid = isSumGreaterThan16(cardNum); allDigitsNotSame = allEqualCheck(cardNum); errorArray = []; isValidError(); if (errorArray.length == 0) { console.log(`"${cardNum}" is a valid credit card number.`); } else { console.log(`"${cardNum}" is an invalid credit card number.`); console.dir(errorArray); } return errorArray; } // getLength function to check if the number has 16 digits function getLength(cardNum) { //console.log(cardNum.length); //debugging if (cardNum.length == 16) { return true; } return false; } // to check the final digit if its even function isEndEven(cardNum) { if (cardNum[cardNum.length - 1] % 2 == 0) { return true; } return false; } // to check if the sum of the digits are greater than 16 function isSumGreaterThan16(cardNum) { let intCardNum = parseInt(cardNum); let sum = 0; for (let i = 0; i < cardNum.length; i++) { sum = parseInt(sum) + parseInt(cardNum[i]); //parseInt() converts string into number } if (sum > 16) { return true; } return false; } function allEqualCheck(cardNum) { if (cardNum.split('').every(char => char === cardNum[0])) { return false; } return true; } /* using switch statement to final validation regarding to the requirements those checked seperately by previous inner functions*/ function isValidError() { if (cardNumLength === false) { errorArray.push('Number must be 16 digits!'); } if (isNumOnly === false) { errorArray.push('Invalid characters!'); } if (isLastDigitEven === false) { errorArray.push('Odd final number!'); } if (isSumValid === false) { errorArray.push('Sum less than 16!'); } if (allDigitsNotSame === false) { errorArray.push('All numbers can not be the same!'); } return errorArray; } cardNumValidator('9999777788880000'); //valid number example cardNumValidator('6666666666661666'); //valid number example cardNumValidator('a92332119c011112'); //Invalid number example cardNumValidator('4444444444444444'); //Invalid number example cardNumValidator('1111111111111110'); //Invalid number example cardNumValidator('6666666666666661'); //Invalid number example

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM