首页 web前端 js教程 浅谈javascript的数据类型检测_javascript技巧

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

May 16, 2016 pm 06:23 PM
数据类型

一、javascript的数据
javascript的数据分为两种:简单数据和复杂数据。简单数据包含number,string,boolean,undefined和null这五种;复杂数据只有一种即object。【此处友情鸣谢李战老师,>写得太传神,印象太深刻了】

二、javascript的数据类型检测
1、万能的typeof
我们先测试一下通过typeof来获取简单数据类型。什么也别说了,上代码是王道:
复制代码 代码如下:

// 获取变量obj的数据类型
function getType(obj) {
return typeof (obj);
}
/*常量获取类型*/
alert(getType(1)); //number
alert(getType("jeff wong")); //string
alert(getType(true)); //boolean
alert(getType(undefined)); //undefined
alert(getType(null)); //object
/*变量获取类型*/
var num = 1;
var str = "jeff wong";
var flag = true;
var hell = undefined;
var none = null;
alert(getType(num)); //number
alert(getType(str)); //string
alert(getType(flag)); //boolean
alert(getType(hell)); //undefined
alert(getType(none)); //object

正如你所看到的那样,通过typeof运算符,前面四个简单数据类型完全在意料之中,但是typeof null却返回object。应该注意到,null是null类型的唯一值,但null并不是object,具有null值的变量也并非object,所以直接通过typeof,并不能正确得到null类型。 要正确获取简单数据类型,只要在getType的地方加点改进就可以了:
复制代码 代码如下:

function getType(obj) {
return (obj === null) ? "null" : typeof (obj);
}

接着来试一下复杂数据类型object:
复制代码 代码如下:

function Cat() {
}
Cat.prototype.CatchMouse = function () {
//do some thing
}
// 获取变量obj的数据类型
function getType(obj) {
return (obj === null) ? "null" : typeof (obj);
}
var obj = new Object();
alert(getType(obj)); //object
var func = new Function();
alert(getType(func)); //function
var str = new String("jeff wong");
alert(getType(str)); //object
var num = new Number(10);
alert(getType(num)); //object
var time = new Date();
alert(getType(time)); //object
var arr = new Array();
alert(getType(arr)); //object
var reg = new RegExp();
alert(getType(reg)); //object
var garfield = new Cat();
alert(getType(garfield)); //object

我们看到,除了Function(请注意大小写)返回了function,不管是javascript的常见内置对象Object,String或者Date等等,还是自定义function,通过typeof返回的无一例外,通通都是object。但是对于自定义function,我们更愿意得到它的“庐山真面目”(示例中即Cat,而非object),而显然,typeof不具备这种转换处理能力。
2、constructor,想大声说爱你
既然万能的typeof也有无解的时候,那么我们怎么判断一个变量是否是自定义的function实例呢?我们知道,javascript的所有对象都有一个constructor属性,这个属性可以帮我们判断object数据类型,尤其是对自定义function同样适用:
复制代码 代码如下:

var obj = "jeff wong";
alert(obj.constructor == String); //true
obj = new Cat();
alert(obj.constructor == Cat); //true

但是,下面的代码您也可以测试一下:
复制代码 代码如下:

//alert(1.constructor); //数字常量 出错 数字常量无constructor
var num = 1;
alert(num.constructor == Number); //true
alert("jeff wong".constructor == String); //true
var str = "jeff wong";
alert(str.constructor == String); //true
var obj= null;
alert(obj.constructor); //null没有constructor属性
none = undefined;
alert(obj.constructor); //undefined没有constructor属性

实验证明,数字型常量,null和undefined都没有constructor属性。
到这里,您会和楼猪一样庆幸认为终于大功告成了吗?下面的代码或许还能有点启发和挖掘作用:
复制代码 代码如下:

function Animal() {
}
function Cat() {
}
Cat.prototype = new Animal();
Cat.prototype.CatchMouse = function () {
//do some thing
}
var obj = new Cat();
alert(obj.constructor == Cat); //false ??
alert(obj.constructor == Animal); //true 理解

原来对于原型链继承的情况,constuctor也不那么好使了。那怎么办?
3、直观的instanceof
嘿嘿,有请instanceof隆重登场。看它的命名,好像是获取某一个对象的实例,也不知这样理解对不对?不管怎样,我们还是动手改进上面的代码测试一下先:
复制代码 代码如下:

function Animal() {
}
function Cat() {
}
Cat.prototype = new Animal();
Cat.prototype.CatchMouse = function () {
//do some thing
}
var garfield = new Cat();
alert(garfield instanceof Cat); //true 毫无疑问
alert(garfield instanceof Animal); //true 可以理解

好了,关于javascript的数据类型检测,楼猪就大致总结介绍到这里了。希望有心的高人补充。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
MySQL数据库中性别字段应该使用什么数据类型? MySQL数据库中性别字段应该使用什么数据类型? Mar 14, 2024 pm 01:21 PM

