javascript - 如果子字符串为空,如何跳过并避免控制台中出现错误?

标签 javascript jquery

获取子字符串:

var hash = document.location.hash;

// create an object to act like a dictionary to store each value indexed by its key
var partDic = {};

// remove the leading "#" and split into parts
var parts = hash.substring(1).split('&');

// If you just want the first value, whatever it is, use this.
// But be aware it's a URL so can be set to anything in any order, so this makes little sense
// var string = parts[0].split('=')[1];

// build the dictionary from each part
$.each(parts, function(i, v) {
  // do the "=" split now
  var arr = v.split("=");

  // decode to turn "%5B" back into "[" etc
  var key = decodeURIComponent(arr[0]);
  var value = decodeURIComponent(arr[1]);

  // store in our "dictionary" object
  partDic[key] = value;
});

// Set a delay to wait for content to fully load
setTimeout( function() {
  var ag = partDic["comboFilters[Agencies]"].substring(1);
  $('.Agency .dropdown-toggle').html(ag).append(' <span class="caret"></span>');
  var cl = partDic["comboFilters[Clients]"].substring(1);
  $('.Client .dropdown-toggle').html(cl).append(' <span class="caret"></span>');
  var yr = partDic["comboFilters[Years]"].substring(1).slice(1);
  $('.Year .dropdown-toggle').html(yr).append(' <span class="caret"></span>');
}, 1000);

但是如果没有子字符串,我得到:

Uncaught TypeError: Cannot read property 'substring' of undefined

Suggested answer in another question

var cl = (partDic["comboFilters[Clients]"] && partDic["comboFilters[Clients]"].length>0)?partDic["comboFilters[Clients]"].substring(1):'';

但我仍然遇到同样的错误

最佳答案

您可以采取防御措施,在使用 key 之前检查它是否存在:

  if("comboFilters[Agencies]" in partDic) {
       var ag = partDic["comboFilters[Agencies]"].substring(1);
       $('.Agency .dropdown-toggle').html(ag).append(' <span class="caret"></span>');
  }

或者只是用空字符串来保护它:

var ag = (partDic["comboFilters[Agencies]"] || "").substring(1);

关于javascript - 如果子字符串为空,如何跳过并避免控制台中出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27981760/

相关文章:

javascript - webdriver.io 如何使用 node.js 从 DOM 中删除元素

Javascript 隐藏/显示部分在重置时不起作用

jquery - 如何在 Twitter 之类的文本区域上添加发光边框?

jquery - 单击和双击事件触发

javascript - MVC5 : Refresh partial view on button click?

javascript - Angular 将字符串传递给函数

javascript - 我可以在未注册的组件上构建 Vue.js 失败吗?

javascript - 如何使用 jQuery/Javascript 模拟单击​​在新选项卡/窗口中打开的链接?

jquery - 为每个从 jquery 中排除一个类

jquery - 通过 jQuery 构建选择列表