### Describe the bug

Since upgrading to `axios@1.4.0`, our usage of `cacheable-lookup` stopped working. I have identified that [this change](https://github.com/axios/axios/issues/5339) is the cause.

The reason is because the `lookup` option is now [explicitly included](https://github.com/axios/axios/pull/5339/files#diff-586c04c24608b86a074073c5514cc195be5c4c87ddb56da233f6d998ada4159fR394) in the options object, set to the `undefined` value. This is propagated through all the way to the HTTP agent. The `cacheable-lookup` library naively checks for the [presence of the property](https://github.com/szmarczak/cacheable-lookup/blob/master/source/index.mjs#L411), rather than if it is set to a usable or expected value, thus causing the problem.

While I believe the fix should be made in `cacheable-lookup`, however we are unable to upgrade beyond v6 because sindresorhus decided to force everyone to use ESM, and we cannot migrate our whole codebase to support ESM just like that 😓 I imagine others are in the same boat.

I would really appreciate if `axios` could change the explicit inclusion of `lookup` to an "if present" style (e.g. `...(lookup ? { lookup } : {}),`) to resolve this problem. Of course, I understand if you would prefer not to.

### To Reproduce

- Install `axios@1.4.0` and witness cached DNS is not used.
- Downgrade to `1.3.6` and witness it is used.

See code snipped for a test.

### Code snippet

```js
import https from 'https';

import { test, jest, expect } from '@jest/globals';
import axios from 'axios';
import CacheableLookup from 'cacheable-lookup';

test('cached dns', async () => {
  const cachedDns = new CacheableLookup();
  cachedDns.install(https.globalAgent);

  jest.spyOn(cachedDns, 'lookupAsync');

  const res = await axios.get('https://example.com');
  expect(res.status).toBe(200);
  expect(cachedDns.lookupAsync).toHaveBeenCalled();
});
```


### Expected behavior

Should always use cached DNS when installed.

### Axios Version

1.4.0

### Adapter Version

HTTP

### Browser

N/A

### Browser Version

N/A

### Node.js Version

18.12

### OS

All?

### Additional Library Versions

_No response_

### Additional context/Screenshots

_No response_
lib/adapters/http.js
} else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {
      headers.set(data.getHeaders());
      if (!headers.hasContentLength()) {
        try {
          const knownLength = await util.promisify(data.getLength).call(data);
          Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);
          
        } catch (e) {
        }
      }
    } else if (utils.isBlob(data)) {
      data.size && headers.setContentType(data.type || 'application/octet-stream');
      headers.setContentLength(data.size || 0);
      data = stream.Readable.from(readBlob(data));
    } else if (data && !utils.isStream(data)) {
      if (Buffer.isBuffer(data)) {
        
      } else if (utils.isArrayBuffer(data)) {
        data = Buffer.from(new Uint8Array(data));
      } else if (utils.isString(data)) {
        data = Buffer.from(data, 'utf-8');
      } else {
        return reject(new AxiosError(
          'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',
          AxiosError.ERR_BAD_REQUEST,
          config
        ));
      }
      
      headers.setContentLength(data.length, false);