字符串详解
-
-
转意字符正常使用
\‘
\n
\t
\u4s2d //Unicode字符
\x41 //Ascll字符 -
多行字符串编写
使用的是TAB上面的点
‘use strict‘;
//多行字符串的编写
let msg1=
`hello
你好`; -
模板字符串
使用$符号拼接
//模板字符串
let name="yp";
let age=20;
let msg2=`${name},我很好` -
字符串长度
**.lengrh;
-
字符串的可变性
字符串中的字符不可变
‘use strict‘;
let student=‘student‘;
student[0]=1;
console.log(student);
//结果为student -
大小写转换
转换使用的是方法,不是属性
student.toUpperCase();
student.toLowerCase(); -
获取下标
student.indexOf(‘t‘);
//结果为1 -
截取字符串长度
//这里的()代表的是[),左闭合,右不闭合
student.substring(1,5);
数组详解
JS中的Array可以包含任意数据类型
let arr=[1,2,3,5,4,6,7]; (7) [1, 2, 3, 5, 4, 6, 7] arr[0]=0; 0 arr; (7) [0, 2, 3, 5, 4, 6, 7]
-
长度
给arr.length赋值后,数组的大小就会发生变化,赋值小于原来就会丢失元素,大于原来就会在后面添加未定义的值;不建议这样使用
arr.length=8; 8 arr (8) [0, 2, 3, 5, 4, 6, 7, empty]
-
indexOf(),通过元素获取下标
arr.indexOf(5); 3
-
slice()截取Array的一部分,返回一个新数组
与String中的substring类似
arr.slice(2) (6) [3, 5, 4, 6, 7, empty] arr.slice(2,6) (4) [3, 5, 4, 6]
-
push(),pop()
push();//在尾部压入元素 pop();//从尾部弹出元素
-
unshift(),shift()
unshift();//在头部压入元素 shift();//从头部弹出元素
-
排序sort()
arr (8) [0, 2, 3, 5, 4, 6, 7, empty] arr.sort() (8) [0, 2, 3, 4, 5, 6, 7, empty]
-
元素反转reverse()
arr (8) [0, 2, 3, 4, 5, 6, 7, empty] arr.reverse(); (8) [empty, 7, 6, 5, 4, 3, 2, 0]
-
拼接concat()
concat()没有改变原来的数组,只是返回的了一个新的数组
(8) [empty, 7, 6, 5, 4, 3, 2, 0] arr.concat([‘1‘,‘2‘,‘3‘]) (11) [empty, 7, 6, 5, 4, 3, 2, 0, "1", "2", "3"]
-
连接符join()
arr.join(‘-‘); "-7-6-5-4-3-2-0"
-
多维数组
arr=[[1,2],[2,4],[5,2]]; (3) [Array(2), Array(2), Array(2)] 0: (2) [1, 2] 1: (2) [2, 4] 2: (2) [5, 2] length: 3 arr[1][1]; 4
对象类型详解
JS中的对象就是若干个键值对
JS中的所有对象都是字符串,值是任意对象
let 对象名={ 属性名:属性值, 属性名:属性值, 属性名:属性值, }; let person={ name:‘yp‘, age:20, score:0, email:‘1351414677@qq.com‘ }
JS中的对象用{...}表示,键值对描述属性 xxx:xxx,多个属性之间用逗号隔开,最后一个属性不加逗号(会存在浏览器不兼容问题)
-
对象赋值
person.name=‘雍鹏‘; "雍鹏" person.name; "雍鹏"
-
使用一个不存在的对象属性并不会报错
person.max; undefined
-
动态的删减
delete person.score true person {name: "雍鹏", age: 20, email: "1351414677@qq.com"}
-
动态添加
直接给新的属性添加数值即可
person.max=‘999‘; "999" person {name: "雍鹏", age: 20, email: "1351414677@qq.com", max: "999"}
-
判断属性值是否存在这个对象中
xxx in xxx,使用in会找到父类的方法
20 in person false ‘20‘ in person false age in person VM350:1 Uncaught ReferenceError: age is not defined at <anonymous>:1:1 (匿名) @ VM350:1 ‘age‘ in person true ‘toString in person’ true
-
判断一个属性是否是这个对象本身拥有的:hasOwnProperty()
person.hasOwnProperty(‘age‘) true person.hasOwnProperty(‘toString‘) false
流程控制
if判断
‘use strict‘; let age=9; if(age>3){ alert(‘爬啊‘); }else if{ alert(‘走‘); }else{ alert(‘跑‘); }
while循环,避免死循环
while(age<70){ age=age+1; console.log(age); } do{ age=age+1; console.log(age); }while(age<70)
for循环
for(let i=0;i<100;i++){ console.log(i); }
forEach循环
let age=[1,564,31,5641,61,6]; age.forEach(function(e){ console.log(e); });
for..in/for..of
let age=[1,564,31,5641,61,6]; for(let num in age){//打印下标 if(age.hasOwnProperty(num)){ console.log(age[num]); } } for(let x of age){//打印数值 console.log(x); }
该方法认识就好,遇到的时候再去查文档
Map和Set
两者属于ES6的新特性
遍历Map和Set只能用for...of不能用for...in
用for...in遍历的时候如果在创建之后添加了新的数据,for...in不会显示它的下标,而且显示数值,这是bug
Map:
//ES6 MAP //学生名字,学生成绩 //let name=[‘Tom‘,‘Jack‘,‘Tim‘]; //let scores=[120,100,90]; let map=new Map([[‘Tom‘,120],[‘Jack‘,100],[‘Tim‘,90]]); let name=map.get(‘Tom‘);//通过ket获得了value map.set(‘admin‘,150);//新增或者修改 map.delete(‘Tom‘);//删除
Set:无序不重复的集合
let set=new Set[3,1,1,1,]//set可以去重 set.add(2);//添加 set.delete(1);//删除 console.log(set.has(3));//是否包含某个元素