Hash和history有什么区别
形式上区别
hash模式的url带#号,而history没有带
原理上区别
hash:
#号hash值的变化,不会导致浏览器向服务器发出请求,浏览器不发出请求,就不会刷新页面,通过监听hashchange事件可以知道hash发生了哪些变化,然后根据hash变化来实现更新页面部分内容的操作
或:通过浏览器的onhashchange()事件来监听hash值的变化,查找对应的路由规则
history:
主要是HTML5标准发布的两个API,pushState,和 replaceState,这俩个API可以改变url,但是不会发送请求,这样就可以监听url变化来实现更新页面部分内容的操作。
或:利用H5的history中新增的两个API pushState() 和 relaceState() 和一个事件onpopstate监听url变化
标准回答:
通俗理解url中带#号的就是hash,而history是不带的,原理上,hash是利用window.onhashchange监听变更事件,做出反应。而history是利用HTML5中的 history.interaface 的监听路由变化,还有就是hash值是不会到到服务器端,不利于做搜索引擎,所以因为这个缘故官网类的项目适合用history,移动端适合用hash,最后还有一个就是hash是不需要做浏览器兼容的,ie8也可以使用,而history是需要兼容到IE10.