javaScript的数据检测

1.typeof

1.1-第一题

检测数据类型的运算符

typeof 12;//'number'
typeof "ss"//'string'
...
typeof null;//object
typeof new RegExp('');//object 检测的结果又这六种: number string undefined object function boolean

设置b的默认值

方式一:

function(a,b){
if(typeof b==="undefined"){
b=0;
}else{
b=b;
}
}

方式2

	b=b||0

有区别

function(10,false);
//这个时候方式二的b的值也是0
//方式一的b的值是false

1.2第二题

function fn(callback){
//typeof callback==="function"?callback():null;
callback&&callback();
} fn(functtin(){
...
});

2.instanceof

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

console.log([].instanceof Array);//true

局限性:

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

  • 对于基本数据类型来说,字面量创将建出来的结果和实例创建出来的结果是有一定区别的;

    1. 严格意义上讲,只有实例创建出来的结果才是标准数据类型值,也是标准的Number的一个实例
    2. 对于字面量方式创建出来的结果是基本数据类型,不是严谨的实例,但由于js的松散的特点,导致其可以使用 Number.prototype的方法

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

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


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

[] instanceof Array//true
[] instanceof Object//true fnunctin fn(){...}
fn instanceof Function//true
fn instanceof Object//true

3.在类的原型继承中,instanceof检测出来的结果未必准确

function Fn(){
...
}
Fn.prototype = new Array();//原型继承,让子类的原型指向父类的一个实例 let f =new Fn();
f instanceof Array;//true
f instanceof Function;//true

3.constructor

构造函数,作用和instanceof非常相似

let arr=[];
console.log(arr.constructor === Array);//true
console.log(arr.constructor === RegExp);//false

constructor可以用来检测基本数据类型

let a = 250;
console.log(a.constructor === Number);//true

constructor和instanceof检测Object的结果不一样

