学习JavaScript第三周
字符串的遍历,字符串虽是简单数据类型却有对应的属性和方法,这是因为字符串是包装类型(当然布尔类型和数字类型也是包装类型),临时具有对象的属性和方法,在使用完后就会释放对象。
简单的淡入淡出的轮播图,原理就是将多个图片使用相对定位定在一起,令第一张添加一个类,元素类型为显示,然后加上定时器,利用for循环一次给后面的图片添加类名,在此之前要用排他思想,清除其他图片的类名,
给当前图片设置类名。
冒泡排序,经常出现在笔试题中,利用双层for循环来实现,外层循环决定要排序的次数,里层循环确定每次循环要走几步。如下
let arr1 = [9, 7, 3, 1, 5, 11];
//外层循环是次数,所以只需要length-1次就能完成排序
for (let i = 0; i < arr1.length - 1; i++) {
for (let j = 0; j < arr1.length - i - 1; j++) { //内层循环是移动次数
if (arr1[j + 1] < arr1[j]) { //解构赋值
[arr1[j], arr1[j + 1]] = [arr1[j + 1], arr1[j]]; //从小到大
}
}
}
然而数组中的排序,这么简单的功能,底层肯定封装得有函数,那就是sort()方法,如果sort()里面不跟参数,直接对纯数字数据类型的数组进行排序,默认是从小到大;如果里面有纯数字的字符串,这不会进行隐式转换,所以排序要出错;sort()方法里面可以跟参数,但是这个参数是个函数,所以这个函数称之为回调函数,回调函数有a,b两个值,如果回调函数返回的是a - b则是升序排序,反之则是降序排序。
下面这些事字符串的常用方法
API | 字符串中的API的作用(全部API都不会破坏原字符串) |
---|---|
str.toUpperCase( ) | 将字符串中的小写转换为大写 |
str.toLowrCase( ) | 将字符串中的大写转换为小写 |
str.charAt( i ) ==>等同于str[ i ] | 字符串通过索引找到某个字符 |
str.charCodeAt( i ) | 根据字符找ascii码 |
String.fromCharCode( i ) | 根据十进制数找到阿斯克码 |
arr/str.indexOf( '关键字',starti ) | 通过关键字来找到在数组或字符串中的下标,开始检索下标默认是从0开始的。 |
str / arr.slice( starti, endi + 1 ) | (能取负值)截取子串,含头不含尾,若想含尾就在后面+1 |
str . substring( ) | 和slice基本一样,但是不能取负值 |
str.substr( starti , n ) | 截取首个字符串的索引号,第二个参数为截取个数 |
str . concat( ) | 用于拼接字符串,但是更加推荐+号 |
str . replace( '关键字'/正则表达式, ’替换字符‘ ) | 用于替换关键字,搭配正则表达式会更好用哦。 |
str . split('分隔符号') | 用于字符串的切片,切片以分隔符号为准,若是空字符串则输出单个字符组成的数组 |
其中indexOf也能用于数组的去重,如下:
let arr = [];
let newArr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
for (let i = 0; i < newArr.length; i++) {
if (arr.indexOf(newArr[i]) === -1) {
arr.push(newArr[i]);
}
}
console.log(arr);
如果要计算某个字符在字符串中出现的次数,可以使用哈希数组来实现,因为js里面一切的东西都是对象:除了undefined和null,【一切对象的底层都是hash数组】;
字符串的split()方法可以用来切割用连接符号组成的字符串;然后就可以利用这个搭配DOM操作来对数据进行渲染。
正则表达式:即字符串中的匹配规则,通常用于判断用户输入的数据是否合法。
格式:/正则表达式/后缀 后缀通常有i 忽略大小写,g全文匹配
用户可以自定义字集,也可以用预定义字集。预定义字集有 \d === [ 0 - 9 ] \w === [0-9A-Za-z] \s 包括:空格、换行、制表符
可以在字集的后面添加花括号来确定匹配的个数:
字符集{ n,m }:前边相邻的字符集,至少n个,最多m个。
字符集{ n, }:前面相邻的字符集,至少n个,多了不限制
字符集{ n }:前面相邻的字符集,指定个数为n
若没有明确数量
?:前边相邻的字符集,可有可无,最多一个。
*:前边相邻的字符集,可有可无,多了不限
+:前边相邻的字符集,至少一个,多了不限
选择和分组:
选择:在多个规则中选一个
规则1 | 规则2
分组:将多个子规则临时组成了一组规则
(规则1 | 规则2)
指定匹配位置:
^确定开头,$确定结尾
字符串的两个方法支持正则:
str.split(正则表达式);用于简单切割
str.replace(正则表达式,替换的字符);用于替换
当然上面写的替换字符 也可以 是个回调函数,可以根据不同的字符串个数替换成不同程度的内容。如下:
str=str.replace(/正则表达式/后缀,function(a,b,c){
//第一个形参是正则匹配到的关键字
//第一个形参是正则匹配到的关键字的下标
//原文本身
return a.length==2?"**":"***";
})
格式化数据,例如将身份证上的生日信息提取出来 如下:
var str="500103198602215933";
var reg=/(\d{6})(\d{4})(\d{2})(\d{2})(\d{4})/;
str=str.replace(reg,function(a,b,c,d,e,f){
//在replace的时候,正则出现了分组,我们会得到更多的形参
//有多少个分组就会多出现多少个形参
//第一个形参是正则匹配到的关键字
//第二个形参会得到关键字的索引号
//第三个形参会得到第一个分组获取到的部分
//第四个形参会得到第二个分组获取到的部分
//第五个形参会得到第三个分组获取到的部分
//...
return c+"年"+d+"月"+e+"日"
})
console.log(str);
当然也可以密码的强度验证:
// 预判公式:
var reg = /^(?![0-9]+$)规则$/ //不能全由数字组成
var reg = /^(?![a-z]+$)规则$/ // 不能全由小写字母组成
var reg = /^(?![0-9a-z]+$)[0-9A-Za-z]{4}$/ // 不能全由数字组成,也不能全由小写字母组成,也不能由数字和小写的组合组成 - 至少一个大写字母 //4位密码,数字和字母的组合,至少出现一位数字和大写字母
var reg=/^(?![0-9a-z]+$)(?![A-Za-z]+$)[0-9A-Za-z]{4}$/ //4位密码,数字和字母的组合,至少出现一位数字和大写字母和小写字母
var reg=/^(?![0-9a-z]+$)(?![A-Za-z]+$)(?![A-Z0-9]+$)[0-9A-Za-z]{4}$/
当然正则也是复杂对象之一;
1.创建正则对象:
字面量:var reg = /正则表达式/后缀;
构造函数方式:var reg2 = new RegExp("正则表达式",“后缀”);
2.正则对象中的API:验证
var bool = reg.test("用户输入的内容”);
true内容合法,false内容非法;
Error对象:错误对象
浏览器自带四种错误类型:可以快速找到自己错误的类型
语法错误:SyntaxError
引用错误:ReferenceError
类型错误:TypeError
范围错误:TypeError 只会出现在num.toFixed( n ) n>100
try...catch(error){ } 参数error表示错误提示,花括号里面可以自定义输出错误提示。
同样可以自己建立错误对象:
throw new Error( "自定义错误信息" );
Math对象:数学对象
数学对象中常用的属性便是 Math.PI 用来表示π
以下是数学对象常见的API
API | 数学中的API的作用 |
---|---|
Math.ceil( num ) | 向上取整 |
Math.floor( num ) | 向下取整 |
Math.round( num ) | 四舍五入的取整(但是更加推荐parseInt()==>向下取整; toFixed( n )如果里面的n为0则代表四舍五入取整,但是此方法要配合parseInt()使用) |
Math.pow( 底数,幂) | 代替位运算,指数次方 |
Math.sqrt( num ) | 开方 |
Math.max( num ) &Math.min( num ) | 获取一串数的最大值和最小值,但是如果是数组的话要搭配apply使用,格式Math.max/min.apply( Math,arr ) apply有两个功能:1.借用2.悄悄的将数组打散为单个元素 |
Math.abs( 负数) | 可以将负数转成正数 |
Math.random( num ) | 取最大值和最小值的公式 Math.random( )*(max - min + 1) + min |
其他 | 数学对象还提供了 |
Date对象:日期对象
四种创建:
var now=new Date(); //获取当前时间
var birth=new Date("yyyy/MM/dd hh:mm:ss"); //创建自定义时间
var birth=new Date(yyyy,MM-1,dd,hh,mm,ss); //书写时间的方式,但是不推荐
复制日期操作:先创建一个日期,然后再把这个日期赋值给另外一个变量,然后再操作这个变量,用API进行加减操作。
时间的API:
分量:时间单位
年月日星期:FullYear Month Date Day
时分秒毫秒:Hours Minutes Seconds Milliseconds
每一个分量都有一对儿getXXXX(获取分量)/setXXXX(设置分量)
特殊:
1.取值范围:
FullYear:当前的年份的数字;
Month:0-11
Date:1-31
Day:0-6
Hours:0-23
Minutes:0-59
2.Day星期,没有set方法
3、如果希望对某个分量进行加减操作
date.setXXX( date.getXXX +/- n )
4、格式化日期为字符串:本地格式
date.toLocaleString();//本地日期格式 - 垃圾:具有兼容性问题,在老IE上显示效果不一样;
函数对象
函数的创建:1.声明函数;2.关键字定义函数;3.构造函数创建函数(Function构造函数里面可以放入拼接的字符串,且return可以是个变量,如下所示)
var arr=[12,5,25,432,7,54,4312,41];
var user=prompt("请进行排序,如果输入a-b则为升序排列,如果输入b-a则为降序排列")
var compare=new Function("a","b","return "+user);
arr.sort(compare);
重载 overload:相同的函数名,根据传入的实参的不同(arguments),可以自动选择对应的函数进行执行
匿名函数的自调(立即执行函数):
为什么使用匿名函数的自调:因为匿名函数,没有变量引用着,用完,垃圾回收器就会发现此引用类型没有人引用着,则垃圾回收器的计数器为0,垃圾回收器就会吧此函数释放掉。
匿名函数的回调:将函数作为了一个实参,传递给其他函数调用(是匿名函数,没有自调,就是回调)
后面还有个箭头函数来简化回调函数的操作。
学习JavaScript第三周的更多相关文章
- 学习javascript数据结构(三)——集合
前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...
- 学习Java第三周
这是学习java的第三周 上周想要学习的这周也完成了,研究和测试代码花费了大约2个小时,发现这些内容方法居多,想要熟练掌握就要好好记忆了 包装类 数字处理类 Object类 Java类包 内部类 下一 ...
- H5学习的第三周
上周,我们结束了京东站的制作,本周我们开始了手机站和响应式网站的学习,并仿制了一个手机端界面和一个响应式界面,在完成这两个网站的过程中我遇到了许多问题,也了解了它们的解决方法,接下来我讲详细介绍本周我 ...
- 学习 JavaScript (三)核心概念:语法、变量、数据类型
JavaScript 的核心概念主要由语法.变量.数据类型.操作符.语句.函数组成,这篇文章主要讲解的是前面三个,后面三个下一篇文章再讲解. 01 语法 熟悉 JavaScript 历史的人应该都知道 ...
- 学习。NET三周心得
目前为止 学习.NET已经快一个月了,有刚开始的不懂,到中途懵懂.再到现在的简懂 ,感觉自己迷了好多天,学习程序员跟学其他的程序还不同,其他的有固定格式,而.NET则固定很少 ,一直在用方法连接前后台 ...
- Python学习笔记第三周
目录 一.基础概念 1.集合 集合方法 a.设置集合 b.取交集 c.取并集 d.取差集 e.判断子集 f.判断父集 g.对称差集 基本操作: a.添加 b.删除 c.discard删除 d.长度 e ...
- 20135316王剑桥Linux内核学习笔记第三周
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 三个法宝:存储程序计算机.函数调 ...
- Python基础学习(第三周)
集合的操作 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之间的交集,差集,并集等关系 集合的写法 list_1 = set([ ...
- 20145330《Java程序设计》第三周学习总结
20145330 <Java程序设计>第三周学习总结 第三周知识的难度已经逐步上升,并且一周学习两章学习压力也逐渐加大,需要更高效率的来完成学习内容,合理安排时间. 类与对象 对象(Obj ...
- Python 学习日记(第三周)
知识回顾 在上一周的学习里,我学习了一些学习Python的基础知识下面先简短的回顾一些: 1Python的版本和和安装 Python的版本主要有2.x和3.x两个版本这两个版本在语法等方面有一定的区别 ...
随机推荐
- pip3 install
python3 -m venv tutorial-env source tutorial-env/bin/activatepip3 install *deactivate
- JIT和AOT的区别
http://net-informations.com/faq/qk/jit.htm Compilers are tools that convert human readable text into ...
- vue IE9兼容flex布局 css3(转载)
原文 https://blog.csdn.net/shihezhengshz/article/details/118860562 写这文章的时候的我,心力憔悴鸭,找了好长时间,呜呜┭┮﹏┭┮ 好了,开 ...
- SAP abap外部断点
如图所示:
- select remove option safari 兼容
select 移除某一 option 的 javascript 公司用的代码是 var ddlPrimaryResource = document.getElementById(ddlPrimaryR ...
- Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test (default-test) on project
updated to from jdk16 Java jdk 8 or 11 to support jenkins Build run. Plugin management tags aligned ...
- apk签名之后安装失败
Android Studio 3.0.1 很奇怪的一个现象,直接run的话可以成功,debug也可以,但是用签名打包之后,却安装失败,原来是打包的时候选错了.原来签名时,Signature Versi ...
- win10 python mysqlclient 安装问题 已解决
用习惯了Linux 忽然换到win10 超级不习惯 今天下午就一个mysqlclient 安装弄了好长时间 ,最后发现是得改名 真是想爆粗口. 下面直接进入正题: 下载地址 https:/ ...
- 数据库管理工具naicat+DG
DG 参考链接:https://www.cnblogs.com/zuge/p/7397255.html 自我感觉: 亲切,万能,idea用多了... 石皮 解 用学生账号登陆就可以(我用的这一种) 工 ...
- 12个有用的JavaScript数组技巧
数组是Javascript最常见的概念之一,它为我们提供了处理数据的许多可能性,熟悉数组的一些常用操作是很有必要的. 1.数组去重 1.from()叠加new Set()方法 字符串或数值型数组的去重 ...