我想从变量中提取值。如果它是一个数组,我想要第一个元素,如果没有,我想要该变量的值。该值为float
,但我想知道哪些在性能,对非浮动的可移植性方面更好,当然还有短代码和代码可读性
我想用
value = variable[0] || variable
简短而美观,是否有任何警告正在使用它?
或者我能做到,
value = ([].concat(variable))[0]
This SO question表示这对性能不利。
然后,当然,我可以通过几种不同的方式检查variable
是否是一个数组,这也在上面的问题中提到过。如果第一个不好的话,还有更好的方法吗?
答案 0 :(得分:2)
您的value = variable[0] || variable
将有效,并且可靠地运作。从技术上讲,如果variable
是一个数字原语,那么JS引擎在那时要做的就是将它提升为一个对象,然后在该对象上查找0
属性,但是你知道它赢了没有,那没关系。
唯一可能失败的情况是variable
是null
或undefined
,因为这些都不能被提升为对象,因此表达式将抛出。如果您对此没问题,那么您可以使用它。不过,我会评论它,因为它很奇怪。
如果您需要针对null
和undefined
进行辩护,您可以使用== 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;