在MySQL数据库中,性别字段通常可以使用ENUM类型来存储。ENUM是一种枚举类型,它允许我们在一组预定义的值中选择一个作为字段的值。在表示性别这样一个固定且有限的选项时,ENUM是一个很好的选择。让我们来看一个具体的代码示例:假设我们有一个名为"users"的表,其中包含了用户的信息,包括性别。现在我们要为性别创建一个字段,我们可以这样设计表结构:CRE

MySQL中最适合用于性别字段的数据类型是什么? MySQL中最适合用于性别字段的数据类型是什么? Mar 15, 2024 am 10:24 AM

在MySQL中,最适合用于性别字段的数据类型是ENUM枚举类型。ENUM枚举类型是一种允许定义一组可能取值的数据类型,性别字段适合使用ENUM类型是因为性别通常仅有两个取值,即男和女。接下来,我将通过具体的代码示例来展示如何在MySQL中创建一个性别字段并使用ENUM枚举类型存储性别信息。以下是操作步骤:首先,在MySQL中创建一个名为users的表格,包括

Python 语法的思维导图:深入理解代码结构 Python 语法的思维导图:深入理解代码结构 Feb 21, 2024 am 09:00 AM

python凭借其简单易读的语法,广泛应用于广泛的领域中。掌握Python语法的基础结构至关重要,既可以提高编程效率,又能深入理解代码的运作方式。为此,本文提供了一个全面的思维导图,详细阐述了Python语法的各个方面。变量和数据类型变量是Python中用于存储数据的容器。思维导图展示了常见的Python数据类型,包括整数、浮点数、字符串、布尔值和列表。每个数据类型都有其自身的特性和操作方法。运算符运算符用于对数据类型执行各种操作。思维导图涵盖了Python中的不同运算符类型,例如算术运算符、比

MySQL中布尔类型的使用方法详解 MySQL中布尔类型的使用方法详解 Mar 15, 2024 am 11:45 AM

MySQL中布尔类型的使用方法详解MySQL是一种常用的关系型数据库管理系统,在实际应用中经常需要使用布尔类型来表示逻辑上的真假值。MySQL中布尔类型有两种表示方式:TINYINT(1)和BOOL。本文将详细介绍MySQL中布尔类型的使用方法,包括布尔类型的定义、赋值、查询和修改等操作,同时结合具体的代码示例进行说明。1.布尔类型的定义在MySQL中,可

MySQL中性别字段最佳数据类型选择是什么? MySQL中性别字段最佳数据类型选择是什么? Mar 14, 2024 pm 01:24 PM

在设计数据库表时,选择合适的数据类型对于性能优化和数据存储效率非常重要。在MySQL数据库中,存储性别字段的数据类型真是没有所谓的最佳选择,因为性别字段一般只有两个取值:男或女。但是为了效率和节省空间,我们可以选择合适的数据类型来存储性别字段。在MySQL中,存储性别字段最常用的数据类型是枚举类型。枚举类型是一种能够把字段的值限定在一个有限的集合内的数据类型

揭秘主流编程语言中的基本数据类型分类 揭秘主流编程语言中的基本数据类型分类 Feb 18, 2024 pm 10:34 PM

标题:基本数据类型大揭秘:了解主流编程语言中的分类正文:在各种编程语言中,数据类型是非常重要的概念,它定义了可以在程序中使用的不同类型的数据。对于程序员来说,了解主流编程语言中的基本数据类型是建立坚实程序基础的第一步。目前,大多数主流编程语言都支持一些基本的数据类型,它们在语言之间可能有所差异,但主要概念是相似的。这些基本数据类型通常被分为几个类别,包括整数

C语言的基本语法和数据类型介绍 C语言的基本语法和数据类型介绍 Mar 18, 2024 pm 04:03 PM

C语言是一种广泛使用的计算机编程语言,具有高效、灵活和强大的特点。要想熟练使用C语言进行编程,首先需要了解其基本语法和数据类型。本文将介绍C语言的基本语法和数据类型,并举例说明。一、基本语法1.1注释在C语言中,可以使用注释来对代码进行说明,以便于理解和维护。注释可以分为单行注释和多行注释。//这是单行注释/*这是多行注释*/1.2关键字C语

Python学习必备的基础知识有哪些? Python学习必备的基础知识有哪些? Jan 13, 2024 pm 01:37 PM

学习Python前需要掌握哪些基础知识?随着人工智能、大数据和云计算等技术的不断发展,编程已成为现代社会中一个越来越重要的技能。而Python作为一门简洁易学且功能强大的编程语言,越来越受到广大程序员和初学者的青睐。如果你也打算学习Python,那么在开始之前有一些基础知识是必须掌握的。理解编程的基本概念在开始学习任何一门编程语言之前,首先需要理解一些基本的

See all articles