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

JS小技巧,知识点收集(不断更新)

Posted on 2008-02-21 09:17  生鱼片  阅读(529)  评论(0编辑  收藏  举报

1.JSON剖析:优点和不足
  对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。相对于XML,它更加易读、更便于肉眼检查。在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。下图是一个JSON有效负载:

{"addressbook": {"name": "Mary Lebow",
"address": {
"street": "5 Main Street"
"city": "San Diego, CA",
"zip": 91912,
},
"phoneNumbers": [
"619 332-3452",
"664 223-4667"
]
}
}

  将上面的JSON有效负载用XML改写,如下:

<addressbook>
<name>Mary Lebow</name>
<address>
<street>5 Main Street</street>
<city zip="91912"> San Diego, CA </city>
<phoneNumbers>
<phone>619 332-3452</phone>
<phone>664 223-4667</phone>
</phoneNumbers>
</address>
</addressbook>

  是不是很相似?但它们并不相同。下面将详细阐述采用JSON句法的优点和不足。

优点
  乍看上去,使用JSON的数据分隔符的优点可能并不那么明显,但存在一个根本性的缘由:它们简化了数据访问。使用这些数据分隔符时, JavaScript引擎对数据结构(如字符串、数组、对象)的内部表示恰好与这些符号相同。

  这将开创一条比DOM技术更为便捷的数据访问途径。下面列举几个JavaScript代码片段来说明这一过程,这些代码片段会访问先前的JSON代码片段中的信息:

访问JSON中的名称: addressbook.name
访问JSON中的地址: addressbook.address.street
访问JSON中的电话号码第一位:addressbook.address.phoneNumbers[0]
  如果您具备DOM编程经验,就能很快地看出区别;新手可以参看 Document Object Model 的这一外部资源,这里提供了关于数据导航的实例。

  JSON的另一个优点是它的非冗长性。在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;而在JSON中,所有这些要求只需通过一个简单的括号即可满足。在包含有数以百计字段的数据交换中,传统的XML标记将会延长数据交换时间。目前还没有正式的研究表明JSON比XML有更高的线上传输效率;人们只是通过简单的字节数比较发现,对于等效的JSON和XML有效负载,前者总是小于后者。至于它们之间的差距有多大,特别是在新的XML压缩格式下它们的差距有多大,有待进一步的研究。

  此外,JSON受到了擅长不同编程语言的开发人员的青睐。这是因为无论在Haskell中或 Lisp中,还是在更为主流的C#和PHP中,开发都可以方便地生成JSON(详见 参考资料)。

不足
  和许多好东西都具有两面性一样,JSON的非冗长性也不例外,为此JSON丢失了XML具有的一些特性。命名空间允许不同上下文中的相同的信息段彼此混合,然而,显然在JSON中已经找不到了命名空间。JSON与XML的另一个差别是属性的差异,由于JSON采用冒号赋值,这将导致当XML转化为JSON时,在标识符(XML CDATA)与实际属性值之间很难区分谁应该被当作文本考虑。

  另外,JSON片段的创建和验证过程比一般的XML稍显复杂。从这一点来看,XML在开发工具方面领先于JSON。尽管如此,为了消除您对这一领域可能存在的困惑,下节将介绍一些最为成熟的JSON开发。

2.Prototype:
Js中的很多对象都有其原生的方法,如String.prototype.substring()等等,类似这些都是js编译器本身支持的,我们也可以自己来扩展String的原生方法,使用String.prototype.show=
Function(){alert(“here”)},这样我们就为String增加了一个原生的方法,我们就可以使用String的实例str.show()来调用该方法。

3. 在ASP.NET页面中,我们编写JavaScript脚本附加有注释时,这些注释也往往会随JavaScript脚本一起送到客户端。访问者只要在浏览器里查看HTML源文件就可以看到这些注释。有没有办法让JavaScript的注释在客户端不可见呢?使用JavaScript注释 + 服务器端注释!编译后的ASP.NET页面将忽略掉<%--到--%>中的注释部分,恶意攻击者在客户端就看不到这些注释了。
行注释写法: //<%-- 这里写行注释 --%>
块注释写法:
       /*<%--
          这里写注释语句块,
          多行都行。
       --%>*/

4.当IE关闭时候提示对话框
在关闭窗口时,会先把窗口移到屏幕外极远的地方(至少10000,10000以外),还可以在onblur判断坐标,如果是-30000以外的,一般情况下都是“最小化”的操作,可以用来判断是否最小化
<script language=javascript>
window.onbeforeunload=function()
{
    return " ";
}
</script>
捕获IE关闭事件
<script language="javascript">
var s="close";
function window.onunload()
{  
alert(s);
   if(s=="fresh")
      if(window.screenLeft>10000)
         {alert(window.screenLeft);alert('关闭');}
      else{alert('刷新');}
   else
      alert('关闭');

}
function window.onbeforeunload()
{
   s="fresh";
   return " ";
}
</script>
5.toFixed(2))为四舍五入函数,参数表示小数点后保留的位数
   parseFloat(idvalue):两个变量使用+号表示字符串连接,如果套上该函数就会进行加法运算了。
6.if ((document.forms[0].Title.value).replace(/[ ]/g,"") =="") 去空格的判断。
7.js 时间比较函数:
function compdate(a,b){
 var a,ass,aD,aS;
 var b,bss,bD,bS;
alert(a)
 ass=a.split("-");        //以"-"分割字符串,返回数组;
 aD=new Date(ass[0],ass[1],ass[2]);  //格式化为Date对像;
 aS=aD.getTime(); //得到从 1970 年 1 月 1 日开始计算到 Date 对象中的时间之间的毫秒数
 
 bss=b.split("-");
 bD=new Date(bss[0],bss[1],bss[2]);
 bS=bD.getTime();
 
 if(bS<aS){
  alert("结束时间不能在开始时间之前");  
  return false;
 }
}