检测数据类型的几种方式

JS中检测数据类型只有四种方式

  • 1、typeof 用来检测数据类型的运算符

  [typeof value]

1)返回值:首先是一个字符串,然后包含了我们常用的数据类型,例如:"number"、"string"、"boolean"、"undefined"、"object"、"function"
typeof typeof typeof [12] -> "string"
2)typeof null ->"object" 因为null是一个空对象指针
3)typeof不能具体的细分对象、数组、正则等,因为不管检测哪一个返回的都是"object"
  • 2、instanceof / constructor
    • 1)instanceof:检测当前实例是否属于某一个类,属于的话返回true,不属于返回false
var ary=[];
ary instanceof Array ->true
ary instanceof RegExp ->false
ary instanceof Object ->true 所有的对象都是Object这个基类的一个实例
    • 2)constructor
ary.constructor===Array ->true 说明ary是Array这个类的一个实例(constructor可以让用户自己来修改,所有我们一般不用这个来检测)
    • 3)instanceof的局限性:只要在这个实例的原型链上的类,用instanceof检测的时候都为true

在类的继承中,我们只是单纯通过instanceof来检测数据类型的话是不准确的
[案例]

function Fn() {this.x=100;}
Fn.prototype = new Array;
var f = new Fn;
//f只是继承了数组中常用的方法,但是不是数组,例如:在梨树上嫁接苹果树,苹果树只是继承使用了梨树的水分和营养,但是长出来的果实还是苹果而不是梨
//console.log(f instanceof Fn);//->true
//console.log(f instanceof Array);//->true
//console.log(f instanceof Object);//->true

var oDiv=document.getElementById("div1");
//oDiv->HTMLDivElement->HTMLElement->Element->Node->EventTarget->Object
console.log(oDiv instanceof EventTarget);//->true
  • 3、toString检测数据类型(常用而且相对来说精准的检测方式,上述方式出现的缺陷在这里都弥补了)
    • 1)原理:在Object.prototype上有一个toString方法,这个方法执行的时候,会返回方法中this关键字对应数据值的数据类型,例如:
//Object.prototype.toString() ->返回的是 Object.prototype 的数据类型 ->"[object Object]"
//f.toString() ->返回的是f的数据类型 ->"[object Object]"
    • 2)这样的话,我们就可以让Object.prototype.toString执行,并且通过call/apply来改变里面的this关键字,也就是想检测谁的数据类型,我们就可以让this变为谁
Object.prototype.toString.call(12) ->检测12的数据类型 ->"[object Number]"
Object.prototype.toString.call("zhufeng") ->"[object String]"
Object.prototype.toString.call(null) ->"[object Null]"
Object.prototype.toString.call(undefined) ->"[object Undefined]"
Object.prototype.toString.call([]) ->"[object Array]"
Object.prototype.toString.call(/^$/) ->"[object RegExp]"
Object.prototype.toString.call(function(){}) ->"[object Function]"
    • 3)检测的返回值 -> "[object 当前数据类型所属的内置类]"

 

转载于:https://www.cnblogs.com/Scar007/p/7722881.html

### 回答1: CODESYS是一种常用的编程工具,用于开发和编写自动化控制系统中的应用程序。在CODESYS中,数据类型检测函数是一种用于判断和检测变量的数据类型的函数。 CODESYS提供了一些用于数据类型检测的函数,包括以下几个主要函数: 1. GetType:该函数可以返回一个变量的数据类型。通过使用GetType函数,我们可以得知一个变量是属于整型、浮点型、布尔型等类型。 2. IsBit:该函数用于检测一个变量是否为位类型。如果变量是位类型,即为1或0,函数将返回逻辑值真;如果变量不是位类型,函数将返回逻辑值假。 3. IsInt;IsReal:这两种函数分别用于检测一个变量是否为整型或浮点型。如果变量是整型或浮点型,函数将返回逻辑值真;如果变量不是整型或浮点型,函数将返回逻辑值假。 4. IsString:该函数用于检测一个变量是否为字符串类型。如果变量是字符串类型,函数将返回逻辑值真;如果变量不是字符串类型,函数将返回逻辑值假。 通过使用这些数据类型检测函数,我们可以确保变量在使用过程中的数据类型是正确的,避免了可能出现的数据类型不匹配的错误。这对于编写可靠和稳定的应用程序非常重要,特别是在自动化控制系统中,因为数据类型的不匹配可能会导致系统运行异常或产生错误。因此,熟练掌握并正确使用CODESYS的数据类型检测函数是非常重要的。 ### 回答2: CODESYS是一款常用于工控系统的编程软件,它具有丰富的数据类型,可以用于开发各种功能。在CODESYS中,我们可以使用数据类型检测函数来检测变量的数据类型。 CODESYS中常用的数据类型检测函数有两个:TYPEOF和IS_OF_TYPE。TYPEOF函数用于检测变量的数据类型,并返回一个代表数据类型的整数值,而IS_OF_TYPE函数则用于检测变量是否属于某一特定的数据类型。 对于TYPEOF函数,我们可以通过以下方式来使用: VAR myVariable: INT; typeCode: INT; END_VAR typeCode := TYPEOF(myVariable); 在上述代码中,我们定义了一个变量myVariable并赋值为一个INT类型的值,然后使用TYPEOF函数将变量的数据类型存储在typeCode中。如果myVariable的数据类型确实是INT类型,那么typeCode将被赋值为1。 对于IS_OF_TYPE函数,我们可以通过以下方式来使用: VAR myVariable: INT; isType: BOOL; END_VAR isType := IS_OF_TYPE(myVariable, INT); 在上述代码中,我们定义了一个变量myVariable并赋值为一个INT类型的值,然后使用IS_OF_TYPE函数判断myVariable是否是INT类型。如果myVariable是INT类型,isType将被赋值为真(TRUE)。 通过使用CODESYS提供的数据类型检测函数,我们可以在编程过程中方便地检测变量的数据类型,以确保程序的正确性和稳定性。这对于开发工控系统和其他需要严格数据类型控制的应用非常重要。 ### 回答3: CODESYS是一种常用的可编程控制器开发环境,其代码中使用的数据类型检测函数用于检测变量的数据类型。CODESYS提供了多种数据类型,包括基本数据类型比如整数、浮点数、布尔值,以及复合数据类型比如数组、结构体等。 CODESYS的数据类型检测函数主要有以下几种: 1. `TYPEOF()`函数:该函数用于返回变量的数据类型。例如,`TYPEOF(a)`会返回变量`a`的数据类型。如果`a`是整数,则返回`INT`;如果`a`是浮点数,则返回`REAL`;如果`a`是布尔值,则返回`BOOL`等。 2. `IS_`系列函数:该系列函数用于判断变量是否属于某个特定的数据类型。例如,`IS_INT(a)`会返回变量`a`是否是整数类型,如果是则返回TRUE;`IS_BOOL(a)`会返回变量`a`是否是布尔类型,如果是则返回TRUE,否则返回FALSE。 3. `PRIM_TYPEOF()`函数:该函数用于返回变量的原始数据类型。例如,`PRIM_TYPEOF(a)`会返回变量`a`的原始数据类型。如果`a`是数组类型,则返回数组元素的数据类型;如果`a`是结构体类型,则返回第一个元素的数据类型;如果`a`是自定义类型,则返回自定义类型的数据类型。 通过使用上述的数据类型检测函数,可以在CODESYS中进行变量类型的判断和处理。这在编程时非常有用,可以根据变量的数据类型来执行不同的逻辑操作,提高程序的灵活性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值