注册 登录
编程论坛 JavaScript论坛

js方法总结

冰镇柠檬汁儿 发布于 2010-12-01 21:30, 4176 次点击
最近公司做了一个项目,我负责UI展现,过程中自己写了一些javascript的方法,发上来,与大家分享吧
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
36 回复
#2
冰镇柠檬汁儿2010-12-01 21:30
求加精
#3
foktime2010-12-02 13:17
//检测第二个参数是否为数组
    if (args.length > 0) {
        args[0].constructor === Array && (args = args[0]);
    }
这代码令我很迷茫。请教
#4
xieliu00482010-12-02 14:15
也看了下,确实费解......
#5
冰镇柠檬汁儿2010-12-02 15:31
constructor是构造器,能够解析“.”前的变量是什么类型的数据,比typeof更详细,typeof一个数组的时候会给你返回一个object,而constructor会告诉你它具体是什么,如此,我判断args[0]是否是数组,如果是则只得到args[0],以后的参数忽略掉
#6
foktime2010-12-02 16:31
倒不是在constructor的用法上,刚开始扫了一眼木细看
见笑见笑
#7
冰镇柠檬汁儿2010-12-02 19:19
回复 6楼 foktime
还不快给我加精
#8
foktime2010-12-03 08:06
回复 7楼 冰镇柠檬汁儿
ok了
#9
xieliu00482010-12-03 10:02
太高深了,我不在层次......
#10
冰镇柠檬汁儿2010-12-03 21:16
没关系啊,只要会用就好啊,呵呵
#11
冰镇柠檬汁儿2010-12-03 21:25
在那两个文件中,发现个问题,getUrlPara方法里的
var str = location.search.replace(/^\?/g, "");
需要改成
var str = location.search.replace(/^\?/g, "").replace(/\%26/g, '&');
今天遇到一个问题,在某些机器的IE中,会将URL中的“&”转换成“%26”,所以要转换回来才行。希望大家用的时候改一下
#12
gupiao1752010-12-04 09:56
写的技术水平真不错,用法也很高级!

不过说实话,原码里有几句的用法,我真的有点理解不来,别笑话我,我有点看不懂!STRINGBUILDER我只是听说过,因为对。NET不熟,也不知道这个函数到底是干吗的!
#13
foktime2010-12-04 11:10
回复 12楼 gupiao175
唉,兄弟,我这小半年内总感觉这版主当的越来越心虚。不会的东西发现越来越多
#14
aspic2010-12-04 15:15
StringBuilder比一般的+=拼接字符串要高效
#15
gupiao1752010-12-04 17:02
以下是引用foktime在2010-12-4 11:10:24的发言:

唉,兄弟,我这小半年内总感觉这版主当的越来越心虚。不会的东西发现越来越多
   同感,越来越觉得自己的进步程度很慢!
#16
gupiao1752010-12-04 17:04
以下是引用aspic在2010-12-4 15:15:45的发言:

StringBuilder比一般的+=拼接字符串要高效
   谢了。我现在才想起来,这个在JS高级教程里有提过,效率问题!
#17
冰镇柠檬汁儿2010-12-05 15:50
我写的javascript版你不是有format方法的用例吗,其实主要的好处就是不用把字符串一个一个的用“+”连接了,只要按照格式就能很方便的替换了
其实至于javascript的字符串拼接,我个人觉得还是用数组push进去,最后用join('')的方式效率会高很多
#18
hugeannex2010-12-05 23:52
看了一下,好像没多大意思,就是用了些正则,效率应该不高吧.
还有,那不是java的StringBuffer,也是不C#的StringBuilder,
应该C#的Console.WriteLine(),java的不记得有没有类似方法了,好像没有,只有一个String.format()
#19
hugeannex2010-12-06 01:06
洗澡洗衣服后,再略看了一下,发现有些地方不尽人意,其中这地方最明显.
if (this.charCodeAt(i) > 127 || this.charCodeAt(i) == 94) {
            len += 2;
        }
ASCII码94的是"^",这也是一个半角字符,不能len+=2;
#20
foktime2010-12-06 09:31
以下是引用冰镇柠檬汁儿在2010-12-5 15:50:50的发言:

我写的javascript版你不是有format方法的用例吗,其实主要的好处就是不用把字符串一个一个的用“+”连接了,只要按照格式就能很方便的替换了
其实至于javascript的字符串拼接,我个人觉得还是用数组push进去,最后用join('')的方式效率会高很多
关于字符串的拼接, 多了用数组,少了用+更高效一些。有空可以测试一下看
另外这个也和浏览器有很大关系 。有的浏览器用+和用join速度差不多,甚至用+更快  
结论不是固定的,需要多多实际测试


[ 本帖最后由 foktime 于 2010-12-6 09:37 编辑 ]
#21
foktime2010-12-06 10:00
以下是引用hugeannex在2010-12-5 23:52:38的发言:

看了一下,好像没多大意思,就是用了些正则,效率应该不高吧.
还有,那不是java的StringBuffer,也是不C#的StringBuilder,
应该C#的Console.WriteLine(),java的不记得有没有类似方法了,好像没有,只有一个String.format()
正则确实效率低,因为要加载那套正则解析算法。大家可以讨论一下有没有更高效的解决方案

