YUI 2.7 源码阅读笔记(一)
Time: 09-11-29 Comments: 0
最近, 看了一下YAHOO.js和Lang.js的源码, 有两处给我印象很深…
一. 定义全局变量YAHOO
if (typeof YAHOO == "undefined" || !YAHOO) {
var YAHOO = {};
}
typeof YAHOO == “undefined”这一句, 很经典, 如果写成if (!YAHOO) {}, 则浏览器会报错, 提示”YAHOO is undefined”.
那为什么typeof YAHOO, 不会报这个错误呢?
查了一下资料才知道: 当进行typeof运算时, 允许运算对象未定义, 而此时就会返回”undefined”.
二. isNumber方法
isNumber: function(o) {
return typeof o === 'number' && isFinite(o);
}
当看到isFinite(o)时, 立马引起我的注意, 为什么要加上这一句?
灵光一闪, 回想起《javascript语言精粹》中提到这个问题: 对NaN和Infinity进行typeof运算, 其结果也是”number”, 而
isFinite方法则正好可以将这两者过滤掉.
经过再次挖掘, 发现isFinite的一个特点(在《精粹》中有提到): 它会尝试将被运算对象转换成数字, 但不是所有对象.
// 下面是我做的小测试:
isFinite([]) // 返回true
isFinite(null) // true
isFinite('') // true, NND, 连空字符串都不放过
isFinite('1323') // true
isFinite('abcd') // false
isFinite('12abcd') // false
isFinite(function() {}) // false
isFinite({}) // false
isFinite(new Date()) // true
isFinite(/1234/) // false
isFinite(document.body) // false
isFinite(args) // false, args为arguments对象
结果在上, 各取所需吧, 总结是件很淫荡的事情~~~~~~
