不能这么说吧 (如果符合第一次过滤,并确认了obj是Node类型,说明它是一个 元素节点)

不能这么说吧 (如果符合第一次过滤,并确认了obj是Node类型,说明它是一个 元素节点)

http://img1.sycdn.imooc.com//climg/5e6ce6de095dc79b12110630.jpg自定义对象那个不是还没判断吗?

var c={

nodeType:1

}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好, 对于你的问题解答如下:

  1. 是的,直接声明的var c ={nodeType:1}不是Node的实例对象,不能作为子节点添加到另一个子节点。

  2. try...catch语句可以参考如下解析:

    (1)首先,我们了解下try...catch语句的作用,因为如果代码出错,整个程序就会停止。将代码放到try里面,能正确执行就会正确执行,如果报错就会进入catch里面,代码还是会向后执行,不会影响整个程序。

    (2)然后,我们再来分析里面的代码意思,如果传入的obj是一个普通的对象,即同学这里举例的var c = {nodeType: 1}, 由于它不是一个元素节点,无法作为子节点添加到testDiv中,会出现错误,进入到catch中,返回fasle。如果传入的是一个正常的html节点,那么是可以作为子节点添加到testDiv中,不会出现报错,也就不会执行catch语句,就会执行后面的return true语句,返回结果为true。

这个方法实际工作中用到的比较少,同学不用深究,如果真的遇到了需要判断是否是元素节点,可以直接使用老师封装好的方法。

祝学习愉快~

好帮手慕慕子 2020-03-15 10:58:42

同学你好,第一次过滤的说法确实不太严谨,同学考虑的很全面,第一次过滤,主要是判断是否传入了obj,并且这个对象的nodeType属性值是否等于1,第二次判断,才是判断这个传入的对象是否是Node节点,这样就可以把类似于{ nodeType: 1 }的普通对象排除

示例:因为普通对象不是Node的实例对象,所以通过instanceof操作符检测返回是false

http://img1.sycdn.imooc.com//climg/5e6d99a1099c951908140260.jpg

打印结果:

http://img1.sycdn.imooc.com//climg/5e6d99b109e00ec006760200.jpg

同学可以测试理解下,祝学习愉快~

  • 提问者 大白前端 #1
    老师 所以也就是普通对象不是node的实例 所以不能作为子节点添加给另一个急节点对吗?
    2020-03-15 11:12:46
  • 提问者 大白前端 #2
    老师 所以也就是普通对象不是node的实例 所以不能作为子节点添加给另一个节点对吗? 那个try-catch内容可以详细解释一下吗?谢谢老师
    2020-03-15 11:14:09
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师