从typeof()说起
本文也同步发表在我的公众号“我的天空”
首先我们先思考一下,执行下列语句分别会显示什么?
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())分别返回什么。
从typeof()说起的更多相关文章
- JavaScript instanceof vs typeof
Use instanceof for custom typesvar ClassFirst = function () {};var ClassSecond = function () {};var ...
- JS中typeof与instanceof的区别
JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: Typeof typeof 是一个一元运算,放在一个运算数之前 ...
- js中typeOf用法
JS中的变量是松散类型(即弱类型)的,可以用来保存任何类型的数据. typeof 可以用来检测给定变量的数据类型,可能的返回值:1. 'undefined' --- 这个值未定义: 2. 'boole ...
- C# GetType与typeof
在反射和泛型中经常会使用到Type类,获取Type的最常用的方法是 obj.GetType(),和typeof(T).在获取泛型的type时有些小坑. public static void Main( ...
- _weak typeof(self) weakSelf = self;
_weak typeof(self) weakSelf = self; (一)内存管理原则 1.默认strong,可选weak.strong下不管成员变量还是property,每次使用指针指向一个对象 ...
- js中typeof和instanceof
对于typeof和instanceof,我们经常用来检测数据的类型.typeof可以检测Number.Boolean.String.Undefined类型,对于其他类型的数据都返回为object:而i ...
- Js的typeof和Js的基本数据类型
本文将从以下几个方面介绍Js的typeof和Js的基本数据类型: ** Js的typeof的用法 ** Js的基本数据类型 ** 使用基本类型使用typeof的返回结果 ** Js的typeof的用法 ...
- JS typeof与instanceof的区别
typeof 与 instanceof 通常是用来判断一个变量的类型,二者有如下区别: typeof: 判断一个变量的类型,返回值是字符串形式,返回结果有如下几种: number,boolean,st ...
- indexOf、instanceOf、typeOf、valueOf详解
1.indexOf() 该方法用来返回某个指定的字符串值在字符串中首次出现的位置. 语法:indexOf(searchvalue,fromindex);两个参数,参数一表示查询的字符串值,参数二可选表 ...
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
随机推荐
- express使用https
目录 申请免费ssl证书 修改express的./bin/www 申请免费ssl证书 直接去阿里云申请一个免费的ssl,选择neginx下载证书就可以了,解压得到一个xxx.key.xxx.crt文件 ...
- 组播基本概念、IGMP、IGMP监听学习笔记
前言 一直对组播这个概念迷迷糊糊,特别是交换机处理组播的方式,非常想搞懂但是懒癌发作.这几天终于耐心地看了下有关组播的资料,大致了解了一下同一广播域内组播的相关知识.组播占了计算机网络的一大部分,特别 ...
- 查看MySql数据库物理文件存放位置
查找数据库文件位置使用命令 show global variables like "%datadir%";
- wamp + wordpress 安装
WAMP是一个windows上的php开发集成环境,一键安装php,apache和mysql,非常方便. 双击wampserver2.2exxxxxxxxxx.exe文件进行安装,安装过程中直接下一步 ...
- [51nod1102]面积最大的矩形(单调栈||预处理)
题意:求序列上某区间最小值乘区间长度的最大值. 解题关键:很早就在<挑战程序设计竞赛>中见过了,单调栈模板题,注意弹栈时如何处理后面的元素. 法一:单调栈 #include<bits ...
- [hdu4812]D Tree(点分治)
题意:问有多少条路径,符合路径上所有节点的权值乘积模1000003等于k. 解题关键:预处理阶乘逆元,然后通过hash和树形dp$O(1)$的判定乘积存在问题,注意此道题是如何处理路径保证不重复的,具 ...
- iwork 文件格式分析
根据维基百科,到2015年苹果推出的iwork版本 第一章:iwork2008介绍 1.文档结构: 是一个资源合集:压缩格式的(内含文件夹和文件) 在windows下修改iwork的文件后缀为.rar ...
- SQL Server(三)
一.数据库操作 create database 数据库名称 ——创建drop database 数据库名称 ——删除use 数据库名称 ——使用go 两条SQL语句之间分隔 二.表的操作 create ...
- SQL中的limit
SELECT * FROM employees ORDER BY hire_date DESC LIMIT 2,1; LIMIT m,n : 表示从第m+1条开始,取n条数据: LIMIT n : 表 ...
- Unity 5.6 beta版本新特性
http://manew.com/thread-98549-1-1.html 最新发布的beta版改进了编辑器和2D功能,图形性能更佳,加入新的视频播放器,并添加了对Facebook Gameroom ...