从数组或单个值获取值

时间:2013-12-22 22:19:28

标签: javascript

我想从变量中提取值。如果它是一个数组,我想要第一个元素,如果没有,我想要该变量的值。该值为float,但我想知道哪些在性能对非浮动的可移植性方面更好,当然还有短代码代码可读性

我想用

value = variable[0] || variable

简短而美观,是否有任何警告正在使用它?

或者我能做到,

value = ([].concat(variable))[0]

This SO question表示这对性能不利。

然后,当然,我可以通过几种不同的方式检查variable是否是一个数组,这也在上面的问题中提到过。如果第一个不好的话,还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您的value = variable[0] || variable将有效,并且可靠地运作。从技术上讲,如果variable是一个数字原语,那么JS引擎在那时要做的就是将它提升为一个对象,然后在该对象上查找0属性,但是你知道它赢了没有,那没关系。

唯一可能失败的情况是variablenullundefined,因为这些都不能被提升为对象,因此表达式将抛出。如果您对此没问题,那么您可以使用它。不过,我会评论它,因为它很奇怪。

如果您需要针对nullundefined进行辩护,您可以使用== null将过滤掉这两者的事实:

value = variable == null ? undefined : variable[0] || variable;

我也会评论。 : - )

答案 1 :(得分:1)

有了这个

value = variable[0] || variable

如果数组的第一个元素为false,则可能会遇到麻烦。例如:

var arr = [false, 1, 2, 3];
value = variable[0] || variable; // <--- value is [false, 1, 2, 3] 

所以,我会接受这个:

var value = arr instanceof Array ? arr[0] : arr;

如果您不确定数组是否已满,则应再添加一次检查。

var value = arr instanceof Array && arr.length > 0 ? arr[0] : arr;