let reg =/\d/;
console.log(reg.constructor === RegExp);//true
console.log(reg.constructor === Object;//false
//false的原因是因为先找私有的,私有没有才会去找原型,私有已经有了,所以...

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

function Fn(){
...
}
let f =new Fn();
console,log(f.constructor);//返回的是当前类的本身Fn
//继承后
Fn.prototype = new Array();//原型继承,让子类的原型指向父类的一个实例
console,log(f.constructor);//变成了Array

null和undefined他们的所属类是Null和Undefined,但是浏览器不让用

4.Object.prototype.toString.call()--------- 一个神奇的方法

首先获取Object原型上的toSting方法,然后让其执行,并且改变方法中的this关键字

  • 1.对于Number、 String 、 Boolean 、 Array 、RegExp 、 Date 、 Function,他们的原型上的toString方法都是把当前的数据类型转为字符串

    (1).toString();//"1"

    [].troString();//''

    [1,2,3].toString()//"1,2,3"

    (false).toString();//"fales"

    ...

  • 2.Math和{ }的toString执行的是Object.prototype上的toString方法

    作用是:返回当前执行主体(方法中的this)所属类 的详细信息

    Math.toSting();//[object Math]

    {}.toString();//[object Object]

    //[..]中的第一个object代表大行前实例是对象类型的数据(固定死的)

    //第二个参数表示的是第一个参数所属类是谁

根据这些个特点就有了

Object.prototype.toString.call(要检测的类或实列);

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

javascript的数据检测总结的更多相关文章

  1. JavaScript数据检测

    前言: 随着编程实践的增加,慢慢发现关于数据类型的检测至关重要.我认为程序就是为了处理数据和展示数据.所以,数据的检测对于编程来说也至关重要.因为只有符合我们预期的输入,才可能产生正确的输出.众所周知 ...

  2. JavaScript中数据类型转换总结

    JavaScript中数据类型转换总结 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = " ...

  3. 细读 php json数据和JavaScript json数据

    关于JSON的优点: 1.基于纯文本,跨平台传递极其简单: 2.Javascript原生支持,后台语言几乎全部支持: 3.轻量级数据格式,占用字符数量极少,特别适合互联网传递: 4.可读性较强 5.容 ...

  4. 应用层级时空记忆模型(HTM)实现对实时异常流时序数据检测

    应用层级时空记忆模型(HTM)实现对实时异常流时序数据检测 Real-Time Anomaly Detection for Streaming Analytics Subutai Ahmad SAHM ...

  5. 再谈JavaScript的数据类型问题

    JavaScript的数据类型问题已经讨论过很多次了,但许多人还有许多书仍然沿用着错误的.混乱的一些观点,所以就再细讲一回. 提及这个讨论的原因在于argb同学在我的MSN博客上的一段回复,又更早的起 ...

  6. JavaScript实现数据的双向绑定

    接触到Angulr.js和Vue.js后,提到最多的就是双向绑定 下面将用JavaScript实现数据的双向绑定 <!DOCTYPE html> <html> <head ...

  7. hisql 高级功能数据检测将错误数据拦截在系统外 一

    hisql github源码下载 git clone https://github.com/tansar/HiSql.git 在设计第二范式数据库时经常会把可能重复的数据单独做一种表关联,但是在写入表 ...

  8. Javascript之类型检测

    一.检测原始(基本数据:字符串.数字.布尔.null.undefined)类型. 用typeof检测原始类型:1.对于字符串,typeof返回"string"; 2.对于数字,ty ...

  9. JavaScript的数据类型问题总结

    一    JS中有哪些数据类型? -- 共 6 种数据类型,其中 5 种基本数据类型Undefined,Null,Boolean,Number和 String,1 种复杂数据类型Object.因为EC ...

随机推荐

  1. 每秒查询率QPS

    每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量. 原理:每天80%的访问集中在20%的时间里,这20%时 ...

  2. JQUERY dialog的用法详细解析

    本篇文章主要是对JQUERY中dialog的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 今天用到了客户端的对话框,把 jQuery UI 中的对话框学习了一下. 准备 jQ ...

  3. solr联合多个字段进行检索(multivalued和copyfield的使用)

    在实际工作中不仅仅对索引中的单个字段进行搜索.需要进行综合查询. 比如book表中有id,name(标题),price,summary(摘要),content(内容),我们要找一本书的时候,查询关键字 ...

  4. python之路之迭代器与生成器

    一  迭代器 那么在研究迭代器之前首先应该要知道什么是迭代. 迭代:是一个重复的过程,并且每次重复都是建立基于上一次的结果而来的,所以在迭代的过程其实是在不断变化的. 迭代器:就是迭代取值的工具. 那 ...

  5. 黏包的原理 (tcp udp) struct模块

    黏包 指数据混乱问题(发送端发送数据,接收端不知如何去接收) 只有tcp协议才会发送粘包,udp不会发生 黏包(tcp) 有一个合包机制(nagle算法),将多次连续发送且间隔较小的数据,进行打包成一 ...

  6. 内置锁(二)synchronized下的等待通知机制

    一.等待/通知机制的简介 线程之间的协作:   为了完成某个任务,线程之间需要进行协作,采取的方式:中断.互斥,以及互斥上面的线程的挂起.唤醒:如:生成者--消费者模式.或者某个动作完成,可以唤醒下一 ...

  7. HTML|CSS总结与补充

    知识内容: 1.HTML总结 2.CSS总结 一.HTML总结 详细内容见:http://www.cnblogs.com/wyb666/p/8733699.html 1.HTML介绍及前端入门 (1) ...

  8. Java并发编程学习路线(转)

    以前特地学过并发编程,但是没怎么学进去,不太喜欢.最近发现,作为一个资深工程师,却没有完整深入系统的学习过,而反是现在的BAT大并发是必须的,感觉甚是惭愧. 故找了一片学习文章,如下,准备集中一段时间 ...

  9. 手机app/h5页面http请求抓包调试

    1.抓包机器跟客户端手机连上同一wifi热点,最好是第三者提供的移动wifi,公司内网wifi网络访问有限制. 2.设置手机客户端http代理 三者关系图示:

  10. SQLSERVER数据库迁移的方法

    数据库迁移两种方案:https://www.cnblogs.com/mcgrady/p/7614491.html 方案一 1,先将源服务器上的数据库文件打包(包括mdf和ldf文件),并且复制到目标服 ...