Javascript 编译多个hash.location

Javascript 编译多个hash.location,javascript,jquery,Javascript,Jquery,您是否有任何建议,可以在短脚本中编译多个窗口.location.hash?我这样问是因为我现在好像在重复杂凑 这是我的密码: $(window).on('hashchange load',function() { if(window.location.hash && window.location.hash == '#home') { console.log('home load'); } else if(window.location.hash

您是否有任何建议,可以在短脚本中编译多个
窗口.location.hash
?我这样问是因为我现在好像在重复杂凑

这是我的密码:

$(window).on('hashchange load',function()
{
    if(window.location.hash && window.location.hash == '#home') {
        console.log('home load');
    } else if(window.location.hash && window.location.hash == '#about') {
        console.log('about load');
    } else if(window.location.hash && window.location.hash == '#contact') {
        console.log('contact load');
    }
});

要缩短代码,我们没有多少办法。为了让它更好地运行,有一些调整。首先,您可以将
window.location.hash
值检查移动到其自身的条件以保存它。然后可以检查每个值:

$(window).on('hashchange load', function() {
  if (!window.location.hash)
    return;

  if (window.location.hash == '#home') {
    console.log('home load');
  } else if (window.location.hash == '#about') {
    console.log('about load'); 
  } else if (window.location.hash == '#contact') {
    console.log('contact load');
  }
}); 
要进一步扩展此功能以使逻辑更具可扩展性,您可以将要在对象中的这些哈希更改下执行的函数存储在对象中,由哈希值本身设置关键字,如下所示:

$(window).on('hashchange load', function() {
  var hash = window.location.hash;
  if (hash && functions.hasOwnProperty(hash))
      functions[hash]();
}); 

var functions = {
  '#home': function() {
    console.log('home load');
  },
  '#about': function() {
    console.log('about load');
  },
  '#contact': function() {
    console.log('contact load');
  }
}

虽然这种方法在技术上并不“更短”,但它的可扩展性要高得多。

请注意,无需每次都验证哈希值

在性能方面,最好保存一个新的哈希引用,如

let hash = this.location.hash;
和每次访问哈希相比,location.hash更便宜

$(window).on('hashchange load',function() {  
    // this validation for existence of hash can be done only once
    let hash = this.location.hash;

    if(!hash) {
        return;
    }

    if(hash == '#home') { 
        console.log('home load');
    } else if(hash == '#about') {
        console.log('about load');
    }
});

您的描述非常模糊,但考虑到当前代码,可以通过获取
window.location.hash
的值、删除hashtag(即
#
)并将
加载
附加到该字符串来缩短描述

请参见下面的演示

$(窗口).on('hashchange-load',function()){
if(window.location.hash){
var hashValue=window.location.hash.replace('#','');
log(hashValue+load');
}
});


这与这里的主题无关,更适合代码工作。不过,我的建议是,它们都会检查
window.location.hash
-为什么不为其设置一个if语句,然后为值设置一个开关(例如
if(window.location.hash){//switch statement here}
)我喜欢函数方面的东西——使用.substr来获取
之后的所有内容会更好吗?只是为了更好的阅读目的……当然是可能的,尽管这是一个更具风格的选择。