日期:2014-05-16  浏览次数:20468 次

YUI源码阅读心得 YAHOO.js 小技巧

?阅读YUI2.8.1 版本上
?1,将变量转换为字符串的办法。
? var a=" "+a;? js提供了一系列的自动转换变量类型的方法。

?


? 2,if(a==null){
???? a={};
?? }这样的代码可以简化为 a=a||{};
?
?? var s;
?? if(a!==null){
???? s=a.property;
?? }这样的代码可以简化为 s=a&&a.property;

?

?


? 3,环境检测代码
??? ie;opear;Gecko(firefox);webkit(Safari);mobile;air;caja;secure(ssl);os(操作系统也检测。。。);???
?? secure的查询只是检测window.localtion.href有无https状况。???
?? 大部分检测代码从navigator.userAgent里面出来,通过字符串来进行判断


? 4,YUI的继承使用的是prototype的方法继承。
?? 进行覆盖方法的时候,要注意valueOf和toString 这两个方法。
? 因为动态属性的优先级是高于原型优先级的。所以进行继承覆盖方法的时候,需要检测这两个方法。
??
?调用了valueOf跟toString,二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString。

?

?

?

1 楼 clue 2010-10-26  
第2点,不太明白。。。除非主动在循环中给i赋值,否则i的值怎么会变动呢?
自动变换类型也只是在其它表达式中运行的时候做,对原本的值没任何影响
2 楼 every_best 2010-10-27  
clue 写道
第2点,不太明白。。。除非主动在循环中给i赋值,否则i的值怎么会变动呢?
自动变换类型也只是在其它表达式中运行的时候做,对原本的值没任何影响

如果在for循环中 对i值进行了操作,改变为了字符串类型。那i++这样的方式会报错或计算错误吧。
使用i=i+1是保证在循环中i的值能保持为数值类型。
3 楼 clue 2010-10-27  
every_best 写道
clue 写道
第2点,不太明白。。。除非主动在循环中给i赋值,否则i的值怎么会变动呢?
自动变换类型也只是在其它表达式中运行的时候做,对原本的值没任何影响

如果在for循环中 对i值进行了操作,改变为了字符串类型。那i++这样的方式会报错或计算错误吧。
使用i=i+1是保证在循环中i的值能保持为数值类型。

如果被改变了,那证明程序写得有问题。
另外,如果i不是数字,i++运算会先将它转为数字再进行运算,值可能为NaN,不会出错(IE和FF下测试过)
相反,如果i为字符串,i=i+1会形成"*1"这样的字符串(字符串连接)
4 楼 every_best 2010-10-27  
clue 写道
every_best 写道
clue 写道
第2点,不太明白。。。除非主动在循环中给i赋值,否则i的值怎么会变动呢?
自动变换类型也只是在其它表达式中运行的时候做,对原本的值没任何影响

如果在for循环中 对i值进行了操作,改变为了字符串类型。那i++这样的方式会报错或计算错误吧。
使用i=i+1是保证在循环中i的值能保持为数值类型。

如果被改变了,那证明程序写得有问题。
另外,如果i不是数字,i++运算会先将它转为数字再进行运算,值可能为NaN,不会出错(IE和FF下测试过)
相反,如果i为字符串,i=i+1会形成"*1"这样的字符串(字符串连接)

  是我理解错误了,不严谨了。修正,修正。多谢~