diff --git a/lib/internal/util/parse_args/parse_args.js b/lib/internal/util/parse_args/parse_args.js index db7dca4cdaf09a..0c0ed4b347fd5a 100644 --- a/lib/internal/util/parse_args/parse_args.js +++ b/lib/internal/util/parse_args/parse_args.js @@ -331,8 +331,8 @@ const parseArgs = (config = kEmptyObject) => { validateBoolean(multipleOption, `options.${longOption}.multiple`); } - if (ObjectHasOwn(optionConfig, 'default')) { - const defaultValue = objectGetOwn(optionConfig, 'default'); + const defaultValue = objectGetOwn(optionConfig, 'default'); + if (defaultValue !== undefined) { if (optionType === 'string' && !multipleOption) { validateString(defaultValue, `options.${longOption}.default`); } else if (optionType === 'string' && multipleOption) { diff --git a/test/parallel/test-parse-args.mjs b/test/parallel/test-parse-args.mjs index be9ef8b039f61d..ae39869cd36101 100644 --- a/test/parallel/test-parse-args.mjs +++ b/test/parallel/test-parse-args.mjs @@ -833,6 +833,19 @@ test('default must be a boolean when option type is boolean', () => { ); }); +test('default must accept undefined value', () => { + const args = []; + const options = { alpha: { type: 'boolean', default: undefined } }; + const result = parseArgs({ args, options }); + const expected = { + values: { + __proto__: null, + }, + positionals: [] + }; + assert.deepStrictEqual(result, expected); +}); + test('default must be a boolean array when option type is boolean and multiple', () => { const args = []; const options = { alpha: { type: 'boolean', multiple: true, default: 'not an array' } };