数据类型检测

1.typeof

     1.返回字符串,字符串包含了对应数据类型2.不能检测null3.不能检测对象数据类型

2.instanceof 检测实例是否属于某个类的方法

     1.只要当前类的原型在当前实例的原型上,都是true2.只有改变了当前实例的原型链,检测结果就不再准确3.不能检测字面量方式创建的基本数据类型值
          var ary  = [];console.log(ary instanceof Array);//truevar obj  = {};console.log(obj instanceof Array);//falseconsole.log(ary instanceof Object);//truefunction fn(){}console.log(fn instanceof Object);//truefunction fn(){arguments.__proto__ = Array.prototypeconsole.log(arguments instanceof Array); //true}fn(1,2,3,4)var num = 1;console.log(num instanceof Number);//falsevar nom = new Number(1)console.log(nom instanceof Number);//true

3.constructor 原型中天生自带的属性名

     1.不能检测基本数据类型值得null.或undefined2.如果原型扩展以及继承都有可能导致原型指向发生改变,结果不准确
          var ary = [];console.log(ary.constructor === Array);//trueconsole.log(ary.constructor === Object);//falsevar obj = {};console.log(obj.constructor === Array);//falsevar num = 1;console.log(num.constructor === Number);//true

4.Object.prototype.toString.call()

        Object原型上的toString方法执行,会默认返回当前方法中this对应的结果toString  转字符串
            var num = 1;var arr = [1,2,3]var obj = {};console.log(obj.toString());//'[object Object]'console.log(num.toString());//'1'console.log( Object.prototype.toString.call(arr));//'[object Array]'console.log( Object.prototype.toString.call(null))//'[object Null]'console.log( Object.prototype.toString.call(undefined))//'[object Undefined]'num.toString === obj.toString//falseconsole.dir(toString.call(window))//[object Window]

正则

 正则    引用数据类型 正则是js的内置类  RegExp正则就是处理字符串的,他是跟字符串相互配合使用字符串方法: charAt   substr  substring   slice   replace   split  indexOf  lastIndexOf  toUpperCase   toLowerCase   trim  trimLeft()  trimRight()1.字面量创建var reg = /\d+/;2.实例创建   RegExp  可以引入变量    如果出现转义字符  转义前面再加一个\
正则:正则由两部分组成:元字符和修饰符
 元字符  :在正则中有特殊含义的一些字符
 修饰符:就是把正则额外的修饰一下i: 不区分大小写m:多行匹配g:全局匹配元字符:量词元字符、普通元字符、特殊元字符量词元字符:代表出现的次数*:代表0到多次+:出现一到多次?:出现0到1次{n}:出现n次{n,}:至少出现n次{n,m}出现n到m次特殊元字符:单个或者多字符组合在一起具有特殊意义\:转义字符:可以把普通元字符字符转换为特殊的元字符,也可以把特殊元字符转换为普通元字符  //.:除了换行符以外的任意字符^:以什么什么开头  //$:以什么什么结尾  //\n:换行符\d:0-9之间的数字  //\D:非0-9之间的数字\w:数字、字母、下划线\s:空白字符\t:制表符\b:单词边界x|y:取x或y的任意一个  // [xyz]:取x、y、z中的任意一个  //[a-z]:在a到z单位内取一个  //[^a-z]:取反():分组  //(?:):只匹配不捕获(?=):正向预查(?!):负向预查普通元字符:let reg = /name/正则捕获不到位null匹配不到位false
test:检测,匹配,如果检测成功,返回true,没有成功返回false
exec 捕获 返回一个数组 第一项就是捕获到的内容 第二项捕获内容开始的索引 第三项检测的整个字符串的整体
 1.返回一个数组   数组第一项是字符串中满足大正则中的内容2.如果捕获不到  返回null
    var reg = /\d+/ console.log(reg.exec('zhufeng2000peixun2019'));//["2000", index: 7, input: "zhufeng2000peixun2019", groups: undefined]
    1.正则的懒惰性 :正则找到符合正则的值以后,就不再向后捕获    reg:lastIndex  不加g每次默认从索引0开始捕获g:原理 :没捕获一次,当前正则的lastIndex就会修改成下一轮开始捕获的索引位置取消正则的懒惰性,用正则的修饰符g
        var reg = /\d+/gconsole.log(reg.lastIndex);//0console.log(reg.exec('zhufeng2000peixun2019'));//["2000", index: 7, input: "zhufeng2000peixun2019", groups: undefined]console.log(reg.lastIndex);//11   下一轮要开始的索引console.log(reg.exec('zhufeng2000peixun2019'));//["2019", index: 17, input: "zhufeng2000peixun2019", groups: undefined]console.log(reg.lastIndex);//21
    2.正则的贪婪性?:放在量词的后面,是取消捕获的贪婪性一个一个字符进行捕获小括号小括号  也要进行一次捕获,从左往右依次进行捕获(?:) 取消捕获

