javascript typeof数据类型检测函数

网页特效 typeof数据类型检测函数

Javascript是一种弱类型脚本语言,弱类型并不代表没有类型。和其他的程序设计语言一样,Javascript中的数据也是有类型的,大的可以分为简单类型与复杂类型。

简单类型有 number,string,boolean

复杂类型有object和 function

下边的例子可以说明:

typeof 1 //echo "number"
typeof 1.1 //echo "number"
typeof "hello" //echo "string"
typeof true //echo "boolean"
 
typeof new Object() // echo "object"
typeof new Date() //echo "object"
typeof new Array() //echo "object"

typeof new Function() //echo "function"
typeof Object //echo "function"
typeof Date //echo "function"
typeof Array //echo "function"
typeof Function //echo "function"

上边的代码我们大致可以看出,使用typeof函数可以得出的Javascript数据类型有哪些,复杂类型只有object和function,而简单类型也只有三种。其实这并不准确,不论复杂类型还是简单类型,使用typeof得出的都不完全,下边我们将详细点描述。

对于简单类型,”number”可以分为integer和float两种,这两种类型在计算乘除的时候,是不一样的,这句有点废话,其实我想说的是,float类型在和int类型计算的时候,会有许多莫名奇妙的问题,就是因为float的精度问题。而对于复杂类型,就相对复杂些,javascript内置的一些类型从上边的例子我们可以看到,常见的有Date,Object,Array,Function(应该还有其他的吧,写这个的时候我想不起来),虽然他们使用typeof 计算时,返回的只有object换个function两种,但是他们其实是不一样的,如何不一样,就无需赘述。但是由上边的例子我们也可以看出,object和function两种类型比较特殊,我将他们其称之为基础类型。有个简单的区分方法,通常由new创建的都是object类型,通过function关键自定义的都是function类型,但是还有例外,就是new Function,它所创建的就是一个function,这个可能会在以后将函数的定义时提到吧。object类型,大致都能差不多理解,容易让人疑惑的是function类型,作为一种类型来描述时,其实应该描述为大写Function。Function本身的类型就是Function,由Function类型创建(包括使用function关键字定义)出来的function(函数)类型也是Function。这句话需要仔细理解。但是,还有一点,定义的function也是可以实例化的(这个词用这儿可能不太合适,不过便于理解),如下所示:

function functionType()
{
    //echo I am a function
}
var func = new functionType();
我们分别再使用typeof来检查functionType和func的类型:

typeof functionType // echo "function"
typeof func // echo "object"
再揣摩上边的话,定义的function的类型也是Function,定义的function同样可以被用于实例化,就像系统内置的Date,Array等类型一样,这说明了自定义的function是可以被当做类型使用的,这就找到了一条自定义类型的路,在面向对象的语言中,我们称之为类。现在在Javascript,我们也有定义类方法,即定义function。同时,类也是对象,类对象的类型是Function。

以上可以看出,Javascript中的复杂类型其实由Date,Array,Object,Function,以及我们自定义的类(型)。

既然存在类型,我们就需要区分类型,我们上边说了,typeof不能准确区分,因此,我们引入另一个关键字instanceof,并不是函数,但是它会返回一个boolean类型的值,标明一个对象是否为另一个对象的实例。如下

typeof new Date() instanceof Date //echo true
typeof new Array() instanceof Array //echo true
typeof new Object() instanceof Object //echo true

function myType(){
    // this is my type
}
var instance  = new myType();
instance instanceof myType() //echo true
myType instanceof Function //echo true
new Date() instanceof myType() // echo false

我们可以看出,instanceof是用来检查一个对象是否为另一个对象的实例的。细心的朋友可能还会这样尝试:

Function instanceof Function //echo true
Function instanceof Object //echo true
Object instanceof Object //echo true
Object instanceof Function //true
老实说,这段代码很让人抓狂。我在前边也说过,Object和Function都为基础类型,我们前边也看到使用typeof时他们两个之间的关系,typeof Object结果为function,我个人认为,这说明了Javascript中所有复杂类型的基础的都是Function,换句话说所有的类型都是基于Function来实现的。另一方面任何对象使用instanceof Object结果都为true,说明了任何对象都是Object的实例。前边一句侧重于类型,后边侧重于实例(Function我们也可以认为它是自己的一个实例)。

 

