自己实现的typeOf函数1

时间:2023-03-09 00:07:16
自己实现的typeOf函数1

自己实现的typeOf函数:返回传入参数的类型

主要用于解决,js自带的typeof返回结果不精确;Ext JS中typeOf对字符串对象、元素节点、文本节点、空白文本节点判断并不准确的问题

js代码如下:

 /**
返回传入参数的类型
*/
function typeOf(value){
//数据类型判断
if(value===null){
return 'null';
}
//数据类型判断
var type = typeof value;
if(type=='undefined'||type=='string'||type=='number'||
type=='boolean'||type=='function'){
return type;
}
//数据类型判断
var stringType = Object.prototype.toString.call(value);
switch(stringType){
case "[object String]": return 'string';
case "[object Number]": return 'number';
case "[object Boolean]": return 'boolean';
case "[object Date]": return 'date';
case "[object Array]": return 'array';
case "[object RegExp]": return 'regexp';
case "[object Object]": return 'object';
}
//节点类型判断(可扩展)
var nodeType = value.nodeType;
if(nodeType!='undefined'){
if(nodeType==1){//元素节点
return 'element';
}
if(nodeType==2){//属性节点
return 'attribute';
}
if(nodeType==3){//文本节点
if(/\S/.test(value.nodeValue)){//节点值包含非空白字符
return 'textnode';//非空白文本节点
}
return 'whitespace'//空白文本节点
}
}
//其它的统一识别为'object'
return type;//'object'
}

测试HTML代码如下:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>typeof</title>
<script type="text/javascript" src="./js/TypeOf0.js"></script>
<script type="text/javascript">
window.onload = _pageLoaded; /**
* 页面加载完毕后执行的函数
* @private
*/
function _pageLoaded(){
console.info(typeOf(new String('123')));
console.info(typeOf(function(){}));
console.info(typeOf(document.getElementById('table1')));
console.info(typeOf(document.getElementById('table1').getAttributeNode('id')));
console.info(typeOf(document.getElementById('node1').firstChild));
console.info(typeOf(document.getElementById('node2').firstChild));
var obj = {name:'pine'};
console.info(typeOf(obj));
console.info(typeOf(document));
var _obj = {nodeType:1};
console.info(typeOf(_obj));
}
</script>
</head>
<body>
<table id="table1">
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
</table>
<span id="node1">测试文本~~~</span>
<span id="node2"> </span>
</body>
</html>