js注意点

1.NaN(Not a Number)

        typeof NaN  是一个number类型

        任何涉及NaN的操作都会返回NaN,NaN与任何值都不相等,包括NaN本身

 

2. ==和===

        ==只是数值的比较,===不仅仅是数值的比较还是数值类型的比较

 

3.逻辑运算符 && 和 ||

        &&在有一个操作数不是布尔值时

                    如果第一个操作数隐式转换后为true,则返回第二个操作数;

                    如果的哥操作数隐式转换后为false,则返回第一个操作数;

                    

          || 在有一个操作数不是布尔值时

                返回第一个操作隐式为true的值;

                如果都为false,则返回最后一个操作数;     

                     

 

 4.arguments,函数的参数,是一个类数组

              arguments可以访问传进来的参数

               

               注意:在严格模式下,不可以通过arguments修改传进来的参数,在非严格模式下,可以修改传进来的参数

 

5. document.createDocmentFragment();创建文档片段,无参数

            注意:当添加多个DOM元素时候,先添加进文档片段,再同一插入页面中,减少渲染,提高效率

              

 

6.docment.documentElement;能获取到html节点

 

7.查找节点

      注意:

                1.空白节点,在现代浏览器中空白节点是存在的,在ie8及ie8以前会忽视空白节点,可通过nodeType=1来判断

       

               2.不获取空白节点API,注意,兼容ie9及以上

                

 

8.dom事件流:事件冒泡和事件捕获

           

 

            1.事件冒泡:点击子元素,父元素及祖元素相同事件类型也依次触发,dom2级事件第三个参数为false,可以省略不写

                      注意点一:同一亲属树上相同事件类型才会触发,例(子元素是click事件,父元素也是click事件,如果父元素不是click事件,那么也不会冒泡)

                      注意点二:如果子元素没有事件,那么父元素及祖元素上有事件,也会触发,例(子元素无事件,父元素有click事件,点击子元素,父元素也会触发)

                    

              2.事件捕获:点击子元素,祖元素及父元素事件先后触发,最后再触发子元素的事件 , dom2级事件第三个参数为true

                    注意点:和事件冒泡一样,必须是相同事件类型才ok

 

           3.事件委托:也叫事件代理,事件冒泡最好的功能;根据事件冒泡注意点二的原理来实现 

                  btn.addEventListener('click',function(event){},false);  

                  核心:A.冒泡; b.自带参数event

                 Event对象属性和方式:

                         event.type:当前事件类型

                         event.target:事件源(点击谁,就是谁),ie8及一下event.srcElement

                         event.currentTarget:事件源(事件在谁身上,就是谁)

                         event.preventDefault():阻止默认行为,ie8及以下是event.returnValue=false

                         event.stopPropagation():阻止冒泡或捕获,ie8及以下是event.cancalBuble=true

                         event.clientY:点击位置到浏览器顶部底边的距离

                         event.pageY:点击位置到浏览器顶部底边的距离,如果有滚动条,会加入滚动距离

                         event.screentY:点击位置到屏幕顶部的距离

 

9.document事件

              注意:document事件需要用dom2级触发;

              document.addEventListener('DOMContentLoaded',function(){})事件:  DOM树加载完成触发,速度大于load事件;

              window.onload事件是DOM树加载完成后,图片和外部引用也加载完毕后,才触发;

              window.onhashchange 一定是给window对象添加,地址#后面值变化触发

              document.addEventListener('DOMNodeRemoved',function(){}):删除任意元素会触发;

              document.addEventListener('DOMNodeInserted',function(){}):添加元素触发;

              document.addEventListener('DOMSubtreeModified',function(){}):对象中任意改变都会触发;

 

10.localtion.reload()

               补充:location.reload()重新从缓存加载页面,localtion.reload(true)就是强制重头刷新,也叫深度刷新

 

11.函数传递参数

          注意:正确结果是xm;

           错误理解:person=obj,obj对象赋值,然后重新指向一个对象,person也就改变指向,结果是xh;

           正确理解:  形参就是函数声明时的变量,相当于一个局部变量,实参是我们调用该函数时传入的具体参数 ;形参和实参指向的对象不是同一个,形参改变了,实参的指向对象并没有改变

         obj={};仅仅相当于是obj的指向变了,person的指向并没有变

          

 

12.作用域链:局部变量优于外部变量,也更快;

13.变量提升:

                  预解析先解析变量和函数,在预解析过程中,变量赋值undefined,提升函数,如果变量名和函数重名,函数干掉变量名,

                  预解析完成后,开始按顺序赋值,赋值过程谁在后赋值,谁才显示,变量和函数一样;

                  

 

 

                      形参相当于局部变量:

 

                       

 

 

                

posted @ 2020-04-23 10:09  fanbu  阅读(260)  评论(0编辑  收藏  举报