How to define the $0^0$?
This question will probably be closed as a duplicate, but here is the way I used to explain it to my students:
Since $x^0=1$ for all non-zero $x$, we would like to define $0^0$ to be 1. but ...
since $0^x = 0$ for all positive $x$, we would like to define $0^0$ to be 0.
The end result is that we can't have all the "rules" of indices playing nicely with each other if we decide to chose one of the above options, it might be better if we decided that $0^0$ should just be left as "undefined".
In set theory, where everything is a set, $0$ is represented by the empty set. Exponentiation of sets $\alpha^\beta$, let's call them cardinalities and write $|\alpha|^{|\beta|}$, is defined to be the cardinality (number of elements) of all functions from $\beta \to \alpha$. If both $\alpha$ and $\beta$ are empty, then there is exactly one function $\varnothing \to \varnothing$, hence $0^0 = 1$.
Though this is just a convention, I like how it justifies $0^0 = 1$.
One way of looking at it is that there are two different exponentiation operators that are denoted $a^b$:
Discrete (algebraic): when $b$ is an integer. Then the exponentiation is multiple multiplication or division. This can be used in any group. This operator occurs in Taylor series, the binomial expansion, when calculating the size of the set $A^B$ given sizes of $A$ and $B$ etc. For this operator, $0^0=1$, or in general for any element $a$, $a^0$ is the multiplicative identity.
Continuous (analytic): when $b$ is real, and $a>0$. Then we define $a^b = \exp(b \ln a)$. Note that here $a$ must be positive. Here it is best to leave $0^0$ undefined, as otherwise the function will be discontinuous.
You can have several more variants. In a monoid, you can define exponentiation $a^n$ where $n$ is a nonnegative integer. In a semigroup, you can define exponentiation where $n$ is a positive integer. In complexes (or an algebraically closed field), you can define multi-valued $a^{p/q}$ for a rational exponent. Cardinals and ordinals have their own exponentiations. The "continuous" exponent can be extended to complex numbers: when $a>0$ then you can define $\exp(b \ln a)$. Yet another exponentiation on complex numbers is multi-valued $\exp(b \operatorname{Ln} a)$.
All those operations are different - they have different domains. Mathematicians are unusually sloppy about which exponentiation they are talking about and use context-dependent $a^b$. (Some programming languages have multiple exponentiation operators to deal with this problem.)