我有一个JavaScript函数:
function doSomething(arg) {
var array = arg.split(',');
// etc...
}
arg
使用jQuery的.data('myId')
函数填充。
通常,myId
包含逗号分隔的整数列表,代码效果很好。但是,如果myId
仅包含一个整数,则代码将失败并显示错误
对象不支持属性或方法'split'
是否有一个紧凑,健壮的方法来创建数组而不包含if
语句来处理一个整数或空字符串的边界条件?
答案 0 :(得分:2)
attr
将返回一个字符串,而data
将尝试解析该值并返回一个具有“正确”类型的对象。
foo.attr('data-myId'); //pass this instead
但是,如果没有if
,您无法识别空字符串。您需要检查它,或者需要检查具有单个空字符串元素的数组。
答案 1 :(得分:1)
你有两个无关的问题。
第一个是空字符串的情况:Split将返回一个带有空字符串的单元素数组。只需检查并补偿。
var array;
if (arg == "") array = [];
如果有一个整数,我相信你没有从.data()
得到一个字符串,而是一个实际的整数;所以首先将其转换为字符串:
else array = String(arg).split(',');
或者,您可以避免使用jQuery魔法,并直接访问该属性 - 所有data()
属性都只是带有data-
前缀的属性。
答案 2 :(得分:1)
.data
将尝试根据其内容猜测值的类型,因此它将成为一个数字。您可以使用.attr
,如果它可用作属性,则始终返回一个字符串。或者,强制转换为字符串:
('' + arg).split(',')
//or
String(arg).split(',')
我实际上不确定是否首选。
另请注意''.split(',')
返回['']
或带有空字符串元素的数组。您可以使用.filter(function (elem) { return elem !== ''; })
另一种可能的替代方法是在元素本身上使用dataset
。