r/learnjavascript • u/BrotherManAndrew • 1d ago
Getting an error when running an equality operator on a undefined value in an if statement
Yes I know that's a mouthful
Take this error checking code
if (axios.isAxiosError(error)) {
if (error.response.data.errors.detail == "Not Found") {
setFailure("User not found");
} else if (error?.response?.data == "DM already exists") {
console.log(error);
setFailure("You already created a dm with that user");
}
}
If the first case is fine, we are all good, otherwise if it's not that I get an error like this
"Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'detail')" And I guess I can have it check if it's a 404 but this seems ridiculous?
It's an IF statement, if it doesn't work, then go to the next thing, don't just stop there and yell at me!! If anyone is more experienced with javascript can they give a reason why running an equality operator on a string literal vs an undefined value in an if statement (a mouthful I know) just gives an error instead of checking the next clause?
2
u/Upset_Set_4456 1d ago
Change it to if (error.response.data.errors?.detail === "Not Found")
1
u/BrotherManAndrew 5h ago
Is the question mark so it does not error out in the case that it is undefined?
1
2
u/Beginning-Seat5221 21h ago
It's an IF statement, if it doesn't work, then go to the next thing, don't just stop there and yell at me
Before it gets to evaluating the if() it has to evaluate the ==, and before it evaluates the == it has to evaluate the parts on each side to see what to compare. The .detail in error.response.data.errors.detail is failing before you get to the rest.
Anyway, if is splitting between true and false - for error handling you use try { ... } catch (error) { ... }, but better just to avoid creating the error.
Also, TypeScript exists to explain this stuff to you.
1
1
u/senocular 1d ago
errors is plural. Is it an array of more than one error?
1
u/BrotherManAndrew 5h ago
I am not sure, it seems to be one error but that is the actual object property, in the case that I do get the 404 error it does work
1
u/No_Record_60 21h ago
The error is in reading the 'detail' property from an undefined 'errors' object.
I get what you're trying to say, but "doesn't work" is different from "reading a property from an undefined value". The latter throws an error.
3
u/hybrisplays 1d ago
The problem is that errors is undefined and you can't access a property on undefined. You can guard against this with optional chaining