开发者问题收集

“无法读取 null 的属性‘match’”

2016-07-14
21006

我有该脚本:

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

var dynamicContent = getParameterByName('utm_term');

$(document).ready(function() {

if (dynamicContent.match(/buy/i)) {
    $('#buy').show();
}

else {
    $('#default-content').show();
}
});

当 URL 中有任何参数时,它工作正常,其他情况下工作正常,显示 #deafult-content。

问题是,当我有干净的 URL 而没有参数时,#default-content 不会显示,因为“无法读取 null 的属性‘match’”。

有什么想法可以解决这个问题吗?

1个回答

您对 !results 返回了 null ,因此您无法对其进行 match

请尝试合并两个检查并返回一个空字符串:-

function getParameterByName(name, url) {

  if (!url) 
    url = window.location.href;
  
  name = name.replace(/[\[\]]/g, "\\$&");
  var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
    results = regex.exec(url);
  
  if (!results || !results[2]) 
    return '';
  
  return decodeURIComponent(results[2].replace(/\+/g, " "));
}

var dynamicContent = getParameterByName('utm_term');

$(document).ready(function() {

  if (dynamicContent.match(/buy/i)) {
    $('#buy').show();
  } else {
    $('#default-content').show();
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p id="default-content" style="display:none;">test</p>
BenG
2016-07-14