YUI的类型判断函数
1.首先定义一个关于类型的对象,及相关变量

类型判断对象
ar L = Y.Lang || (Y.Lang = {}),
STRING_PROTO = String.prototype,
TOSTRING = Object.prototype.toString,
TYPES = {
'undefined' : 'undefined',
'number' : 'number',
'boolean' : 'boolean',
'string' : 'string',
'[object Function]': 'function',
'[object RegExp]' : 'regexp',
'[object Array]' : 'array',
'[object Date]' : 'date',
'[object Error]' : 'error'
},
//L是YUI内部的一个命名空间
2.在此基础上定义一个类型判断的函数,返回传参的类型

类型判断
L.type = function(o) {
return TYPES[typeof o] || TYPES[TOSTRING.call(o)] || (o ? 'object' : 'null');
};
// L.type返回一个类型,会类型对象中查找 || 调用 tostring查找 || 如果上述都没有且存在,那返回的就是一个对象 || null
3. 定义一个识别是否为原生函数的函数(主要针对ES5)

用正则检测是否原生函数
NATIVE_FN_REGEX = /\{\s*\[(?:native code|function)\]\s*\}/i;
L._isNative = function (fn) {
return !!(Y.config.useNativeES5 && fn && NATIVE_FN_REGEX.test(fn));
};
//若是原生函数会返回 function 函数名() { [native code ] }
// 如果配置中选择不使用ES5的方法,会全部使用重写的方法
4. 检测各种类型的函数

类型检测函数L.isArray = L._isNative(Array.isArray) ? Array.isArray : function (o) {
return L.type(o) === 'array';
};
L.isBoolean = function(o) {
return typeof o === 'boolean';
};
L.isDate = function(o) {
return L.type(o) === 'date' && o.toString() !== 'Invalid Date' && !isNaN(o);
};
L.isFunction = function(o) {
return L.type(o) === 'function';
};
L.isNull = function(o) {
return o === null;
};
L.isNumber = function(o) {
return typeof o === 'number' && isFinite(o);
};
//对象检测,若failfn为false,function传入返回true,否则返回false
L.isObject = function(o, failfn) {
var t = typeof o;
return (o && (t === 'object' ||
(!failfn && (t === 'function' || L.isFunction(o))))) || false;
};
L.isString = function(o) {
return typeof o === 'string';
};
L.isUndefined = function(o) {
return typeof o === 'undefined';
};
L.isValue = function(o) {
var t = L.type(o); switch (t) {
case 'number':
return isFinite(o); case 'null': // fallthru
case 'undefined':
return false; default:
return !!t;
}
};
L.now = Date.now || function () {
return new Date().getTime();
};
//new Date() 如果传参是一个非法的:
// 第一种情况,传参全部是字母,在IE9,chrome,ff,opera,safari返回Invalid Date, IE6-IE8返回一个NaN;
// 第二种情况,传参有一部分是数字,在chrome会自己创建 一个正确的时间,其余的与第一种情况一样;
// 因此检测一个对象是否是日期对象 必须检测3项,如果全部满足就是正确的日期对象
//safari中 typeof(document.getElementsByTagName(‘a’) => ‘function’
//isValue 检测一个值不为NaN,undefined, ‘ ’
5.应用,扩展三个函数,用于去除前后的空格

去除空格正则表达式UBREGEX = /\{\s*([^|}]+?)\s*(?:\|([^}]*))?\s*\}/g
WHITESPACE = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF"
WHITESPACE_CLASS = "[\x09-\x0D\x20\xA0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+"
TRIM_LEFT_REGEX = new RegExp("^" + WHITESPACE_CLASS)
TRIM_RIGHT_REGEX = new RegExp(WHITESPACE_CLASS + "$")
TRIMREGEX = new RegExp(TRIM_LEFT_REGEX.source + "|" + TRIM_RIGHT_REGEX.source, "g")

去除空格正则表达式L.trim = L._isNative(STRING_PROTO.trim) && !WHITESPACE.trim() ? function(s) {
return s && s.trim ? s.trim() : s;
} : function (s) {
try {
return s.replace(TRIMREGEX, '');
} catch (e) {
return s;
}
};
//return s && s.trim ? s.trim() : s 确保是字符串,如果不是字符串,直接返回s
L.trimLeft = L._isNative(STRING_PROTO.trimLeft) && !WHITESPACE.trimLeft() ? function (s) {
return s.trimLeft();
} : function (s) {
return s.replace(TRIM_LEFT_REGEX, '');
};
L.trimRight = L._isNative(STRING_PROTO.trimRight) && !WHITESPACE.trimRight() ? function (s) {
return s.trimRight();
} : function (s) {
return s.replace(TRIM_RIGHT_REGEX, '');
};
6. 关于类型判断的一些注意点
a. safari中关于元素收集集合类型的判断问题

函数var a = document.getElementsByTagName('a')
var b = document.getElementsByClassName('cnblogs_code')
var c = document.getElementById('cnblogs_post_body')
//对a,b,c进行typeof运算
console.log(typeof a)
console.log(typeof b)
console.log(typeof c)
//safari中前两个是function,最后一个是object,其余浏览器全是object
b. IE8以下对一些函数认为是'object‘

