几种javascript的改进写法

本文介绍了JavaScript编程中的常见误区及推荐的最佳实践,包括数组遍历、构造函数定义、对象属性检查、DOM元素获取及字符串长度计算等方面。

1遍历数组
通常写法:(更改为推荐写法,随笔修改于20071126 var myArray=new Array();
myArray.push(1);
myArray.push("1");
for(var i=0;i<myArray.length;i++)
alert(myArray[i]);
推荐写法:(更改为非推荐写法,随笔修改于20071126
var myArray=new Array();
myArray.push(1);
myArray.push("1");
for(var i in myArray)
alert(myArray[i]);
原因:代码量少(原因见ke的评论,随笔修改于20071126

2
定义构造函数
通常写法: function Person(name,sex)
{
    var action='run';
    this.name=name;
    this.sex=sex;
    this.run=function(){
     alert(action);
     };
}
推荐写法: function Person(name,sex)
{
    this.name=name;
    this.sex=sex;
    this.action='run';
}
Person.prototype.run=function(){
     alert(this.action);
};
原因:避免重复创建函数,避免使用闭包
3
判断一个js对象是否支持某个属性或方法
错误写法:
var person=new Person('lzq','
');
if(person.name)
{
    alert('name
属性存在');
}
正确写法: var person=new Person('lzq','');
if(typeof(person.name)!='undefined')
{
   alert('name
属性存在');
}
原因:当person.name=null,0,false时测试失效
4
IE中根据name属性取得SPAN元素
错误写法:

var domObjs=document.getElementsByName('nameStr');
正确写法:
function getElementsByNAME(name)
{
    returns = new Array();
   var e = document.getElementsByTagName('span');
   for(i = 0; i < e.length; i++) {
                              if(e[i].getAttribute("name") == name) {
                                           returns[returns.length] = e[i];
                               }
                 }
                return returns;
}
var domObjs=getElementByNAME('nameStr');
原因:w3c规范中getElementsByName是按着name属性进行检索的,而MSIE却是按着id来检索,导致不能得到应该得到的Elements
5
得到字符串所占的字符个数
错误写法:
var str="Java
我选择,我喜欢!";
var charLength=str.length;
正确写法:
function    getLen(str)
{
       var totallength=0;  
       for (var i=0;i<str.length;i++)
       {
        var intCode=str.charCodeAt(i);   
        if (intCode>=0&&intCode<=128)
        {
              totallength=totallength+1; //
非中文单个字符长度加 1
         }
        else
        {
              totallength=totallength+2; //
中文字符长度则加 2
         }
        }
       return totallength;
}
var str="Java
我选择,我喜欢!";
var charLength=getLen(str);
原因:一个汉字占两个字符

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值