Đối với những người quan tâm đến phiên bản có thể sử dụng lại của giải pháp Andy E. Tôi đã thực hiện một hàm đơn giản để lấy trạng thái băm thực tế, dưới dạng giá trị bitwise.
/**
* Checks if the location hash is given, empty or not-empty.
*
* @param {String} [href] Url to match against, if not given use the current one
* @returns {Number} An integer to compare with bitwise-operator & (AND)
*/
function getHashState(href) {
var frag = (href || window.location.href).split('#');
return frag.length == 1 ? 1 : !frag[1].length ? 2 : 4;
}
Bạn có thể so sánh giá trị trả lại dễ dàng với bitwise AND-operator (&
).
if (getHashState() & 1); // no hash
if (getHashState() & 2); // empty hash
if (getHashState() & 4); // no empty hash
Có cách viết nó như sau: if (băm không trống) {} elseif (không có băm) {} else {// empty hash}? – bobylapointe
@bobylapointe: Chắc chắn, mặc dù nó không tạo ra nhiều khác biệt vì chỉ có một khối sẽ được thực thi mỗi lần. Xem chỉnh sửa của tôi. –