BUG: Add fillna at the beginning of _where not to fill NA. #60729
- [X] closes #60729  (Replace xxxx with the GitHub issue number)
- [X] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [X] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [X] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

Added fillna at the beginning of _where so that we can fill pd.NA.
Since this is my first PR, please correct me if I'm mistaken. Thanks!
FYI, it seems this has already been discussed at https://github.com/pandas-dev/pandas/pull/53124#issue-1698836456 Many thanks for your feedback, @rhshadrach .  All the changes you requested are now reflected. Could you review the changes? Hi @mroeschke , Thanks for the suggestion! But it seems some tests fail when we changed the code `np.array()` to `extract_array(cond, extract_numpy=True)`. I'll revert the code for now and see if there is still room for improvement. Hi @mroeschke ,
I've found that `where()` raises when `cond` is a list which is subset of `{False, True, np.nan}`.
For example:

```python
>>> import pandas as pd
>>> import numpy as np
>>> series = pd.Series([None,1,2,None,3,4,None])
>>> series.where([np.nan, False, False, np.nan, True, True, np.nan], -99)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\sangg\Desktop\pandas-sanggon-from-code\pandas\pandas\core\generic.py", line 10032, in where
    return self._where(cond, other, inplace=inplace, axis=axis, level=level)
  File "C:\Users\sangg\Desktop\pandas-sanggon-from-code\pandas\pandas\core\generic.py", line 9732, in _where
    raise TypeError(msg.format(dtype=cond.dtype))
TypeError: Boolean array expected for the condition, not object
```
I think `where()` raises because `np.asanyarray()` returns a numpy array  with `float64` type, and should work without an error since it does work when `cond` has `pd.NA` in it.
Do I need to open another issue or fix this here?
My suggestion is basically to specify dtype at `L9715` as below.

```python
    def _where(

...

        if isinstance(cond, NDFrame):

...

        else:
            if not hasattr(cond, "shape"):
                dt = None
                if set(cond).issubset({True, False, np.nan}):
                    dt = bool
                cond = np.asanyarray(cond, dtype=dt)
            if cond.shape != self.shape:
                raise ValueError("Array conditional must be same shape as self")
```