正则简单案例

 手机号let reg = /^1\d{10}$/console.log(reg.test('12345678911'));//true有效数字let reg = /^-?(\d|[1-9]\d+)(\.\d+)?$/console.log(reg.test('a8864.aad'));//false身份证号let reg = /^(\d{6})([12]\d{3})(0[1-9]|1[0-2])(0[1-9]|12\d|3[0-1])(\d{3})(\d|x)/console.log(reg.exec('1406021996120375151203'));18-65let reg = /^(1[89]{1}|[2-5]\d{1}|6[0-5]{1})$/console.log(reg.test('66'));汉字  unicode [\u4E00-\u9FA5]  所有汉字编码范围let reg = /[\u4E00-\u9FA5]+/console.log(reg.test('的撒大苏打啊大苏打'));邮箱 let reg = /^[0-9a-zA-Z_\u4E00-\u9FA5]+@[0-9a-zA-Z]+(\.[0-9a-zA-Z]+)+$  /

正则的括号

 []   中括号中,不识别多位数
     var reg = /[abc]/console.log(reg.test('abc'));//truevar reg1 = /^[1-9_]$/  //表示1到9或者_的任意一个console.log(reg1.test('9'));var reg2 = /[18-65]/  //1 8-6 5
 ()正则的小括号  1.改变正则的优先级
         var reg = /^a|food$/;       //以a开头,以food结尾都返回trueconsole.log(reg.test('a'));//trueconsole.log(reg.test('aood'));//trueconsole.log(reg.test('aoog'));//trueconsole.log(reg.test('erfood'));//true
  2.分组引用
  // \1 代指和第一个分组一模一样的内容var reg = /^(zhufeng)(peixun)\1\2$/console.log(reg.test('zhufeng'));//falseconsole.log(reg.test('zhufengpeixunzhufeng'));//falseconsole.log(reg.test('zhufengpeixunzhufengpeixun'));//true
 3.用于小正则捕获小括号要进行捕获,从左往右依次进行
    var reg = /^-?(\d|[1-9]\d+)(\.(\d+))?$/console.log(reg.exec('35.6789'));

正则的match

 //match : 字符串方法  匹配   返回数组var str = 'zhufeng123peixun456';var arr = str.match(/\d+/g)console.log(arr);//正则match.html:14 (2) ["123", "456"]//加g代表全局捕获,捕获多次,把符合正则内容的字符串放到一个数组中//正则的修饰符//g:global :全局//i:ignoreCase :忽略大小写//m: mutiline  : 多行匹配var reg = /A/i;  //在字符串中出现a或A ,都返回trueconsole.log(reg.test('abc'));//true

正则的replace

