JavaScript学习总结(六)——JavaScript判断数据类型总结

  最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断,在此做一个总结吧!

一、JS中的数据类型

   1.数值型(Number):包括整数、浮点数。

   2.布尔型(Boolean)

   3.字符串型(String)

   4.对象(Object)

   5.数组(Array)

   6.空值(Null)

   7.未定义(Undefined)

二、判断一个变量的数据类型

1.数值型(number)

  比较常用的判断方法是:

1 function isNumber(val){
2      return typeof val === 'number';
3 }

  但有些情况就不行,比如:

1 var a;
2 alert(isNumber(parseInt(a)));

  这里弹出来的是true,如下图所示:

  但实际上变量a是NaN,它是不能用于数值运算的。

  所以上面的函数可以修改为:

1 function isNumber(val){
2      return typeof val === 'number' && isFinite(val);
3 }

修改了之后,弹出来的就是false,如下图所示:

  顺便介绍一下JavaScript isFinite() 函数,isFinite() 函数用于检查其参数是否是无穷大,如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false

2.布尔型(boolean)

  布尔类型的判断比较简单,可以用如下的方法进行判断:

1 /*
2 判断变量val是不是布尔类型
3 */
4 function isBooleanType(val) {
5     return typeof val ==="boolean";
6 }

测试代码:

 1 <script type="text/javascript">
 2     /*
 3     判断变量val是不是布尔类型
 4     */
 5     function isBooleanType(val) {
 6         return typeof val ==="boolean";
 7     }
 8     var a;
 9     var b = false;
10     alert("变量a是布尔类型的判断结果是:"+isBooleanType(a));
11     alert("变量b是布尔类型的判断结果是:"+isBooleanType(b));
12 </script>

运行结果:

  

3. 字符串(String)

  字符串类型的判断比较简单,可以用如下的方法进行判断:

1 /*
2 判断变量是不是字符串类型
3 */
4 function isStringType(val) {
5     return typeof val === "string";
6 }

测试代码:

 1 <script type="text/javascript">
 2     /*
 3     判断变量是不是字符串类型
 4     */
 5     function isStringType(val) {
 6         return typeof val === "string";
 7     }
 8 
 9     var a;
10     var s = "strType";
11     alert("变量a是字符串类型的判断结果是:"+isStringType(a));
12     alert("变量s是字符串类型的判断结果是:"+isStringType(s));
13 </script>

运行结果:

4.未定义(Undefined)

  未定义的判断比较简单,可以用如下的方法进行判断:

1 /*
2 判断变量是不是Undefined
3 */
4 function isUndefined(val) {
5     return typeof val === "undefined";
6 }

测试代码:

 1 <script type="text/javascript">
 2     var a;//a是undefined
 3     var s = "strType";
 4     /*
 5     判断变量是不是Undefined
 6     */
 7     function isUndefined(val) {
 8         return typeof val === "undefined";
 9     }
10     alert("变量a是Undefined的判断结果是:"+isUndefined(a));
11     alert("变量s是Undefined的判断结果是:"+isUndefined(s));
12 </script>

运行结果:

5.对象(Object)

  由于当变量是空值Null时,typeof也会返回object,所以Object不能直接用 typeof 判断。

应该这样:

1 function isObj(str){
2     if(str === null || typeof str === 'undefined'){
3         return false;
4     }
5     return typeof str === 'object';
6 }

测试代码:

 1 <script type="text/javascript">
 2     /*
 3     判断变量是不是Object类型
 4     */
 5     function isObj(str){
 6          if(str === null || typeof str === 'undefined'){
 7              return false;
 8          }
 9          return typeof str === 'object';
10     }
11 
12     var a;
13     var b = null;
14     var c = "str";
15     var d = {};
16     var e = new Object();
17 
18     alert("b的值是null,typeof b ==='object'的判断结果是:"+(typeof b ==='object'));
19     alert("变量a是Object类型的判断结果是:"+isObj(a));//false
20     alert("变量b是Object类型的判断结果是:"+isObj(b));//false
21     alert("变量c是Object类型的判断结果是:"+isObj(c));//false
22     alert("变量d是Object类型的判断结果是:"+isObj(d));//true
23     alert("变量e是Object类型的判断结果是:"+isObj(e));//true
24 </script>

