博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

JavaScript学习总结(一、变量、for和for-in循环)

Posted on 2017-07-17 20:25  lee_xiumei  阅读(235)  评论(0)    收藏  举报

一、变量

全局对象:

1. 每个javascript环境都有一个全局对象,在任意函数外都能用this访问到这个全局对象。

   此外,该全局对象有一个附加属性window,通常这个window也指该全局对象本身。

 创建的所有全局变量是这个全局对象的属性。

2. 尽量少使用全局变量:a. 始终使用var申明变量;

              b. 不要用任务链来进行部分var申明,即 var  a = b = 0,此时b为全局变量。

3. 通过var申明的全局变量不能被删除,没有通过var申明的隐式全局变量则可以被删除。

 

for 循环:

for(var i = 0; i < myArr.length; i++) {}

每次循环时都要去获取数组的长度,降低效率,尤其是对于一个HTMLCollection(DOM方法返回的对象)。

改进方法: 缓存数组长度,即 for (var i = 0, max = myArr.length; i < max; i++) {}

此外:使用 i = i + 1 / i += 1 来替换 i++。

 

for-in 循环:

特性: 属性列表不能保证顺序。

适用:非数组对象的遍历上。

hasOwnProperty()方法的用处:

1. 遍历对象属性时,可以过滤掉从原型链上下来的属性。以避免每次遍历的时候,会向上查询原型链,降低效率。

例:var man = {

    hands: 2,

    legs: 2,

    heads: 1

  };

for (var i in man) {

  if (man.hasOwnProperty(i)) {console.log(i, ":", man[i]);}    

   //logs hands: 2

       legs: 2

       heads: 1

};

 

for (var i in man) {

  console.log(i, ":", man[i]);

  //logs hands: 2

      legs: 2

      heads: 1

      clone: function()

};

2. 取消Object.prototype上的方法

例:for (var i in man) {

    if(Object.prototype.hasOwnProperty.call(man, i) {

      console.log(i, ":", man[i]);

     })

}