function showObject(obj){
 //递归显示object
 if(!obj){return;}
 for(var i in obj){
  if(typeof(obj[i])!="object" || obj[i]==null){
   document.write(i + " : " + obj[i] + "<br/>");
  }else{
   document.write(i + " : object" + "<br/>");
  }
 }
}
这个方法里,for循环里的变量i为什么没有初始化就可以用哇谁能帮我注释一下这个代码么这里添加两个键值对a和b,并增加一个按钮。给a设置固定的值,当点击按钮时,修改b的值:<body>
<p>You have viewed this page <span id="count">0</span>  time(s).</p>
<p><input type="button" value="changeStorage" onClick="changeS()"/></p>
<script>
var storage = window.localStorage;
if (!storage.getItem("pageLoadCount")) storage.setItem("pageLoadCount",0);
storage.pageLoadCount = parseInt(storage.getItem("pageLoadCount")) + 1;//必须格式转换
document.getElementByIdx_x("count").innerHTML = storage.pageLoadCount;
showStorage();
if(window.addEventListener){
 window.addEventListener("storage",handle_storage,false);
}else if(window.attachEvent){
 window.attachEvent("onstorage",handle_storage);
}
function handle_storage(e){
 if(!e){e=window.event;}
 showObject(e);
}
function showObject(obj){
 //递归显示object
 if(!obj){return;}
 for(var i in obj){
  if(typeof(obj[i])!="object" || obj[i]==null){
   document.write(i + " : " + obj[i] + "<br/>");
  }else{
   document.write(i + " : object" + "<br/>");
  }
 }
}

storage.setItem("a",5);
function changeS(){
 //修改一个键值,测试storage事件
 if(!storage.getItem("b")){storage.setItem("b",0);}
 storage.setItem('b',parseInt(storage.getItem('b'))+1);
}
function showStorage(){
 //循环显示localStorage里的键值对
 for(var i=0;i<storage.length;i++){
  //key(i)获得相应的键,再用getItem()方法获得对应的值
  document.write(storage.key(i)+ " : " + storage.getItem(storage.key(i)) + "<br>");
 }
}
</script>
</body>这是所有的代码。JavaScript对象函数

解决方案 »

  1.   

    /*
     * 其中obj是一个对象
     * 例如{ name:"Vicky", age:18, sex:"female" }
     * 这里循环obj对象的所有属性
     */
    for(var i in obj){ // 这里是for in  类似C#里面的foreach或者Javas里面的for...in
      // 这里的i就是obj某个属性的名称,例如“name”,obj[i]就是取该属性的值,例如:obj["name"]的值是“Vicky”
      if(typeof(obj[i])!="object" || obj[i]==null){ // 判断他的属性值是不是为一个对象或null值
       document.write(i + " : " + obj[i] + "<br/>");
      }else{
       document.write(i + " : object" + "<br/>");
      }
    }
    <p>You have viewed this page <span id="count">0</span>  time(s).</p>
    <p><input type="button" value="changeStorage" onClick="changeS()"/></p><!-- 单击这个button时触发changeS方法 -->var storage = window.localStorage;// 获取浏览器本地缓存对象
    if (!storage.getItem("pageLoadCount")) // 判断本地缓存是否存在key为pageLoadCount的值
        storage.setItem("pageLoadCount",0); // 如果不存在,设置一个key为pageLoadCount到本地缓存,值为0
    storage.pageLoadCount = parseInt(storage.getItem("pageLoadCount")) + 1;//从本地缓存获取key为pageLoadCount的值
    document.getElementByIdx_x("count").innerHTML = storage.pageLoadCount; //getElementByIdx_x这个方法应该是自定义的吧??系统貌似没这个方法。看方法名称应该跟getElementById差不多吧?
    showStorage(); // 这个方法也是自定义的吧?
    if(window.addEventListener){// 判断window是否为有addEventListener这个方法,这个是为某个对象添加事件响应的方法,因为浏览器标准不同,所以分开处理。IE浏览器使用addEventListener附加事件
     window.addEventListener("storage",handle_storage,false); //添加storage事件,处理函数为handle_storage,onstorage为HTML5事件,具体可以看这里http://www.w3school.com.cn/html5/html5_ref_eventattributes.asp说明
    }else if(window.attachEvent){ // Mozilla系列浏览器使用attachEvent附加事件
     window.attachEvent("onstorage",handle_storage); // 添加storage事件响应
    }
    function handle_storage(e){
     if(!e){e=window.event;} // 这个也是浏览器兼容性判断。在IE中,事件对象是通过window.event获取的
     showObject(e);
    }
    function showObject(obj){ // 这个方法就是显示一个对象的所有属性和属性值了。
     //递归显示object
     if(!obj){return;}
     for(var i in obj){
      if(typeof(obj[i])!="object" || obj[i]==null){
       document.write(i + " : " + obj[i] + "<br/>");
      }else{
       document.write(i + " : object" + "<br/>");
      }
     }
    }
    storage.setItem("a",5);
    function changeS(){
     //修改一个键值,测试storage事件
     if(!storage.getItem("b")){storage.setItem("b",0);}
     storage.setItem('b',parseInt(storage.getItem('b'))+1);
    }
    function showStorage(){
     //循环显示localStorage里的键值对
     for(var i=0;i<storage.length;i++){
      //key(i)获得相应的键,再用getItem()方法获得对应的值
      document.write(storage.key(i)+ " : " + storage.getItem(storage.key(i)) + "<br>");
     }
    }