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模拟JQuery的show与hide动画函数代码
Sep 20 Javascript
基于jquery封装的一个js分页
Nov 15 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
Jan 15 Javascript
js前台判断开始时间是否小于结束时间
Feb 23 Javascript
javascript运行机制之this详细介绍
Feb 07 Javascript
关于jQuery判断元素是否存在的问题示例探讨
Jul 21 Javascript
jquery实现通用的内容渐显Tab选项卡效果
Sep 07 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
Jul 28 Javascript
Node.js调试技术总结分享
Mar 12 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
Mar 28 Javascript
js传递数组参数到后台controller的方法
Mar 29 Javascript
js正则取值的结果数组调试方法
Oct 10 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
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
php 删除记录实现代码
2009/03/12 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
JS 树形递归实例代码
2010/05/18 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
Python中的魔法方法深入理解
2014/07/09 Python
Python 转义字符详细介绍
2017/03/21 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
养殖人员的创业计划书范文
2013/12/26 职场文书
小学后勤管理制度
2014/01/14 职场文书
教师个人读书活动总结
2014/07/08 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
给老婆的检讨书1000字
2015/01/01 职场文书
毕业生个人总结
2015/02/28 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js