博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript的乐趣——0220
阅读量:5097 次
发布时间:2019-06-13

本文共 3279 字,大约阅读时间需要 10 分钟。

1、对于generator函数,还不是很理解,之后再续

2、javascript的乐趣_不要问为什么

  • 不要使用new Number()new Boolean()new String()创建包装对象;

  • parseInt()parseFloat()来转换任意类型到number

  • String()来转换任意类型到string,或者直接调用某个对象的toString()方法;

  • 通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...}

  • typeof操作符可以判断出numberbooleanstringfunctionundefined

  • 判断Array要使用Array.isArray(arr)

  • 判断null请使用myVar === null

  • 判断某个全局变量是否存在用typeof window.myVar === 'undefined'

  • 函数内部判断某个变量是否存在用typeof myVar === 'undefined'

1 123.toString(); // SyntaxError
123..toString(); // '123', 注意是两个点!(123).toString(); // '123'

2、对于date对象,一个坑爹的地方是JavaScript的月份范围用整数表示是0~11,0表示一月,1表示二月……,所以要表示6月,我们传入的是5

1 var today = new Date();2 if (today.getMonth() === 2 && today.getDate() === 14) {3     alert('亲爱的,我预定了晚餐,晚上6点在餐厅见!');4 }

以上代码,真是注孤生的节奏啊......因为这匹配的是3月14号(坑无处不在)。

3、RegExp(正则表达式)

  • '00\d'可以匹配'007',但无法匹配'00A'

  • '\d\d\d'可以匹配'010'

  • '\w\w'可以匹配'js'

.可以匹配任意字符,所以:

  • 'js.'可以匹配'jsp''jss''js!'

要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:

进阶:

  • [0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;

  • [0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100''0_Z''js2015'等等;

  • [a-zA-Z\_\$][0-9a-zA-Z\_\$]*可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名;

  • [a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。

A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配'JavaScript''Javascript''javaScript'或者'javascript'

^表示行的开头,^\d表示必须以数字开头。

$表示行的结束,\d$表示必须以数字结束。

你可能注意到了,js也可以匹配'jsp',但是加上^js$就变成了整行匹配,就只能匹配'js'了。

1 var re1 = /ABC\-001/;2 var re2 = new RegExp('ABC\\-001');3 4 re1; // /ABC\-001/5 re2; // /ABC\-001/

RegExp对象的test()方法用于测试给定的字符串是否符合条件

1 var re = /^\d{3}\-\d{3,8}$/;2 re.test('010-12345'); // true3 re.test('010-1234x'); // false4 re.test('010 12345'); // false

切分字符串:

1 'a,b;; c  d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']

分组、贪婪匹配、全局匹配与搜索

a.^(\d{3})-(\d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码

  exec()方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。

  exec()方法在匹配失败时返回null

1 var re = /^(\d{3})-(\d{3,8})$/;2 re.exec('010-12345'); // ['010-12345', '010', '12345']3 re.exec('010 12345'); // null

b.正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符

1 var re = /^(\d+)(0*)$/;2 re.exec('102300'); // ['102300', '102300', '']

\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配

1 var re = /^(\d+?)(0*)$/;2 re.exec('102300'); // ['102300', '1023', '00']

c.JavaScript的正则表达式还有几个特殊的标志,最常用的是g,表示全局匹配,全局匹配可以多次执行exec()方法来搜索一个匹配的字符串。当我们指定g标志后,每次运行exec(),正则表达式本身会更新lastIndex属性,表示上次匹配到的最后索引

1 var s = 'JavaScript, VBScript, JScript and ECMAScript'; 2 var re=/[a-zA-Z]+Script/g; 3  4 // 使用全局匹配: 5 re.exec(s); // ['JavaScript'] 6 re.lastIndex; // 10 7  8 re.exec(s); // ['VBScript'] 9 re.lastIndex; // 2010 11 re.exec(s); // ['JScript']12 re.lastIndex; // 2913 14 re.exec(s); // ['ECMAScript']15 re.lastIndex; // 4416 17 re.exec(s); // null,直到结束仍没有匹配到

正则表达式还可以指定i标志,表示忽略大小写,m标志,表示执行多行匹配

例:匹配email地址:

1 var re = /^[\da-zA-Z]+([._-]\w+)*@([\da-zA-Z]+\.)+[a-zA-Z]{2,6}$/; 2  3 var re = /^<(.+?)>\s*([\da-zA-Z]+[._-]?\w+@[\da-zA-Z]+\.[a-zA-Z]{2,6})$/; //分组得到email地址的部分内容 4  5 //测试部分: 6 // 测试: 7 var r = re.exec('
tom@voyager.org'); 8 if (r === null || r.toString() !== ['
tom@voyager.org', 'Tom Paris', 'tom@voyager.org'].toString()) { 9 alert('测试失败!');10 }11 else {12 alert('测试成功!');13 }

 

转载于:https://www.cnblogs.com/moongy/p/6422072.html

你可能感兴趣的文章
ionic2+ 基础
查看>>
查询消除重复行
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
Json格式的字符串转换为正常显示的日期格式
查看>>
Mobiscroll脚本破解,去除Trial和注册时间限制【转】
查看>>
Redis快速入门
查看>>
BootStrap---2.表格和按钮
查看>>
Ajax之404,200等查询
查看>>
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Screening technology proved cost effective deal
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
mysql8.0.13下载与安装图文教程
查看>>
Thrift Expected protocol id ffffff82 but got 0
查看>>
【2.2】创建博客文章模型
查看>>
Kotlin动态图
查看>>
从零开始系列之vue全家桶(1)安装前期准备nodejs+cnpm+webpack+vue-cli+vue-router
查看>>
Jsp抓取页面内容
查看>>