BOM对象和DOM对象和JS对象如何区分?

JavaScript08

BOM对象和DOM对象和JS对象如何区分?,第1张

bom 是浏览器特有的,比如你用js实现:取得当前页地址再加入收藏夹,这个必须依赖浏览器功能。你写的 bom 的玩意只能在浏览器上跑,没浏览器、没地址你怎么加入收藏夹?

dom 是文档对象模型,比如 html 是树结构的,操作 dom 就是操作这颗树:

<html>

<body>

<p><i>123</i></p>

<a>百度</a>

</body>

</html>

树结构:

html

|

body

|

------------

||

a p

||

百度i

|

123

dom 你可以操作 html 这颗树,也可以去操作另一颗树,比如:xml,而不管你是在浏览器中还是在其他环境中运行js,都能操作,因为你不依赖浏览器特有的东西。

js里面几乎一切皆对象(有个例外),但是人家是说的 js 语法里面的对象,和 dom、bom对象不是一个概念,你在拿两个世界里面不同的东西做比较,虽然他们都叫对象。。

var i = window.Number//i变量 = 一个bom对象中的值

i 是一个变量,同时也是一个js里面所谓的对象,现在是让 js 变量 i 值为 window.Number

var j = document.getElementById("menu")//获得html中id为menu的标签,将其存入变量j 里面供接下来其他操作

这里 j 依然是一个 js 对象,后面 ById 取得的是一个 dom 对象

j值 = ById值

j对象 不等于 ById对象

js 即 JavaScript ,是一种网页脚本语言,可以在网页上实现一些动态效果。

DOM 是HTML文档结构,其实就是为了能让js操作html元素而制定的一个规范,dom 的根本就是 document 对象,改对象有很多属性和方法,例如创建节点、复制节点、移除节点、修改属性等。

我们在写js代码时有时需要判断某个对象是不是DOM对象,然后再进行后续的操作,这里我给出一种兼容各大浏览器,同时又算是比较稳妥的一种方法。

要判断一个对象是否DOM对象,首先想到的无非就是它是否具有DOM对象的各种属性或特征,比如是否有nodeType属性,有tagName属性,等等。判断的特征越多,也就越可靠,因为毕竟我们自定义的js对象也可以有那些属性。还有其他方法吗?

在DOM

Level2标准中定义了一个HTMLElement对象,它规定所有的DOM对象都是HTMLElement的实例,所以我们可以利用这点来判断一个对象是不是DOM对象:如果该对象是HTMLElement的实例,则它肯定是一个DOM对象。在不支持HTMLElement的浏览器中我们则还是使用特征检测法。

<script

type="text/javascript">

//首先要对HTMLElement进行类型检查,因为即使在支持HTMLElement

//的浏览器中,类型却是有差别的,在Chrome,Opera中HTMLElement的

//类型为function,此时就不能用它来判断了

var

isDOM

=

(

typeof

HTMLElement

===

'object'

)

?

function(obj){

return

obj

instanceof

HTMLElement

}

:

function(obj){

return

obj

&&

typeof

obj

===

'object'

&&

obj.nodeType

===

1

&&

typeof

obj.nodeName

===

'string'

}

</script>

以上就是小编为大家带来的如何判断出一个js对象是否一个dom对象全部内容了,希望大家多多支持脚本之家~