数组API

应用程序编程接口(API):JS中预定义好的一些函数或者方法

toString() 将数组转字符串,元素之间用逗号隔开
join() 将数组转字符串,指定元素之间的分割符号
concat() 拼接多个数组
slice(start, end) 截取数组中的元素,start开始的下标,end结束的下标,不包含end本身,如果下标是负数表示倒数。返回的是截取到的数组

练习:创建数组包含a~g,每个字母是一个元素,分别截取bc,f;把截取到的两部分拼接成一个数组。

API

reverse() 翻转数组元素
sort() 对数组元素进行排序,默认按照Unicode码从小到大排列
sort(function(a,b){
return a-b;//数字从小到大
//return b-a;//数字从大到小
})

如何学习API: 作用、参数有哪些、返回的结果;

数组API下,有些操作会改变原数组。
splice(start, count, v1,v2..) 删除数组中的元素,start开始的下标,count删除的数量,如果下标是负数表示倒数,如果count为空删除到最后;v1,v2删除后补充的元素。

练习:创建数组a~g,每个字母是一个元素,删除c,替换f为m,在下标为1的位置插入z。

var arr=['a','b','c','d','e','f','g'];
arr.splice(2,1);
arr.splice(-2,1,'m');
arr.splice(1,0,'z');
console.log(arr);

push() 往数组的末尾添加元素,返回数组的长度
pop() 删除数组末尾的一个元素,返回删除的元素
unshift() 往数组的开头添加元素,返回数组的长度
shift() 删除数组开头的一个元素,返回删除的元素
indexOf() 查找数组中是否含有某个元素,如果找到返回下标,找不到返回-1

练习:创建数组包含若干个福字,如果‘敬业福’不存在,则把该福添加到数组中,否则打印‘该福已经存在’。

var arr=['敬业福','和谐福','爱国福','友善福'];
//判断是否存在,如果不存在
if( arr.indexOf('敬业福')===-1 ){
  arr.push('敬业福');
  //console.log(arr);
}else{
  //console.log('该福已经存在');
}
(2)二维数组

对一组数据进行二次分类
[ [], [], [] ]
访问
数组[下标][下标]

2.字符串对象

包装对象:将原始类型的数据包装为对象,目的是让原始类型数据也有属性和方法。JS一共有三种包装对象:字符串对象、数值对象、布尔对象
new String() 将数据转为字符串,返回对象
String() 将数据转为字符串,返回字符串

(1)转义字符 \

转换字符本身的意义
' 将特殊的引号转义为普通的引号
\n 将普通的字符n转义为换行符
\t 将普通的字符t转义为制表符(tab键),产生多个连续空格

练习:打印出以下路径的字符串
C:\Users\Web

(2)API

length 获取字符串的长度
charAt() 获取下标对应的字符,也可以使用数组的形式 字符串[下标]
charCodeAt() 获取某个字符的Unicode编码

练习:遍历字符串javascript,统计字符a出现的次数。

var str='javascript';
for(var i=0,count=0;i<str.length;i++){
  //console.log( str.charAt(i),str[i] );
  if(str.charAt(i)==='a'){
    count++;
  }
}
console.log(count);

indexOf() 查找某个字符串首次出现的位置,返回下标,找不到返回-1
lastIndexOf() 查找某个字符串最后一次出现的位置,返回下标,找不到返回-1

练习:声明变量保存用户输入的邮箱,查找@,如果找不到@打印'非法的邮箱', 否则打印‘合法的邮箱’

var input='ran#tedu.cn';
if(input.indexOf('@')===-1){
  console.log('非法的邮箱');
}else{
  console.log('合法的邮箱');
}

toUpperCase() 将英文字母转大写
toLowerCase() 将英文字母转小写
slice(start, end) 截取字符串,start开始的下标,end结束的下标,end为空截取到最后,不包含end本身;如果下标为负数表示倒数。

var str='JavaScript';
console.log( str.toUpperCase() );
console.log( str.toLowerCase() );

练习:声明变量保存用户输入的邮箱,要求分别截取除以邮箱的用户名和域 名 ran123456@tedu.cn

var email='ran@163.com'
//查找@的下标
var index=email.indexOf('@');
//
console.log('用户名:'+email.slice(0,index));
console.log('域名:'+email.slice(index+1));

substr(start, count) 按照长度截取字符串,start开始的下标,count截取的长度,count为空截取到最后;下标为负数表示倒数。

