【问题标题】:if Not undefined and indexOf ('foo') do somethingif Not undefined 和 indexOf ('foo') 做某事
【发布时间】:2012-04-17 01:14:58
【问题描述】:

所以我试图调用 where if not undefined and index is foo 所以我使用:

if (typeof(getdata(js, 'box1')) != "undefined" 
&& (getdata(js, 'box1')).indexOf('foo') >= 0) {
      // Do something
   }

这很好,但我不想调用 getdata 两次。有没有办法说如果 getdatanot undefined 并且 indexOf 是 foo 然后做一些事情,而不调用 getdata() 函数两次?

【问题讨论】:

  • 为什么要检查函数的返回值是否未定义?
  • 该函数从本地存储中获取值,因此有时如果用户清除其缓存,它会返回未定义。如果你不调用它,你会得到一个错误
  • IMO,你最好在函数中捕获它并返回 null。

标签: javascript jquery undefined indexof typeof


【解决方案1】:

替代方案:

if (/foo/.test(getdata(js, "box1"))) {
    // do something
}

虽然这可以让您摆脱一次检查,但在这样一个简单的测试中涉及正则表达式可能会令人不快:)

最好使用局部变量来存储函数调用的结果:

var data = getdata(js, "box1");

if (data && data.indexOf("foo") ==! -1) {
    // do something
}

还要注意typeof 是运算符而不是函数:

typeof something // instead of typeof(something)

【讨论】:

  • 我可以去吗:“如果 index.of foo,否则如果未定义,请执行此操作”。因为在错误上,它似乎没有从 indexOf 传递。
【解决方案2】:

你试过了吗

var data = getdata(js, 'box1');
if(typeof(data) != 'undefined' && data.indexOf('foo') >= 0) {

}

【讨论】:

  • 虽然我对不同的盒子有很多相同的功能,但它可以工作。所以我需要为每个函数设置一个变量?我问是否有更简单、代码更少的解决方案
  • 你能在盒子上放一个类吗?然后您可以简单地按类获取所有框并将它们推入一个数组并在数组上循环。
【解决方案3】:

如果值未定义或为空,则可以读取值的 indexOf 或空字符串。

if ( (getdata(js, 'box1') || '').indexOf('foo') !=-1) {
      // Do something
   }

希望你的函数只返回一个字符串,未定义或 null。

【讨论】:

  • 希望它不会返回字符串 '0'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 2015-12-15
相关资源
最近更新 更多