2012-06-28 121 views
0

从昨天开始的问题的后续类型。我有一个哈希值改变值,需要隔离下半年。下面的代码工作,但如果没有值,则需要返回false,因为我稍后使用if (val.length){},并且它当前始终为真。所以,以证明:JavaScript隔离散列值

var hash = window.location.hash, 
    page = hash.split('=')[0], 
    val = hash.substr(hash.indexOf('=') + 1); 

    console.log(hash,page,val); 

localhost/#work 
console returns: #work, #work, #work 

localhost/#work=misery 
console returns: #work=misery, #work, misery 

我想它返回:

localhost/#work 
console returns: #work, #work, (no value for val) 

localhost/#work=misery 
console returns: #work=misery, #work, misery 

感谢您的帮助!

回答

0

只要使用相同的方法,你对页:

var hash = window.location.hash, 
    values = hash.split("="), 
    page = values[0], 
    val = values[1]; 

console.log(hash,page,val); 

localhost/#work 
console returns: #work, #work, undefined 

localhost/#work=misery 
console returns: #work, #work, misery 

附: 我会建议你添加JavaScript标签,也许删除jQuery的,因为这是一个与jQuery完全无关的问题。

+0

好一点。我的头太远了,不再是人。所以这个就像你解释的那样工作,返回undefined,但是现在当它未定义时,val.length在我的控制台中抛出一个错误(Uncaught TypeError:无法读取未定义的属性'length')。我应该使用替代方法.length()?我试图确定的是:如果除了哈希还有一个值,那么等等。 – technopeasant

+0

因为'val'是未定义的,所以你可以简单地拥有:'if(val){/ *做某事* /}'。注意,这将适用于所有的虚假值,即使你有'localhost /#work ='(即'等于'符号但没有值),这意味着你的情况。 – ZER0

+0

请注意,如果您有一个场景需要在给定值时执行不同的操作,但是这个场景是空的,并且根本没有给出该值,这也很有用。 – ZER0

0

只需添加一些逻辑,以检查是否有一个值

var hash = window.location.hash, 
    values = hash.split("="), 
    page = values[0], 
    val = values[1]?values[1]:'';//you can use if (val.length){} to check if ther is a value 

console.log(hash,page,val);