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


Posted in Javascript onJuly 04, 2017

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]

以上这篇js学习总结_基于数据类型检测的四种方式(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS子父窗口互相操作取值赋值的方法介绍
May 11 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
jquery实现html页面 div 假分页有原理有代码
Sep 06 Javascript
简单的JS时钟实例讲解
Jan 13 Javascript
AngularJS向后端ASP.NET API控制器上传文件
Feb 03 Javascript
JS三级可折叠菜单实现方法
Feb 29 Javascript
基于Node.js实现压缩和解压缩的方法
Feb 13 Javascript
使用vue2实现购物车和地址选配功能
Mar 29 Javascript
react router4+redux实现路由权限控制的方法
May 03 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 Javascript
Openlayers显示瓦片网格信息的方法
Sep 28 Javascript
javascript中layim之查找好友查找群组
Feb 06 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
Jul 04 #Javascript
javascript 初学教程及五子棋小程序的简单实现
Jul 04 #Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 #Javascript
JS全角与半角转化实例(分享)
Jul 04 #Javascript
详解如何提高 webpack 构建 Vue 项目的速度
Jul 03 #Javascript
vue.js源代码core scedule.js学习笔记
Jul 03 #Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
Jul 03 #Javascript
You might like
php文件读取方法实例分析
2015/06/20 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
PHP 实现重载
2021/03/09 PHP
用js解决数字不能换行问题
2010/08/10 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
理解Python垃圾回收机制
2016/02/12 Python
python 接口返回的json字符串实例
2018/03/27 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
python生成n个元素的全组合方法
2018/11/13 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
python 解决函数返回return的问题
2020/12/05 Python
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
自我评价的正确写法
2013/09/19 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
青年标兵事迹材料
2014/08/16 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
自我推荐信怎么写
2015/03/24 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