练习:声明变量保存用户的身份证号,分别截取出出生的年月日性别,倒数第2位是性别,奇数为男,偶数为女。最后打印出‘xxxx年xx月xx日 性别x’
110359197707154793
split() 字符串转为数组,按照指定的字符串切割为数组

var id='110359197707154793';
var year=id.substr(6,4);
var month=id.substr(10,2);
var date=id.substr(12,2);
var n=id.substr(-2,1);
var sex= n%2===1 ? '男' : '女';
console.log(year+'年'+month+'月'+date+'日 性别'+sex);

练习:截取出以下名字的姓氏部分(最后一部分)。
亚历山大.尼古拉斯.然桑.山田

var str='亚历山大.尼古拉斯.然桑.山田';
//20210115.mini.zip  截取文件的后缀名
var arr=str.split('.');
//console.log(arr);
//开始元素的下标 0   最后一个元素的下标 长度-1
console.log(arr[arr.length-1]);

3.匹配模式

用于字符串的查找和替换
search(/ran/i) 查找满足条件的第一个,返回下标,找不到返回-1
match(/ran/ig) 查找满足条件的所有的,返回数组,找不到返回null
replace(/ran/ig, 替换的内容) 查找并替换
i - ignore 忽略大小写
g - global 全局查找

4.Math对象

数学对象,包含数学运算的API
不需要创建对象,可以直接调用API
PI 获取圆周率
abs() 获取绝对值
ceil() 向上取整
floor() 向下取整
round() 四舍五入取整
pow(x,y) 计算x的y次方
min() 找一组数字的最小值
max() 找一组数字的最大值
random() 获取随机数,范围0~1 >=0 <1

练习:使用遍历数组完成(不能使用API)
翻转数组中的元素
['a','b','c','c'] -> ['d','c','b','a']
创建数组包含一组数字,将数字进行从小到大的排序

//准备一个新数组,用于存放倒着找到的每个元素
var arr2=[];
//遍历数组
for(var i=0;i<arr.length;i++){
  //i 长度 倒着找的下标
  //0  4    3
  //1  4    2
  //2  4    1
  //3  4    0
  //倒着找的下标=长度-i-1
  //console.log( arr.length-i-1, arr[arr.length-i-1] );
  //把倒着找到的元素依次放入到数组arr2
  arr2[i]=arr[arr.length-i-1];
}
console.log(arr2);

冒泡排序(循环嵌套)
[45,9,78,6,23] -> [6,9,23,45,78]

var  arr=[23,9,78,6,45];
//外层循环:控制循环的轮数,轮数要比元素的个数少1
for(var i=1;i<arr.length;i++){
  //i   每轮的次数
  //1 5   4
  //2 5   3
  //3 5   2
  //4 5   1
  //每轮的次数=长度-i
  //内层循环:控制每一轮比较的次数
  for(var j=0;j<arr.length-i;j++){
    //每一次的比较:用当前的元素arr[j]和下一个元素arr[j+1]比较
    //如果当前元素大于下一个元素,则位置交换
    if(arr[j]>arr[j+1]){
      var c=arr[j];
      arr[j]=arr[j+1];
      arr[j+1]=c;
    }
  }
}
console.log(arr);

1.Date对象

用于日期时间的存储和计算
(1)创建
new Date('2021/1/18 10:38:40')
new Date(2021,0,18,10,38,40) //月份范围0~11 代表1~12月
new Date() //存储的是当前操作系统的时间
new Date(1608336000000) //存储的是距离计算机元年(0时区的1970-1-1 0:0:0)的毫秒数,产生一个具体的日期时间
(2)获取
getFullYear()/getMonth()/getDate()
获取月份范围0~11
getHours()/getMinutes()/getSeconds()/getMilliseconds() 毫秒
getDay() 星期范围 0~6 对应 日~六
getTime() 获取距离计算机元年的毫秒数(数据库中存储的格式)
(3)转为本地字符串格式
用于调试阶段,查看日期时间
toLocaleString()
toLocaleDateString()
toLocaleTimeString()
存在兼容性问题,不同版本的Nodejs或者浏览器显示不一样
(4)设置
setFullYear()/setMonth()/setDate()
setHours()/setMinutes()/setSeconds()/setMilliseconds()
setTime() 设置距离计算机元年的毫秒数,会产生一个新的日期时间

