几种javascript的改进写法

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

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属性进行检索的,而MS的IE却是按着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);
原因:一个汉字占两个字符

posted on 2007-11-25 17:37 我为J狂 阅读(2215) 评论(15)  编辑  收藏 所属分类: JavaScript

评论

# re: 几种javascript的改进写法 2007-11-25 21:13 bean

第一条、第三条严重质疑。
第一条:
for(var i=0,j=myArray.length;i<j;i++)
alert(myArray[i]);
第三条:
if(Person.name){}  回复  更多评论   

# re: 几种javascript的改进写法 2007-11-25 21:20 我为J狂

@bean
置疑什么?最好说得清楚一些,有点看不懂你的写法。  回复  更多评论   

# re: 几种javascript的改进写法[未登录] 2007-11-25 21:31 ke

Don't aggree on the third rule, closure can provide better encapsulation.
The rule should be use closure to support private properties when possible.
function Person(name,sex)
{
var action='run';//private property
this.run=function(){//public method
alert(action);
};
}  回复  更多评论   

# re: 几种javascript的改进写法 2007-11-25 21:46 我为J狂

@ke
Thank you for your advice!Are you a foreigner?  回复  更多评论   

# re: 几种javascript的改进写法[未登录] 2007-11-25 21:48 ke

For the first rule, it is a tirck, ARRAY IS KIND OF OBJECT

var arr = [];
arr[-1]=-1;//add an property named "-1" on arr OBJECT
arr[1]=1; //put a value whose index is 1 into arr ARRAY
for(var k in arr)alert("arr[" + k + "]=" + arr[k]);
alert("length = " + arr.length);
for(var i=0;i<arr.length;i++)alert("arr[" + i + "]=" +arr[i]);  回复  更多评论   

# re: 几种javascript的改进写法 2007-11-25 21:54 我为J狂

@ke
Do you agree with me or not?  回复  更多评论   

# re: 几种javascript的改进写法[未登录] 2007-11-25 21:54 ke

The fifth one, I tested your code in FF2 and IE7, both alert "12".

var str="Java我选择,我喜欢!";
var charLength=str.length;

May be there are problem in lower version.  回复  更多评论   

# re: 几种javascript的改进写法[未登录] 2007-11-25 21:58 ke

@我为J狂
I don't quite aggree on the 1st rule, there are advice on this problem in mozilla.
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Statements:for...in
"Although it may be tempting to use this as a way to iterate over an Array, this is a bad idea. The for...in statement iterates over user-defined properties in addition to the array elements, so if you modify the array's non-integer or non-positive properties (e.g. by adding a "foo" property to it or even by adding a method or property to Array.prototype), the for...in statement will return the name of your user-defined properties in addition to the numeric indexes. Also, because order of iteration is arbitrary, iterating over an array may not visit elements in numeric order. Thus it is better to use a traditional for loop with a numeric index when iterating over arrays."  回复  更多评论   

# re: 几种javascript的改进写法 2007-11-25 22:05 我为J狂

@ke
呵呵,太感谢您了!受益匪浅。  回复  更多评论   

# re: 几种javascript的改进写法 2007-11-26 09:16 我为J狂

@ke
我接受您的建议:针对第一条:遍历数组的推荐方法应该是for循环,而不是for...in循环。  回复  更多评论   

# re: 几种javascript的改进写法 2007-11-26 09:46 Tiger F

我认为第5条不正确,javascript中使用的应该是unicode,情况与java类似。这样的做法反而会得到错误的结果。  回复  更多评论   

# re: 几种javascript的改进写法 2007-11-26 09:51 Tiger F

又看了一遍,可能是我理解错了。
这个做法是想要确定GBK编码情况下字符串需要的存储空间大小。不过我还是觉得这样不好,要是后台系统要采用utf8或者utf16呢。增加了系统部署的限制。  回复  更多评论   

# re: 几种javascript的改进写法 2007-11-26 12:22 我为J狂

@Tiger F
第五条是用于前台页面显示,与后台程序没有关系。例如用来使某个层(DIV)的宽度随着其中的字符长度而变化。  回复  更多评论   

# re: 几种javascript的改进写法 2007-11-28 20:44 金大为

1.排开性能问题不说,你这样做法时非常危险的。很多人都有扩充Array,String等原生对象的习惯。
for in 可能将这些扩充的成员函数也遍历出来

人外 var myArray=[];


2.基本认同
3.基本认同
4.。。。
5.。。。  回复  更多评论   

# re: 几种javascript的改进写法 2007-12-26 18:15 台湾

支持一下,点了个AD  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

导航

统计

常用链接

留言簿(11)

随笔分类(48)

文章分类(29)

常去逛逛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