IEvar a = document.getElementsByTagName('html')[0]
var input = document.createElement("input");
console.log(typeof a.getAttribute)
console.log(input.focus)
//IE8及以下的会是object
YUI的类型判断函数的更多相关文章
- JS的数据类型判断函数、数组对象结构处理、日期转换函数,浏览器类型判断函数合集
工具地址:https://github.com/BothEyes1993/bes-jstools bes-jstools 100多个基础常用JS函数和各种数据转换处理集合大全,此工具包是在 outil ...
- PHP常用类型判断函数
1.gettype():获取变量类型 2.is_array():判断变量类型是否为数组类型 3.is_double():判断变量类型是否为倍浮点类型 4.is_float():判断变量类型是否为浮点类 ...
- PHP常用类型判断函数总结
1.gettype():获取变量类型 2.is_array():判断变量类型是否为数组类型 3.is_double():判断变量类型是否为倍浮点类型 4.is_float():判断变量类型是否为浮点类 ...
- 实现一个类型判断函数,需要鉴别出基本类型、function、null、NaN、数组、对象?
只需要鉴别这些类型那么使用typeof即可,要鉴别null先判断双等判断是否为null,之后使用typeof判断,如果是obejct的话,再用Array.isArray判断是否为数组,如果是数字再使用 ...
- 021-PHP常用的数值类型判断函数
<?php //判断数组 $colors = array("red", "blue", "green"); if(is_array($ ...
- javascript学习-类型判断
javascript学习-类型判断 1.类型判断的的武器 javascript中用于类型判断的武器基本上有以下几种: 严格相等===,用来判断null,undefined,true,false这种有限 ...
- 类型和原生函数及类型转换(二:终结js类型判断)
typeof instanceof isArray() Object.prototype.toString.call() DOM对象与DOM集合对象的类型判断 一.typeof typeof是一个一元 ...
- python的数据结构分类,以及数字的处理函数,类型判断
python的数据结构分类: 数值型 int:python3中都是长整形,没有大小限制,受限内存区域的大小 float:只有双精度型 complex:实数和虚数部分都是浮点型,1+1.2J bool: ...
- Python列表操作与深浅拷贝(5)——数字处理函数、类型判断、列表链表队列栈
python内建数据结构 分类 数值型: int float complex bool 序列对象: 字符串str 列表list 元组tuple 键值对: 集合set 字典dict 数值型 (list ...
随机推荐
- 用css实现一个空心圆,并始终放置在浏览器窗口左下角
用css实现一个空心圆,并始终放置在浏览器窗口左下角 div{ position:fixed; bottom:0; ...
- js页面加载进度条(这个就比较正式了,改改时间就完事儿)
不废话,直接上代码 思路不难,就是一个animate方法配合随机数 duration内个三秒钟,是自定义的,可以改成页面加载时间,这样就完美了 <!doctype html> <ht ...
- Gulp:基于流的自动化构建工具
前言 先说说为什么会使用gulp. 当你沉醉于撸代码之时,是否想过正规的前端代码需要走哪些流程,复杂的不说了,有几点想必你也思考过,比如: 1.代码的压缩合并.图片压缩怎么搞: 2.代码校验,是否规范 ...
- jquery height、innerHeight、outHeight
JQuery有很多的height,不总结一下你就要被他搞晕,所以为了保持清醒,汇总在下面 height:height innerHeight:height+padding outerHeight(fa ...
- python 远程统计文件
#!/usr/bin/python #encoding=utf-8 import time import os import paramiko import multiprocessing #统计文件 ...
- 常用IC封装技术介绍
1.BGA(ball grid array)球形触点陈列,表面贴装型封装之一.在印刷基板的背面按陈列方式制作出球形凸点用 以 代替引脚,在印刷基板的正面装配LSI 芯片,然后用模压树脂或灌封方法进行密 ...
- JS的substr与substring的区别
substr返回从指定位置开始的指定长度的子字符串 str.substr(star[,length]) 第二个参数可选,不选的话,截取到最后,如果length为0或者负数,那么返回的将是一个空字符串 ...
- 40个UI设计工具
摘要:用户界面设计在持续的基础上不断成长和演变.要跟上时代,你需要关注趋势.新资源和正被实施和谈论的新技术. 导读:用户界面设计在持续的基础上不断成长和演变.要跟上时代,你需要关注趋势.新资源和正被实 ...
- 精通CSS+DIV基础总结(二)
上一篇我们已经总结了部分CSS+DIV相关知识,这篇我们接着总结,从下边几个方面学习一下: 一,我们看如何设置网页的背景,顾名思义背景可以通过颜色和图片来设置,下边我们看一下如何设置: 颜色的设置非常 ...
- 跟我学系列教程——《13天让你学会Redis》火热报名中
学习目标 每天2小时,13天让你学会Redis. 本课程针对Redis新手,甚至连Redis是什么都没有听说过的同学.课程会具体介绍Redis是什么以及为什么要使用Redis,结合项目实践旨在让学生从 ...