练习:假设一个员工的入职时间为2021/1/18,合同期为3年,计算出到期时间;到期前一个月续签合同,假设是周末需要提前到周五,计算出续签时间。最后打印出3个日期
入职时间:年 月 日
到期时间:年 月 日
续签时间:年 月 日

//
var d1=new Date('2021/2/17');
//把入职时间拷贝一份作为到期时间
var d2=new Date(d1);
//设置3年后
d2.setFullYear( d2.getFullYear()+3 );
//把到期时间拷贝一份作为续签时间
var d3=new Date(d2);
//提前一个月
d3.setMonth( d3.getMonth()-1 );
//判断这一天是周几
console.log(d3.getDay());
//如果是周六,提前一天
//如果是周日,提前两天
if(d3.getDay()===6){
  d3.setDate( d3.getDate()-1 );
}else if(d3.getDay()===0){
  d3.setDate( d3.getDate()-2 );
}
console.log('入职时间:'+d1.toLocaleDateString());
console.log('到期时间:'+d2.toLocaleDateString());
console.log('续签时间:'+d3.toLocaleDateString());

2.Number对象

new Number() 将数据转为数值,返回对象
Number() 将数据转为数值,返回数值

toString() 转换为字符串
toFixed(n) 保留小数点后n位,同时也会转为字符串

3.Boolean对象

new Boolean() 将数据转为布尔型,返回对象
Boolean() 将数据转为布尔型,返回布尔型

4.错误处理

语法错误(SyntaxError):不符合语法规范,例如出现中文符号,缺少括号...
引用错误(ReferenceError):使用了未声明的变量
类型错误(TypeError):对象下的方法名称拼写错误,或者不存在的方法
范围错误(RangeError):数据的使用超出了JS规定的范围
自定义错误:程序自己定义的错误 throw 错误内容

错误处理是出现错误后,不影响后续代码的执行
try{
尝试执行,可能会产生错误,出现错误后不会影响后续代码的执行
}catch(err){
捕获错误,只有try中出现错误才会执行,会将错误信息放入到err中
错误处理...
}

5.ES6

ECMA
ECMAScript 6 是JS的第6套标准规范
ES2015 ES2016 ES2017

1.ES6

(1)块级作用域
let声明的变量不存在变量的提升,同一个作用域下不允许重复声明。
块级作用域:大括号之间的作用域,包括if、else、while、for...
块级作用域下,let声明的变量是局部变量,外部是无法访问到的。

练习:计算1~100之间所有整数的和,声明变量使用let

let sum=0;
for(let i=1;i<=100;i++){
  sum+=i;
}
console.log(sum);

(2)函数增强
可以给函数中的参数设置默认值
function add(a,b=0){
a=a||0; //ES6之前设置默认值的方式
}
add(); //如果没有提供实参则会使用默认值
(3)箭头函数
()=>{ }
对匿名函数的简化,不等价于匿名函数
sort( (a,b)=>{
return a-b;
} )
如果箭头函数的函数体中只有一行代码并且是return形式可以进一步简化
sort( (a,b)=>a-b )

练习:使用函数表达式创建函数,传递任意两个数字返回最大值;使用箭头函数代替匿名函数。

//练习:使用函数表达式创建函数,传递任意两个数字返回最大值;使用箭头函数代替匿名函数。
let getMax=(a,b)=>{
  return a>b ? a : b;
}
//let getMax=(a,b)=>a>b ? a : b;
console.log(getMax(3,5));

(4)模板字符串
之间的内容就是模板字符串 ${JS表达式} `
解决了字符串的拼接问题

练习:假设从后端获取到了一条商品的数据,格式为对象,包含有编号、标题、价格、是否在售(1/0);打印出以下格式
编号:
标题:
价格:xxxx.00元
是否在售:是

//引入07_yan.js
//引入同一级目录下的模块加路径 ./
//引入模块得到的是导出的对象
var obj=require('./07_yan.js');
console.log(obj);
//使用导出的内容
console.log(obj.a1);
console.log(obj.fn1());
console.log('这是我的的眼睛模块');

var a=1;
function fn(){
  return 2;
}
//默认公开的内容是一个空对象
//如果要公开内容只需要往空对象下添加内容
//module.exports 当前模块导出的内容(公开的内容)
module.exports={
  id:8,
  a1:a,
  fn1:fn
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容