时间: 2024-10-12 21:26:03

javascript typeof数据类型检测函数的相关文章

浅谈javascript的数据类型检测_javascript技巧

一.javascript的数据 javascript的数据分为两种:简单数据和复杂数据.简单数据包含number,string,boolean,undefined和null这五种:复杂数据只有一种即object.[此处友情鸣谢李战老师,<<悟透JavaScript>>写得太传神,印象太深刻了] 二.javascript的数据类型检测 1.万能的typeof 我们先测试一下通过typeof来获取简单数据类型.什么也别说了,上代码是王道: 复制代码 代码如下: // 获取变量obj的数

javascript基本数据类型及类型检测常用方法小结_javascript技巧

本文实例讲述了javascript中的基本数据类型以及类型检测的几种方法.分享给大家供大家参考,具体如下: 1.JS中有6种基本的数据类型,JS中的所有操作都是基于这五种基本类型得到的. (1)Object 对象类型 (2)number 数字类型 (3)String 字符串类型 (4)null (5)underfined (6)boolean 布尔类型:true或者为false I)JS中的数据类型转换(非严格模式下) "12"==12 // true 在非严格模式下,字符串可以向数字

判断javascript的数据类型

 这篇文章主要是对判断javascript的数据类型(示例代码)进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助  1 判断是否为数组类型 代码如下: <STRONG><script type="text/javascript">  //<![CDATA[  var a=[0];  document.write(isArray(a),'<br/>');  function isArray(obj){  return (typeof

javascript六种数据类型以及特殊注意点

 这篇文章主要介绍了javascript六种数据类型以及特殊注意点,有需要的朋友可以参考一下 在js中常见的六种数据类型:String类型.Null类型.Number类型.Boolean类型.Object类型.   1.typeof的注意点   涉及到数据类型,不免会提到,操作符 typeof.要注意:   1.typeof是操作符,不是方法.虽然我们经常使用typeof()的方式获取对象的数据类型.   2.对 null 取typeof  是 object(这是因为null是 空的对象引用),

Javascript typeof 用法_javascript技巧

if(document.mylist.length != "undefined" ) {} 这个用法有误. 正确的是 if( typeof(document.mylist.length) != "undefined" ) {} 或 if( !isNaN(document.mylist.length) ) {} typeof的运算数未定义,返回的就是 "undefined". 运算数为数字 typeof(x) = "number"

【JavaScript】数据类型

学习任何一种程序设计语言,数据类型都是必不可少的一部分内容,很基础,也很重要.该用何种数据类型定义变量,这也是编程中最基础的一项. ECMAScript中有5种简单数据类型:Undefined.Null.Boolean.Number和String.还有一种复杂的数据类型--Object.ECMAScript中不支持任何创建自定义类型的机制,所有值都成为以上6种数据类型之一. 在ECMAScript中,是用typeof操作符来检测变量的数据类型.比如: var box ='李炎恢'; alert(

javascript typeof()的用法与运算符用法

typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typeof[()expression[]] ; expression 参数是需要查找类型信息的任意表达式. 说明 typeof 运算符把类型信息当作字符串返回.typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined.&qu

Javascript中的匿名函数与封装介绍

 这篇文章主要介绍了Javascript中的匿名函数与封装介绍,本文分析了jQuery 封装.Backbone 封装.Underscore 封装等内容,需要的朋友可以参考下     迷惑了一会儿不同JS库的封装后,终于有了点头绪.大致就是: 代码如下: 创建一个自调用匿名函数,设计参数window,并传入window对象. 而这个过程的目的则是, 代码如下: 使得自身的代码不会被其他代码污染,同时也可以不污染其他代码. jQuery 封装   于是找了个早期版本的jQuery,版本号是1.7.1

javascript typeof的用法与typeof运算符介绍[详细]第1/2页_javascript技巧

经常会在js里用到数组,比如 多个名字相同的input, 若是动态生成的, 提交时就需要判断其是否是数组. if(document.mylist.length != "undefined" ) {} 这个用法有误. 正确的是 if( typeof(document.mylist.length) != "undefined" ) {} 或 if( !isNaN(document.mylist.length) ) {} typeof的运算数未定义,返回的就是 "