网络编程
位置:首页>> 网络编程>> JavaScript>> YUI学习笔记(3)(2)

YUI学习笔记(3)(2)

作者:xujiwei 来源:HotHeart's BLOG 发布时间:2009-01-21 16:24:00 

标签:yui,笔记,yahoo,trim,JavaScript

2. YAHOO.lang.trim (yahoo/yahoo.js)

trim 方法用来去除字符串两边的空白字符,其实也就用了一个正则来匹配字符串两端的空白字符并替换成空白字符串。

不过在 YAHOO.lang.trim 中,它使用了一个 try ... catch 来在调用的参数不为字符串时直接返回原来的对象。

3. 对象类型判断 YAHOO.lang.isXXX (yahoo/yahoo.js)

YAHOO.lang 中包含了一堆用于判断对象是否为某个类型的方法,例如 isObject、isString、isNumber 等。

YAHOO.lang.isArray 用来判断一个对象是否为数组,YUI 中并不是使用的 obj instanceof Array 或者 obj.constructor == Array,而是判断指定的对象是否有两个数组应该具有的经典属性和方法 length 和 splice,这是因为如果要判断的对象是属于另外一个 frame 中时,除非你能获得另外一个 frame 中 Array 定义的费用,否则 instanceof 和 constructor == Array 都是返回 false 的,我们可以使用以下代码来测试一下:

test.html

<iframe id="frame" src="iframe.html"></iframe>
<script type="text/javascript">
<!--
var f = document.getElementById('frame');
setTimeout(function() {
    alert(f.contentWindow.arr.constructor == Array);
}, 1000);
//-->
</script>

iframe.html

<script type="text/javascript">
<!--
var arr = [1, 2, 3];
//-->
</script>

而如果把 Array 换成 arr 所在 frame 中 Array 的引用,结果就是为 true 了:

test.html

 

<iframe id="frame" src="iframe.html"></iframe>
<script type="text/javascript">
<!--
var f = document.getElementById('frame');
setTimeout(function() {
    // 这里将 Array 换成 f.contentWindow.Array
    alert(f.contentWindow.arr.constructor == f.contentWindow.Array);
}, 1000);
//-->
</script>

但是因为 isArray 是一个通用的方法,在使用时不可能要求调用者同时也传递一个目标 frame 的引用过来,所以只好通过判断两个经典的属性来代替了。

YUI 的注释中提到是 Safari 不支持跨框架通过 instanceof 的检测,但是我测试的结果是几个主流浏览器都不支持跨框架的 instanceof 检测。

YAHOO.lang.isBooleanYAHOO.lang.isFunctionYAHOO.lang.isStringYAHOO.lang.isUndefined 这 4 个方法是直接通过使用 typeof 来判断对象类型是否为 boolean、function、string 或 undefined 的。

YAHOO.lang.isNumber 也是通过 typeof 来判断的,不过附加了一个检测条件,使用 isFinite 来检测数字是否为有限的,即不是 NaN、负无穷或正无穷。

YAHOO.lang.isObject 通过 typeof 来判断对象类型是否 object 以及使用 isFunction 方法来检测对象是否为一个 Function,在 YAHOO.lang.isObject 方法的眼中,Object 与 Function 都是 Object。

YAHOO.lang.isNull 直接将判断对象与 null 进行严格相等比较。

YAHOO.lang.isValue 用来判断传递给它的参数是否为一个有值的对象,它是将 isObject、isString、isNumber 以及 isBoolean 四个方法对参数进行判断的结果进行或操作来作为结果的,对 null/undefined/NaN 这三个值进行 isValue 判断时就会返回 false,因为 0、false、' 这三个值在分别在 isNumber、isBoolean、isString 时判断为 true,所有 isValue 的结果也为 true。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com