4

我有以下 javascript 代码:

function changeButtonState(targetSelector, action, iconClass) {
    var $target = $(targetSelector);
    var $targetSpan = $(targetSelector + ' span');
    $targetSpan.removeClass('sprite-blank').addClass(iconClass);
}

我怎样才能使它$targetSpan.removeClass(..).addClass只有iconClass在调用函数时具有值时才起作用。我想我感到困惑的是我是否检查它是否已定义或者我是否检查它的长度是否为 0 或更多?

4

6 回答 6

4

只需使用 if 语句:

if (iconClass){}

或者,typeof

if (typeof iconClass != 'undefined') {}
于 2013-02-05T00:02:07.880 回答
1
if (typeof(iconClass)=='undefined') {
  // nothing was passed
}
于 2013-02-05T00:01:55.353 回答
1

LIVE DEMO

if ( 'undefined' != typeof iconClass ) {  /**/  }
于 2013-02-05T00:03:41.953 回答
1

您的用例必须假设 iconClass 是一个字符串。在这种情况下,我会建议第一个 if 条件。第二个可能太严格了,它通常只在调用函数的人实际上没有传递第三个参数或传递未定义的情况下使用。但是如果调用者传递 null 或空字符串,第一个 if 条件也会捕获这些条件。它是最容易编写的,并且在 Javascript 中很常见,只需简单检查即可if (variable) { },因为它会捕获更多内容并且非常易于阅读和编写。

if (iconClass) {
   // Executes if iconClass is not null, not undefined, not 0, and not empty string
}
if (typeof iconClass != 'undefined') {
   // WILL execute if iconClass is null, 0, empty string
   // Only will not execute if iconClass is undefined!
}
于 2013-02-05T00:12:29.540 回答
0

据推测,iconClass应该是一个字符串(一个类名),所以你应该测试它是否是一个字符串:

if (typeof iconClass == 'string') 

或者您可以使用正则表达式同时测试它是否是有效的类名:

if (/^[a-z][a-z0-9]*$/i.test(iconClass))

正则表达式可能需要更多字符来测试(至少连字符),我将把它留给你。CSS 类名中哪些字符有效?可能会有所帮助。

于 2013-02-05T01:02:58.977 回答
-1
if(iconClass.length > 0){
    $targetSpan.removeClass('sprite-blank').addClass(iconClass);
}
于 2013-02-05T00:01:32.377 回答