3

如果将参数或充满属性的对象传递给函数,检查未定义的参数并为未定义的参数提供默认值很有用。

如果不使用像 jQuery 范围这样的库函数,那么执行这种分配默认值的最短代码是什么?

这是我能想到的最短的:

var test;
var output = (typeof test != "undefined") ? test : "Default";

在有人建议之前:

var test;
var output = test || "Default";

这不适用于 false、0 或 ""

4

5 回答 5

4

尝试这个:

var output = test != null ? test : "Default";

伊格:

null == undefined // true
null == null // true
null == 0 // false
null == "" //false
null == false // false
于 2012-12-14T17:22:07.573 回答
1

好的,所以如果“未定义”它是最长的类型值,那么检查对象存在的最短方法是

!(typeof console).charAt(8)

其中“控制台”是我们检查的对象。 .charAt(8)将返回空字符串 "" 如果 object 不是"undefined",则等于false 这是旧 IE 支持的安全方式。但是如果你只需要现代浏览器的支持,你可以只使用

if(!(typeof console)[8]) { doWork(); }

检查对象是否已定义。

于 2013-10-12T17:01:16.240 回答
1

https://github.com/jed/140bytes/wiki/Byte-saving-techniques是你的朋友:

var output = test===[]._ ? "Default" : test;

更短:

var output=test===[]._?"Default":test;

运算符和标记之间不需要空格。

于 2014-07-05T08:40:19.137 回答
1

在 ES2021 中,现在可以使用Nullish coalescing operator

用法:

const str = null ?? 'default string';
console.log(str);
// expected output: "default string"

const num = 0 ?? 42;
console.log(num);
// expected output: 0

const bool = false ?? true;
console.log(bool)
// expected output: false
于 2021-02-09T15:03:16.513 回答
0

你可以试试这个:

var output = if(test === undefined) ? test: "Default";

如果您知道您永远不会传递0, false, 或""作为有效参数,您可以将其简化为:

var output = if(test) ? test : "Default";

然而,这涉及到 JavaScript 中神秘的“真假”部分。通过让===您使用类型比较进行相等性检查。

希望这可以帮助。

于 2012-12-14T17:26:28.720 回答