欢迎来到代码驿站!

JavaScript代码

当前位置:首页 > 网页前端 > JavaScript代码

js学习总结_基于数据类型检测的四种方式(必看)

时间:2020-12-04 03:10:53|栏目:JavaScript代码|点击:

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

console.log(typeof 12)//Number

使用typeof检测数据类型,首先返回的都是字符串 ,其次字符串中包含了对应的数据类型

例如:"number"、"string"、"boolean"、"undefined"、"function"、"object"

console.log(typeof typeof function(){}) //string

局限性:

typeof null -> "object"

不能具体的细分是数组还是正则,还是对象中其他的值,因为使用typeof检测数据类型,对于对象数据类型中的值,最后返回的结果都是"object"

2、instanceof 检测某一个实例是否属于某个类

var obj = [12,23];
    console.log(obj instanceof Array);

局限性:

对于基本数据类型来说,字面量方式创建出来的结果和实例方式创建出来的结果是有一定的区别的。从严格意义上讲,只有实例创建出来的结果才是标准的对象数据类型值,也是标准的Number这个类的一个实例;对于字面量方式创建出来的结果是基本的数据类型值,不是严谨的实例,但是由于JS的松散特点,导致了可以使用Number.prototype上的方法

1)、不能用来检测和处理字面量方式创建出来的基本数据类型值

console.log(1 instanceof Number);//false
console.log(new Number(1) instanceof Number)//true

2)、instanceof的特性:只要在当前实例的原型链上,我们用其检测的结果都为true

var ary = [];
    console.log(ary instanceof Array);//true
    console.log(ary instanceof Object);//true

    function fn(){

    }
    console.log(fn instanceof Function);//true
    console.log(fn instanceof Object);//true

3、constructor 构造函数 作用和instanceof非常的相似  constructor可以处理基本数据类型的检测

constructor检测Object和instanceof不一样 一般情况下是检测不了的

var obj = [];
    console.log(obj.constructor === Array)//true

    var num = 1;
    console.log(num.constructor === Number)//true

局限性:我们可以把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖掉了,这样检测出来的结果就不准确了。

对于特殊的数据类型null和undefined,他们所属的类是Null和Undefined,但是浏览器把这两个类保护起来了,不允许我们在外面访问使用

4、Object.prototype.toString.call() 最准确最常用的方式 各种类型的都可以检测(基本和引用)

首先获取Object原型上的toString方法,让方法执行,并且改变方法中的this关键字的指向

toString的理解:

表面上看应该是转化成字符串,但是某些toString方法不仅仅是转换为字符串

对于Number、String、Boolean、Array、RegExp、Date、Function原型上的toString方法都是把当前的数据类型转化为字符串的类型(他们的作用仅仅是用来转换为字符串的)

Object.prototype.toString()并不是用来转化为字符串的,他的作用是返回当前方法执行主体(方法中的this)所属类的详细信息。  

({name:"李四"}).toString() //[object object]
    Math.toString()//[object Math]

({name:"李四"}).toString() //[object object]
    Math.toString()//[object Math]

    var obj = {name:"张三"};
    console.log(obj.toString())//toString中的this是obj,返回的是obj所属的类的信息。[object Object] 第一个object代表当前实例是对象数据类型的(这个是固定的),第二个Object代表的是obj所属的类是Object

console.log((1).toString()) // "1" Number.prototype.toString转化为字符串

console.log((128).toString(2/8/10)) 把数字转化为2进制、8进制、10进制

所以上面的方法的检测如下 

var ary = [];
    console.log(Object.prototype.toString.call(ary))//[object Array]

上一篇:使用json-server简单完成CRUD模拟后台数据的方法

栏    目:JavaScript代码

下一篇:用js实现的页面关键字密度查询代码

本文标题:js学习总结_基于数据类型检测的四种方式(必看)

本文地址:http://www.codeinn.net/misctech/29109.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有