java typeof jar_[Java教程]从typeof()说起

[Java教程]从typeof()说起

0

2017-03-23 00:00:46

本文也同步发表在我的公众号“我的天空”

首先我们先思考一下,执行下列语句分别会显示什么?alert(typeof(Array));

alert(typeof(Array()));

我们进入正题!

在JS中任何变量都是有其数据类型的,而通过typeof()我们可以获得该变量的具体类型,我们看以下这段代码:

var a=1;

var b=false;

alert(typeof(a));    //弹出number

alert(typeof(b));    //弹出boolean

我们把变量a赋值为1,那么其数据类型为number,所以返回结果就是number,而b赋值为false,其数据类型为boolean,因此返回结果就是boolean。以上是基本数据类型的,很好理解。接下来我们来看更复杂的引用类型,而在引用类型里,尤其以function类型更令人迷惑。

我们都知道function是函数,但是很容易被忽略的是在JS中,function也是一种数据类型,而其函数名实质上也是一个变量,我们看以下这段代码:

function hello(){

return "hi";

}

我们声明了一个hello函数,但是从另一个角度来说,我们其实是声明了一个名称为hello的变量,其类型为function,所以我们想获得hello这个变量的类型时,要执行typeof(hello),注意这个地方是hello而不是hello(),其返回的结果自然就是function。

这个地方,很容易会混淆误写为typeof(hello()),如果写成这样的话,那实际上返回的是执行hello()函数后其返回结果的数据类型,而hello()返回的是一个字符串,所以typeof(hello())的结果就是string。其实typeof(hello())是两句代码的连写,其相当于以下代码,很显然,a自然是string类型的。

var a=hello();

alert(typeof(a));   //弹出string

如果我们要获得的是一个未声明变量的类型,那将返回undefined,例如我们直接运行typeof(test),由于我们并未声明test这个变量(无论是基本类型还是引用类型),因此其自然返回undefined。

要注意的时,对于js的全局变量或全局函数,我们是无需声明就可以直接使用的,那么对于这些变量和函数,是可以直接获取其数据类型的,而这个地方非常容易被混淆。我们看以下的数组声明代码:

var a=new Array()

alert(typeof(a));   //弹出object

这段代码也很好理解,我们声明了一个变量a,并把它初始化为一个数组,由于数组是object类型的,那么自然a的类型就是object。

接下来看最有意思的一点,仔细分析var a=new Array(),其实我们是通过构造函数来声明这个数组对象的,其中的Array()就是构造函数,既然是构造函数,那么其自然就是函数了,那么其和以下的这种形式就像类似了(当然以下是伪代码):

function Array(){

return ....

}

那么这个就和我们之前声明的hello()函数的结构是一样的,只是Array()是 JS全局函数,无需声明就可以直接使用。因此,我们自然也可以无需声明就来检测Array的数据类型,其结果就是function了。

alert(typeof(Array));   //弹出function

而当我们执行typeof(Array())时,由于Array()的运行结果是返回一个数组,而数组是Object的,因此其会返回Object。

alert(typeof(Array()));   //弹出Object

因此,请一定要搞清楚下面这些typeof()具体都是要返回什么东西的类型:

var a=new Array();

alert(typeof(a));      //弹出Object

alert(typeof(Array));   //弹出function

alert(typeof(Array()));   //弹出Object

其实类似的,我们还可以考虑typeof(Object)和typeof(Object())分别返回什么。

本文网址:http://www.shaoqun.com/a/304944.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值