一个完整的JavaScript实现应该由三部分组成 —— ECMAScript(核心),DOM(文档对象模型),BOM(浏览器对象模型)。
ECMAScript
由ECMA-262定义的ECMAScript与Web浏览器没有依赖关系。ECMAScript定义的只是这门语言的基础。
我们常见的Web浏览器只是ECMAScript实现可能的宿主环境之一。我们学习的这个是浏览器端的JS,而nodejs中就没有BOM的定义,因为nodejs不是跑在浏览器中的,而是服务端的。
BOM
BOM,是 Browser Object Model 的缩写,即浏览器对象模型。而这个BOM是用来做什么的,是提供与浏览器交互的方法和接口(即访问和操作浏览器)。
- BOM的核心对象
window
,表示浏览器的一个实例
- 在浏览器中,window对象有着双重角色,既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的
Global
对象。
- 在浏览器中,window对象有着双重角色,既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的
- 提供浏览器详细信息的
navigator
对象 - 提供浏览器所加载页面的详细信息的
location
对象 - 提供用户显示器分辨率详细信息的
screen
对象 - 保存用户上网的历史记录的
history
对象
location对象
location对象的所有属性
- hash:返回URL中的hash(#号后跟零个或多个字符),如果URL中不包含散列,则返回空字符串
- host:返回服务器名称和端口号(如果有)
- hostname: 返回不带端口号的服务器名称
- href:返回当前加载页面的完整URL。而location对象的
toString()
方法也返回这个值 - pathname:返回URL中的目录和(或)文件名
- port:返回URL中指定的端口号。如果URL中不包含端口号,则该属性返回空字符串
- protocol:返回页面使用的协议。通常是
http:
或https:
- search:返回URL的查询字符串。这个字符串以问号开头.
一个小例子
// 地址:https://www.baidu.com:8080/page/?tn=22073068_9_oem_dg#test
location.href // https://www.baidu.com:8080/page/?tn=22073068_9_oem_dg#test
location.protocol // https:
location.host // www.baidu.com:8080
location.hostname // www.baidu.com
location.port // 8080
location.pathname // /page/
location.search // ?tn=22073068_9_oem_dg
location.hash // #test
面试题:提取url中查询参数
function getQueryStringArgs () {
// 取得查询字符串并去掉开头的问号
var qs = location.search.length > 0 ? location.search.slice(1) : '';
// 保存数据的对象
var args = {};
// 保存每一项
var items = qs.length ? qs.split('&') : [];
var item = null;
var key = null;
var value = null;
// 逐个将每一项添加到args对象中
for (var<