replace : 字符串替换    原字符串不发生改变   会得到替换之后的返回值每次只能替换一个var str = 'trueortrue'var newStr = str.replace('true','false').replace('true','false')console.log(newStr);//falseorfalse 结合正则(1)replacee(reg,str);用该正则对字符串形成捕获,把捕获到内容替换成后面的字符串
     var str = 'trueortrue'var newStr = str.replace(/true/g,false)console.log(newStr);//falseorfalse
    正则和回调函数1.正则对字符串进行捕获,并且将回调函数的返回值覆盖捕获到的内容2.正则捕获几次,回调函数执行几次3.形参分别代表不同的值
       var str = 'trueortrue'var newStr = str.replace(/true/g,function(a,b,c){console.log(a);//true   true     //第一个参是捕获到的内容console.log(b);//0  6            //第二个参捕获的内容开始的索引位置console.log(c);//trueortrue     //原来字符串//console.log(100);return false})console.log(newStr);//falseorfalse
replace案例
//把所有首字母大写var str = 'my name is niu,i am 28 years old';var ary = str.replace(/\b[a-z]/g,function(a,b){   //左边界a = a.toUpperCase() console.log(a,b)   return a})console.log(ary);//把数字首字母大写var str = '20191224'var ary = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖","万","仟"];var aoe = str.replace(/\d/g,function(a,b){for(var i = 0;i<ary.length;i++){console.log(a);if(i = a ){return ary[i]}}return a    //  return ary[arguments[0]]   //让捕获到的数字作为数组ary的索引,再返回})console.log(aoe);//贰零壹玖壹贰贰肆 *///把下面时间格式化成2019年12月24日16时02分30秒var  str = "2019-12-24 16:02:30";var  ary = ["年","月","日","时","分","秒"];var i = 0var aoe = '';var one = str.replace(/\d+/g,function(a,b){aoe += a + ary[i++]console.log(aoe);return aoe})console.log(aoe);// 加千分符,给下面的数字加','使其成为13,234,567,753,224var str = "13234567753224";var newStr = str.replace(/^(\d{1,3})((\d{3})+)$/,function(a,b,c){// console.dir(a);// console.log(b);// console.log(c);var part2 = c.replace(/\d{3}/g,function (d,e) {console.log(d);return ','+d})return b +part2})console.log(newStr);var str = "13234567753224";var newStr = str.replace(/\d/g,function(a,b){//arguments[0]  捕获到数字内容   arguments[1] 捕获内容对应的索引console.log(str.length);if((str.length-b-1)%3 === 0 && str.length-1 !== b){return a + ','}else{return a}})console.log(newStr);```

js 正则 数据类型检测四种方式相关推荐

  1. js 复制文本的四种方式

    一.总结 一句话总结:js文本复制主流方法:document的execCommand方法 二.js 复制文本的四种方式 纯 转载复制,非原创 原地址:http://www.cnblogs.com/xh ...

  2. Js中自定义对象四种方式

    Js中自定义对象四种方式 1 类似JAVA有参构造方式: 1.定义对象: function 对象(属性[age]){追加属性:如(this.age = age)[this代表当前对象的地址值的引用]追 ...

  3. js 判断数据类型的四种方法

    1,typeof typeof 返回的数据类型有 undefined boolean (true,false) string symbol number function object 注意  typ ...

  4. js数组去重的四种方式

    // 删除重复的 function only(arr){for(var i=0;i<arr.length;i++){for(var j = i+1;j<arr.length;j++){if ...

  5. 检测数据类型的几种方式

    JS中检测数据类型只有四种方式 1.typeof 用来检测数据类型的运算符 [typeof value] 1)返回值:首先是一个字符串,然后包含了我们常用的数据类型,例如:"number&q ...

  6. 【温故知新】——原生js中常用的四种循环方式

    一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出"欢迎下次光临" 在网页中弹出框输入1   网页输 ...

  7. html引入原生js,html怎么引用JavaScript?html引入js路径四种方式

    html是静态的页面,如果我们想要实现某些动画效果,就要引入一些js,那么,如何在html中引用一些js文件呢,引入js有哪些方式呢,下面我们来总结一下html引入js路径四种方式. 一:html怎么 ...

  8. js基础--数据类型检测的相关知识

    欢迎访问我的个人博客:www.xiaolongwu.cn 前言 最近工作有点忙,好几天都没更新技术博客了. 周末起床打开有道云笔记,发现自己的博客todolist里躺了一堆只有名字的文件. 话不多说, ...

  9. Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结

    Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...

最新文章

  1. 看了Linux命令的全称,顿时豁然开朗
  2. 6的变换_FPGA时序结构的LBT变换控制器设计
  3. SQL Server-游标使用
  4. 云服务器镜像麻烦吗_简单说说云服务器的镜像功能作用
  5. java 集合迭代器_Java中的集合迭代器
  6. 【Spring】Spring DataSourceTransactionManager
  7. Python框架篇之Django(路由系统URL、视图函数views)
  8. Mac上显示出.m2文件夹并将IDEA中的Maven修改为阿里云镜像
  9. tostring会空指针吗_追了多年的开发框架,你还认识指针吗?
  10. wsl2启动桌面_「原创」windows10下自定义WSL安装路径及启动WSL2
  11. 机器学习-决策树(XGBoost、LightGBM)
  12. 【数字信号调制】基于matlab二进制数字频率调制(2FSK)【含Matlab源码 998期】
  13. 前端class的中括号用法
  14. 异地如何在北京换驾照
  15. Secondary NameNode:它究竟有什么作用?
  16. 《当下的启蒙》的概述和精华
  17. 万字拆解自嗨锅:造价近百万的直播间,是单场直播GMV破100万的法门吗?
  18. 信捷plc modbus通信
  19. 使用DBeaver连接IRIS数据库
  20. 我的世界服务器回到死亡位置,我的世界返回死亡地点指令是什么

热门文章

  1. 企业引进CRM的真正价值是什么
  2. python库pgu安装
  3. Servlet (Java Web 学习笔记)
  4. Unity 之 DontDestroyOnLoad的使用
  5. AutoreleasePool的实现
  6. (Java面向对象)统计学生学号,名字,性别,年龄,学习成绩。
  7. 【python 自动网页打卡】
  8. 易基因:全基因组DNA甲基化分析揭示DNMT1在斑马鱼模型听觉系统发育中的作用 | 胚胎发育
  9. Origin画三维图的步骤
  10. Antd 组件Switch用法及代码记录