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 相关文章推荐
仿微博字符限制效果实现代码
Apr 20 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 Javascript
小结Node.js中非阻塞IO和事件循环
Sep 18 Javascript
JavaScript 动态加载脚本和样式的方法
Apr 13 Javascript
JavaScript 常见安全漏洞和自动化检测技术
Aug 21 Javascript
javascript弹出窗口实现代码
Nov 12 Javascript
JavaScript实现图片滑动切换的代码示例分享
Mar 06 Javascript
AngularJS模板加载用法详解
Nov 04 Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
Feb 17 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
Oct 29 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
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 Hash函数,增强密码安全
2011/02/25 PHP
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
javascript里使用php代码实例
2014/12/13 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
python列表操作使用示例分享
2014/02/21 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
中学生在校期间的自我评价分享
2013/11/13 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
社区母亲节活动方案
2014/03/05 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
党员服务承诺书
2014/05/28 职场文书
商业街策划方案
2014/05/31 职场文书
花坛标语大全
2014/06/30 职场文书
给老师的一封感谢信
2015/01/20 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
2016特色励志班级口号
2015/12/24 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫
2022微信温控新功能上线
2022/05/09 数码科技