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 相关文章推荐
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
Apr 12 Javascript
取键盘键位ASCII码的网页
Jul 30 Javascript
jQuery下通过replace字符串替换实现大小图片切换
May 22 Javascript
angularjs客户端实现压缩图片文件并上传实例
Jul 06 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
Dec 24 Javascript
详解javascript跨浏览器事件处理程序
Mar 27 Javascript
JavaScript数组合并的多种方法
May 22 Javascript
vue中使用localstorage来存储页面信息
Nov 04 Javascript
vue+element-ui+ajax实现一个表格的实例
Mar 09 Javascript
微信小程序全局变量功能与用法详解
Jan 22 Javascript
vue自定义指令实现方法详解
Feb 11 Javascript
JS使用iView的Dropdown实现一个右键菜单
May 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调用数据库的存贮过程
2006/10/09 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
php实现图片压缩处理
2020/09/09 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python实例之wxpython中Frame使用方法
2014/06/09 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
Python根据成绩分析系统浅析
2019/02/11 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
大学班级文化建设方案
2014/05/06 职场文书
2014年党务公开方案
2014/05/08 职场文书
重阳节活动总结
2014/08/27 职场文书
终止劳动合同协议书
2014/10/05 职场文书
政协会议宣传标语
2014/10/09 职场文书
《假如》教学反思
2016/02/17 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书