运行结果:

6.空值(Null)

  判断空值用 val === null 即可

1 function isNull(val){
2       return  val === null;
3 }

测试代码:

 1 /*
 2 判断变量是不是null
 3 */
 4 function isNull(val){
 5      return  val === null;
 6 }
 7 /*测试变量*/
 8 var a;
 9 var b = null;
10 var c = "str";
11 //弹出运行结果
12 alert("变量a是null的判断结果是:"+isNull(a));//false
13 alert("变量b是null类型的判断结果是:"+isNull(b));//true
14 alert("变量c是null类型的判断结果是:"+isNull(c));//false

运行结果:

7.组(Array

  数组类型不可用typeof来判断。因为当变量是数组类型是,typeof会返回object

  这里有两种方法判断数组类型:

 1 /*判断变量arr是不是数组
 2 方法一
 3 */
 4 function isArray1(arr) {
 5     return Object.prototype.toString.apply(arr) === '[object Array]';
 6 }
 7 
 8 /*判断变量arr是不是数组
 9 方法二
10 */
11 function isArray2(arr) {
12     if(arr === null || typeof arr === 'undefined'){
13         return false;
14     }
15     return arr.constructor === Array;
16 }

测试代码:

 1 <script type="text/javascript">
 2 /*判断变量arr是不是数组
 3 方法一
 4 */
 5 function isArray1(arr) {
 6     return Object.prototype.toString.apply(arr) === '[object Array]';
 7 }
 8 /*判断变量arr是不是数组
 9 方法二
10 */
11 function isArray2(arr) {
12     if(arr === null || typeof arr === 'undefined'){
13         return false;
14     }
15     return arr.constructor === Array;
16 }
17 //测试变量
18 var a = null;
19 var b = "";
20 var c ;
21 var arr1 = [1,2,3];
22 var arr2 = new Array();
23 //打印测试结果
24 document.write("arr1变量是数组类型,typeof arr1 === 'object'的结果是:"+(typeof arr1 === 'object'));
25 document.write("<br/>");
26 document.write("------------------------------------------------------------------------------------------------");
27 document.write("<br/>");
28 document.write("使用isArray1方法判断结果如下:");
29 document.write("<br/>");
30 document.write("------------------------------------------------------------------------------------------------");
31 document.write("<br/>");
32 document.write("变量a是数组类型的判断结果是:"+isArray1(a));
33 document.write("<br/>");
34 document.write("变量b是数组类型的判断结果是:"+isArray1(b));
35 document.write("<br/>");
36 document.write("变量c是数组类型的判断结果是:"+isArray1(c));
37 document.write("<br/>");
38 document.write("变量arr1是数组类型的判断结果是:"+isArray1(arr1));
39 document.write("<br/>");
40 document.write("变量arr2是数组类型的判断结果是:"+isArray1(arr2));
41 document.write("<br/>");
42 document.write("------------------------------------------------------------------------------------------------");
43 document.write("<br/>");
44 document.write("使用isArray2方法判断结果如下:");
45 document.write("<br/>");
46 document.write("------------------------------------------------------------------------------------------------");
47 document.write("<br/>");
48 document.write("变量a是数组类型的判断结果是:"+isArray2(a));
49 document.write("<br/>");
50 document.write("变量b是数组类型的判断结果是:"+isArray2(b));
51 document.write("<br/>");
52 document.write("变量c是数组类型的判断结果是:"+isArray2(c));
53 document.write("<br/>");
54 document.write("变量arr1是数组类型的判断结果是:"+isArray2(arr1));
55 document.write("<br/>");
56 document.write("变量arr2是数组类型的判断结果是:"+isArray2(arr2));
57 document.write("<br/>");
58 </script>

运行结果:

  

转载于:https://www.cnblogs.com/xdp-gacl/p/3490065.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

material 项目_Web开发必备的 10 个开源项目,不用自己亲自造轮子!

来自&#xff1a;Java and Python君Web 开发中几乎的平台都需要一个后台管理&#xff0c;但是从零开发一套后台控制面板并不容易&#xff0c;幸运的是有很多开源免费的后台控制面板可以给开发者使用&#xff0c;那么有哪些优秀的开源免费的控制面板呢&#xff1f;我在 Github 上…

香辣弹簧:自动接线的不同方法

我想展示使用Spring的Autowired批注的不同方式&#xff1a; Constructor &#xff0c; Method和Field自动装配。 我展示的示例都是byType自动装配模式的一种形式&#xff08; constructor自动装配模式类似于byType &#xff09;。 请参阅Spring Reference指南 &#xff0c;以获…

SVN部署(本地)

1.安装TortoiseSVN 2.建立Repository。在F:/下建立文件夹SVN_NATIVE_REPOSITORY&#xff0c; —— 》 3.在其他任意路径建立任意名称的路径&#xff0c;这里为D:\MSVC Project\SVN_WORK&#xff0c;确保该文件夹为空 右键单击&#xff0c;点击SVN Checkout&#xff0c; 第一行 …

InetAddressImpl#lookupAllHostAddr慢/挂起

自从我升级到优胜美地以来&#xff0c;我已经注意到尝试解析我的家庭网络上的本地主机已经花费了很多时间&#xff08;有时超过一分钟&#xff09;&#xff0c;所以我想我会尝试找出原因。 这是我的初始/ etc / hosts文件的外观&#xff0c;它基于我的机器的主机名是teetotal的…

mysql sqlserver schema_MySQL数据库数据迁移到SQLserver

最近因工作需要&#xff0c;需要将mysql数据库迁移到sqlserver&#xff0c;仅仅是数据迁移&#xff0c;因此相对比较简单。对于mysql迁移到sqlserver&#xff0c;我们需要使用到mysql odbc驱动&#xff0c;然后透过sqlserver链接服务器的方式来访问mysql。具体见下文描述。一、…

mysql客户端安装错误_windows下mysql 5.7以上版本安装及遇到的问题

(原)早些前用window安装mysql挺简单的&#xff0c;一个安装程序&#xff0c;一路下一步。2006的5.0版本&#xff0c;确实太早了点。于是官网上又下了一个版本&#xff0c;windows也是提供了二个版本Installer(安装)版和Archive(文档)版。Installer版本的后缀是.msi&#xff0c;…

SP2010开发和VS2010专家食谱--第二章节--工作流

本章内容&#xff1a; 1. 创建顺序工作流。 2. 创建带有初始表单的网站工作流。 3. 从工作流创建任务。 4. 创建自定义任务表单。 Introduction 根据国际工作流联盟&#xff08;http://www.WFMC.org&#xff09;标准组织&#xff0c;完全致力于流程&#xff0c;这样定义工作流&…

sklearn中eof报错_sklearn中的数据预处理和特征工程

小伙伴们大家好~o(&#xffe3;▽&#xffe3;)ブ&#xff0c;今天我们看一下Sklearn中的数据预处理和特征工程&#xff0c;老规矩还是先强调一下&#xff0c;我的开发环境是Jupyter lab&#xff0c;所用的库和版本大家参考&#xff1a;Python 3.7.1&#xff08;你的版本至少要…

sql显示前10行数据_SPL 简化 SQL 案例详解:计算各组前 N 行

取出各组的前N行数据是较常见的运算&#xff0c;比如&#xff1a;每个月每种产品销量最高的五天是哪五天&#xff0c;每位员工涨薪最多的一次是哪次&#xff0c;高尔夫会员成绩最差的三次是哪三次&#xff0c;等等。在SQL中&#xff0c;这类运算要用窗口函数以及keep/top/rownu…

jquery 与其他库冲突解决方案

var j jQuery.noConflict();j("div p").hide(); // 基于 jQuery 的代码$("content").style.display "none"; // 基于其他库的 $() 代码转载于:https://www.cnblogs.com/timelesszhuang/p/3677845.html

11. mysql锁机制_深入探讨MySQL锁机制

MySQL锁机制究竟是怎样的呢&#xff1f;这是很多人都提到过的问题&#xff0c;下面就为您详细介绍MySQL锁机制方面的知识&#xff0c;希望可以让您MySQL锁机制有更多的了解。当前MySQL已经支持 ISAM, MyISAM, MEMORY (HEAP) 类型表的表级锁了&#xff0c;BDB 表支持页级锁&…

4月21日会议总结(整理—祁子梁)

会议成果&#xff1a; 1.今天我们确定了软件版本的时间alphe版在12周做出来&#xff0c;在我们内部测试基本通过。 bate版在13周发布和其他组作交换测试&#xff0c;在14周release版发布并给其他人使用体验准备15周的演讲。 2.同时确定了部分功能实现顺序&#xff0c;”谁是卧底…

通达信金融终端_尘缘整合_V7.12

http://pan.baidu.com/s/1gvtPO http://pan.baidu.com/s/1xqrk6 通达信金融终端_尘缘整合_V7.12转载于:https://www.cnblogs.com/mier001/p/3679701.html

5天玩转mysql视频教程_六天带你玩转MySQL

教程列表&#xff1a;01数据库课程介绍02数据库(基础知识)03数据库(关系型数据库)04数据库(关系型数据库关键字说明)05数据库(SQL)06数据库(mysql数据库)07数据库(mysql服务器数据对象)08SQL基本操作(新增数据库)09SQL基本操作(查看数据库)10SQL基本操作(更新数据库)12SQL基本操…

winxp精简版没有IIS的解决办法

首先在“开始”菜单的“运行”中输入“c:\Windows\inf\sysoc.inf”&#xff0c;系统会自动使用记事本打开sysoc.inf这个文件。在sysoc.inf中找到“[Components]”这一段&#xff0c;因为是XP简化版&#xff0c;所以里面东西很少&#xff0c;在里面加上这段&#xff1a;“iisiis…

ant vue 兼容性问题_ant design for vue 关于table的一些问题

1、为table添加分页&#xff1a; :pagination"pagination"pagination: {defaultPageSize: 10,showTotal: (total) > 共${total} 条数据,total: 0,showSizeChanger: true,pageSizeOptions: [10, 20, 50],onShowSizeChange: (current, pageSize) > {this.pageSiz…

Coder-Strike 2014 - Finals (online edition, Div. 2) A. Pasha and Hamsters

水题 #include <iostream> #include <vector> #include <algorithm>using namespace std;int main(){int n,a,b;cin >> n >>a >> b;vector<int> apple(n1,0);int k;for(int i 0 ; i < a; i) {cin>>k;apple[k] 1;}for(…

如何查看mysql的gtid_汇总丨MySQL GTID技术点,看这一篇就够了!

mysql> SELECT * FROM mysql.gtid_executed;mysql.gtid_executed表是由MySQL服务器提供给内部使用的。它允许副本在副本上禁用二进制日志记录时使用GTIDs&#xff0c;并允许在二进制日志丢失时保留GTID状态。RESET MASTER命令&#xff0c;gtid_executed表将被清除。服务意外…

为JPA的本机查询API键入安全查询

当您使用JPA时-有时-JPQL无法解决问题&#xff0c;您将不得不使用本机SQL。 从一开始&#xff0c;像Hibernate这样的ORM就为这些情况保留了一个开放的“后门”&#xff0c;并为Spring的JdbcTemplate &#xff0c; Apache DbUtils或jOOQ提供了类似的API&#xff0c;用于纯SQL 。…

vb.net详解MDI窗体操作方法

MDI窗体可以避免打开窗体的时候被无数个子窗体困扰&#xff0c;我将为大家一一的介绍一下vb.net中MDI窗体的操作方法 一、如何创建MDI窗体&#xff1f; 1、创建mdi主窗体 新建建立一个默认空白的Windows应用程序&#xff0c;在Form1窗体的属性窗口中找到IsMDIContainer 属性&am…