总的来说,还是挺有意思的,呵呵。因为版里平时问一些初级问题的帖子比较多,很少有发写好的代码块供大家讨论研究的。
我觉得像这样都来讨论讨论评价评价,深入探讨一下,说说自己的想法和经验,彼此交流一下,才是进步
本版鼓励这样的帖子
#22
gu_tong20082010-12-06 10:26
看来楼主是位才女!哈。。。

"args[0].constructor === Array && (args = args[0]);" 为什么会写成"==="三个等号呢?不解! 才女,能给我解释一下吗?
#23
foktime2010-12-06 10:54
以下是引用gu_tong2008在2010-12-6 10:26:21的发言:

看来楼主是位才女!哈。。。

"args[0].constructor === Array && (args = args[0]);" 为什么会写成"==="三个等号呢?不解! 才女,能给我解释一下吗?
其实前面有解释啊

===就是严格等于,不进行数据类型转换。为真,再走后面的
整个的语句是个if语句的简写

#24
冰镇柠檬汁儿2010-12-06 18:37
以下是引用foktime在2010-12-6 09:31:53的发言:

关于字符串的拼接, 多了用数组,少了用+更高效一些。有空可以测试一下看
另外这个也和浏览器有很大关系 。有的浏览器用+和用join速度差不多,甚至用+更快  
结论不是固定的,需要多多实际测试
呵呵,我只是在IE下测试过,看来是我妄言了
#25
冰镇柠檬汁儿2010-12-06 18:41
以下是引用hugeannex在2010-12-5 23:52:38的发言:

看了一下,好像没多大意思,就是用了些正则,效率应该不高吧.
还有,那不是java的StringBuffer,也是不C#的StringBuilder,
应该C#的Console.WriteLine(),java的不记得有没有类似方法了,好像没有,只有一个String.format()
真的不是吗,我是模拟Java和c#中的方法写的,和Console.WriteLine()米关系的。String.format()我在里面也写了
写这个方法的时候,并不是为了性能而做的,而是为了使用方便,在JavaScript版的那个文件里,有使用方式,能节省很多的“+”
#26
冰镇柠檬汁儿2010-12-06 18:43
以下是引用foktime在2010-12-6 10:00:34的发言:

正则确实效率低,因为要加载那套正则解析算法。大家可以讨论一下有没有更高效的解决方案

本版鼓励这样的帖子
效率低是对的,但是还是会有人用,原因只是因为写起来方便而已
说本版就不对了,应该写本论坛
#27
BlueGuy2010-12-06 20:58
以下是引用冰镇柠檬汁儿在2010-12-6 18:43:14的发言:

效率低是对的,但是还是会有人用,原因只是因为写起来方便而已
说本版就不对了,应该写本论坛
高手啊, 拜倒在你的裙下了。/
#28
hugeannex2010-12-07 10:31
以下是引用foktime在2010-12-6 09:31:53的发言:

关于字符串的拼接, 多了用数组,少了用+更高效一些。有空可以测试一下看
另外这个也和浏览器有很大关系 。有的浏览器用+和用join速度差不多,甚至用+更快  
结论不是固定的,需要多多实际测试
刚刚在另一贴说了这问题,同志们,应该看新产品,别老在IE6那时代了,push()和join()在新一代的浏览器中已经不是+号的对手了。
#29
foktime2010-12-07 12:32
回复 28楼 hugeannex
在ie6迟迟不肯退休的今天,你就得考虑它 效率 兼容 内存泄漏...
#30
hugeannex2010-12-07 16:33
回复 29楼 foktime
IE6还微软都不理它了,用+在IE6是慢,但一般不在考虑范围了。
#31
冰镇柠檬汁儿2010-12-07 18:08
回复 30楼 hugeannex
不知道你对google统计的数据做过了解吗,反正IE6对我们公司网站的访问量能占40%,你能不管?
况且,push和join的方式在写大量字符串拼接的时候,比+要好用很多,毕竟能把一个很长的句子拆分开,并且join的在连接的时候,所用的参数是加在两个变量之间的,数组的最前和最后都不加,是很方便的

[ 本帖最后由 冰镇柠檬汁儿 于 2010-12-7 18:10 编辑 ]
#32
foktime2010-12-08 08:00
呵呵 我们网站的用户群体用IE6的占80%以上  都是些古董级老家伙
#33
hugeannex2010-12-08 10:48
以下是引用冰镇柠檬汁儿在2010-12-7 18:08:06的发言:

不知道你对google统计的数据做过了解吗,反正IE6对我们公司网站的访问量能占40%,你能不管?
况且,push和join的方式在写大量字符串拼接的时候,比+要好用很多,毕竟能把一个很长的句子拆分开,并且join的在连接的时候,所用的参数是加在两个变量之间的,数组的最前和最后都不加,是很方便的
对,现在IE6还是占市场,可IE6也可以用+号连字符啊,我的想法是:用IE6的,就让他们慢点哦,谁叫他们用“古董”,但效果也是能实现的呀。
谁不是向未来看齐?在IE7、IE8、IE9,+号连字符已经明显优化,我们为什么死抱着push和join?就算是句子分开了,也是可以连“+”的吧。
你说的最有理也就是最后这一句:“参数是加在两个变量之间的,数组的最前和最后都不加”,其他的都是旧思想。
#34
it33142011-01-04 00:23
感谢部队分享
#35
q5178703752011-06-15 10:41
看不懂的就是好的,哈哈
#36
AlexXu2012-11-27 19:28
看看。。。谢谢
#37
hua_03042012-11-28 16:37
打不开啊...................................
1