0

我有一个 JavaScript 函数:

function doSomething(arg) {
    var array = arg.split(',');
    // etc...
}

arg使用 jQuery 的.data('myId')函数填充。

通常,myId包含一个逗号分隔的整数列表,并且代码效果很好。但是,如果myId只包含一个整数,则代码将失败并出现错误

对象不支持属性或方法“拆分”

是否有一种紧凑、稳健的方法来创建数组,而不包括if处理一个整数或空字符串的边界条件的语句?

4

3 回答 3

2

attr将返回一个字符串,而data将尝试解析该值并返回一个具有“正确”类型的对象。

foo.attr('data-myId');  //pass this instead

if没有虽然,你无法绕过识别空字符串。您要么需要检查它,要么需要检查具有单个空字符串元素的数组。

于 2013-02-25T01:25:51.090 回答
1

你有两个不相关的问题。

第一个是针对空字符串的情况:Split 将返回一个带有空字符串的单元素数组。只需检查并补偿。

var array;
if (arg == "") array = [];

如果有一个整数,我相信你不是从 中得到一个字符串.data(),而是一个实际的整数;所以首先将其转换为字符串:

else array = String(arg).split(',');

或者,您可以避免使用 jQuery 魔法,直接访问属性 - 所有data()属性都只是带有data-前缀的属性。

于 2013-02-25T01:25:35.960 回答
1

.data将尝试根据其内容猜测值的类型,因此它变成了一个数字。您可以使用.attr,如果它作为属性可用,它总是返回一个字符串。或者,转换为字符串:

('' + arg).split(',')
//or
String(arg).split(',')

我实际上不确定是否首选。

另请注意,''.split(',')返回['']或具有空字符串元素的数组。你可以解决这个问题.filter(function (elem) { return elem !== ''; })

另一种可能的替代方法是dataset在元素本身上使用。

于 2013-02-25T01:27:17.617 回答