论坛首页 AJAX版 JavaScript

小心js中的逗号

浏览 10166 次
该帖已经被评为良好帖
作者 正文
最后更新时间:2008-02-02
个人感觉myy的写法比较好
   
0 请登录后投票
最后更新时间:2008-02-02
beckrabbit 写道
初写JS都会遇到的问题,我只想说IE太恶心了,连多个逗号都不让过。

IE的恶心不是在于不放过逗号, 而是他只告诉你错了, 但不告诉你错在哪里!
   
0 请登录后投票
最后更新时间:2008-02-03
这样写程序的可读性不强。
                  ---个人观点
   
0 请登录后投票
最后更新时间:2008-02-04
我也碰到了这个问题,看起来是一个事故多发地~~
   
0 请登录后投票
最后更新时间:2008-02-18
我一般这么处理:
在创建一个对象的时候,首先为他设置定义开始定义结束标志位属性,然后在开始标志位结束标志位之间创建对象的实际属性

比如:

Ext.MessageBox.show({
   ___BOODEF:"Begin of object define",    // 标志位:对象定义开始

   // 实际属性,开始
   msg: 'Loading data from template...',  
   progressText: 'Loading...',  
   width:300,  
   wait:true,
   // 实际属性,结束

   /*  这是注释掉的属性
   waitConfig: {interval:500},*/

   ___EOODEF:"End of object define"    // 标志位:对象定义结束
});  

这种做法的主要问题如下:
1、标志属性名不能和实际属性名重复,而对象的实际属性名无法预知
    所以要使用那些实际属性不太可能使用的名字,比如上例中的
    ___BOODEF = begin of object define
    ___EOODEF = end of object define
  
   或者短点的:
    ___B__O___:"begin of it"
    ___E__O___:"end of it"
  
    或者你和我一样自恋的话,可以用自己的名字:
    ___FINALNAD_B__:"finaland's object def begin"
    ___FINALAND_E__:"finaland's object def end"
   
2、如果你使用 for(i in obj) 的方法循环遍历当前 obj 的所有属性,除了实际属性之外,你会得到多余的标志位属性

3、对象定义写起来比较麻烦,刚开始异常痛苦,后来我用女朋友的名字作为标志位名,就好多了
   
0 请登录后投票
最后更新时间:2008-02-20
我也局的myy的写法不错,现在也这么写...

注释一行的时候很方便

像这样的逗号错误...不管怎么谢..检测起来都不好找的...
   
0 请登录后投票
最后更新时间:2008-02-20
实际上是对象直接量的问题。IE和FF对{a:a,}的处理不一样,IE当成错误,而FF做了容错性处理,最好的是最后不要有","
   
0 请登录后投票
最后更新时间:2008-02-20
hax 写道
对了,我还有一招。

比之把逗号写到前面,我更愿意加上一个特别的结尾,例如:

myObj = {
...,
...,
...,
...,
$:0
}

大家在这里可以发挥想象。例如写上当前时间:
01:43
也可以写个有趣的数字:
12:88
也可以画个脸型(横过来看)
face:-0
也可以写你的独特签名
PI:3.1415926535
……


myObj = {
    name:"abc",
    冏:"rz",
    haha:-0
}
   
0 请登录后投票
最后更新时间:2008-02-29
myy 写道
养成下面这样写的习惯:

Ext.MessageBox.show({
    msg: 'Loading data from template...'
   ,progressText: 'Loading...'
   ,width:300
   ,wait:true
   ,waitConfig: {interval:500}
});
....




我禁不住要回贴:
Ext.MessageBox.show({
    msg: 'Loading data from template...'
   ,progressText: 'Loading...'
   ,width:300
   ,wait:true
   ,waitConfig: {interval:500}
});
....



奇,第一次看见这样写的。
   
0 请登录后投票
最后更新时间:2008-02-29
finaland 写道
我一般这么处理:
在创建一个对象的时候,首先为他设置定义开始定义结束标志位属性,然后在开始标志位结束标志位之间创建对象的实际属性

比如:

Ext.MessageBox.show({
   ___BOODEF:"Begin of object define",    // 标志位:对象定义开始

   // 实际属性,开始
   msg: 'Loading data from template...',  
   progressText: 'Loading...',  
   width:300,  
   wait:true,
   // 实际属性,结束

   /*  这是注释掉的属性
   waitConfig: {interval:500},*/

   ___EOODEF:"End of object define"    // 标志位:对象定义结束
});  

这种做法的主要问题如下:
1、标志属性名不能和实际属性名重复,而对象的实际属性名无法预知
    所以要使用那些实际属性不太可能使用的名字,比如上例中的
    ___BOODEF = begin of object define
    ___EOODEF = end of object define
  
   或者短点的:
    ___B__O___:"begin of it"
    ___E__O___:"end of it"
  
    或者你和我一样自恋的话,可以用自己的名字:
    ___FINALNAD_B__:"finaland's object def begin"
    ___FINALAND_E__:"finaland's object def end"
   
2、如果你使用 for(i in obj) 的方法循环遍历当前 obj 的所有属性,除了实际属性之外,你会得到多余的标志位属性

3、对象定义写起来比较麻烦,刚开始异常痛苦,后来我用女朋友的名字作为标志位名,就好多了


天,又有一种写法了。

为什么不:
    ___FINALNAD_B__: null,
    ___FINALAND_E__: null
   
0 请登录后投票
论坛首页 AJAX版 JavaScript

跳转论坛:
JavaEye推荐