当函数的参数为“未定义”或“空”或“”(空字符串)时,如何设置函数参数的默认值?
Posted
技术标签:
【中文标题】当函数的参数为“未定义”或“空”或“”(空字符串)时,如何设置函数参数的默认值?【英文标题】:How to set default value of a parameter of a function when it is 'undefined' or 'null' or ''(empty string)? 【发布时间】:2021-12-16 23:42:27 【问题描述】:colorX 是我的某个函数的参数。
colorX = typeof colorX !== ('undefined' || 'null' || '') ? colorX : 'abc';
对于“未定义”,我将 abc 作为值。但是当我将 null 或 'null' 或空字符串作为参数输入传递时。我遇到了错误。
还有 null 和 'null' 的区别是什么?
【问题讨论】:
'null'
是一个字符串,而 null
实际上是 null
typeof … !== ('undefined' || 'null' || '')
没有任何意义。对于所有用途,它都等同于 typeof … !== 'undefined'
。
正如@Bergi 所说,OR 运算符不能正常工作,您必须明确说明所有比较:x == 'undefined' || x == ''
。您可以使用 .includes
: let ok = ['undefined', 'string']; console.log(ok.includes(typeof colorX))
缩短它。
【参考方案1】:
说明
null
与 'null'
当使用typeof
时,它需要该类型的字符串版本,例如'undefined'
、'function'
、'bigint'
等。但是,特别是对于 null
类型,它作为对象起作用:
console.log(typeof null); // expected output: object
console.log(typeof 'strExample'); // expected output: string
// We can return a boolean by doing so:
let variable = 10;
console.log(typeof variable === 'string'); // expected output: false
为什么可以在MDN找到解释:
在 javascript 的第一个实现中,JavaScript 值表示为类型标记和值。对象的类型标签是
0
。null
表示为 NULL 指针(在大多数平台中为0x00
)。因此,null
具有 0 作为类型标记,因此typeof
返回值"object"
。 (reference)提出了针对 ECMAScript 的修复(通过选择加入),但 was rejected。 这将导致
typeof null === 'null'
。
在任何其他情况下,'null'
、'undefined'
和 'string'
将被标识为字符串,因为它们被包围在 ''
中,这就是 @reyno 所指的。
查看typeof
here 的所有可接受值。
检查是否为空
// null will be identified as an "object" type; checking
// null with typeof is redundant as can be the same as null.
console.log(typeof null); // expected output: object
console.log(typeof ); // expected output: object
// so we can just do:
let colorX = null;
console.log(colorX === null); // expected output: true
结果代码
因为虚假值可以是以下任何一种:
除了
false
,可能的假表达式还有:null
、NaN
、0
、空字符串(""
)和undefined
。
MDN
我们可以这样做:
colorX = colorX || 'abc';
正如@ivar 声称的那样。
【讨论】:
我想检查除 0 之外的所有虚假值。在 1 种情况下,必须接受 0 作为参数。有没有办法让 0 例外? 我看到你已经通过 Corrl 的回答和 cmets 解决了这个问题;整个答案就是colorX = colorX || colorX === 0 ? colorX : 'abc';
【参考方案2】:
使用三元运算符,您可以将其简化为
colorX = colorX ? colorX : 'abc';
条件(三元)运算符语法是
condition ? exprIfTrue : exprIfFalse
并根据MDN 文档
...null、NaN、0、空字符串 ("") 和未定义。如果条件是其中任何一个,则条件表达式的结果将是执行表达式 exprIfFalse 的结果。
但或者甚至更短(如果您要检查所有“虚假”值),您不妨使用logical OR
colorX = colorX || 'abc';
既然您说要检查除 0 以外的所有虚假值,您可以将两者结合起来
let v = 0
v = v || v === 0 ? v : 'value'
console.log(v) // 0
注意
null, undefined, 0
带引号的只是变成包含没有“功能意义”的字符的字符串
【讨论】:
如果您要检查所有虚假值(而不仅仅是null
/undefined
/空字符串),您不妨简单地使用逻辑或。 colorX = colorX || 'abc'
我想检查除 0 以外的所有虚假值。在 1 种情况下,必须接受 0 作为参数。有没有办法让 0 例外?
@SrinivasNaik 我更新了答案
谢谢@Corrl。我试过这个colorX = colorX || 0
。没有更多的错误。但我觉得你的方法let v = 0 v = v || v === 0 ? v : 'value' console.log(v) // 0
更好。
@SrinivasNaik 只是 'colorX = colorX ||如果 colorX 是虚假的,0' 将始终为您提供 0,那么这就是您的“后备值”。 '颜色X = 颜色X ||颜色X === 0 ? colorX : 'fallback'' 如果它是 0,会给你 0 - 如果它是任何其他虚假值,如 undefined 或 null,你会得到'fallback value'以上是关于当函数的参数为“未定义”或“空”或“”(空字符串)时,如何设置函数参数的默认值?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据输入为字符串或未定义来创建返回字符串或未定义的打字稿函数?
IE10 d3.v3.js 错误:无法获取未定义或空引用的属性“原型”