变量声明
let
- 局部作用域(在一对{}启用)
- 不能变量提升
- 在一个作用域里不能重复声明
const
- 局部作用域(在一对{}启用)
- 不能变量提升
- 在一个作用域里不能重复声明
- 变量名建议大写
- 声明必须赋值
- 值类型不允许修改
解构
- 把数组,对象,解构为单独的变量(…rest剩余值)
var arr = [1,2,3,4,5,6,7,8];
var [a,b,...rest] = arr;
console.log(a,b,rest);
var [a,,,b=10] = [1,2,3,4];
console.log(a,b);
- 效果图
对象解构
- 和数组解构一致;…rest剩余,没有顺序
var obj = {name:"mumu",age:"18",eye:2,leg:8};
var {age,name,eye,leg=2,...rest} = obj;
console.log(name,age,leg,rest);
- 效果图
对象简写
- 如果对的键名与值一致,可以省略,函数可以省略function关键字
var age = 18;
var name = "mumu";
var obj = {name:name,age:age,say:function(){ alert(this.name+this.age)}}
var obj2 = {name,age,say(){ alert(this.name+this.age)}} // 简写
- 效果图
字符串相关方法
- 01 遍历字符串
var str = 'yue𠮷口';
for(var i =0;i<str.length;i++){
console.log(str[i])
}
for(let s of str){
console.log(s)
}
- 02 trim 移除空格(trimLeft trimRight)
var str = ' 我爱我的祖国 ';
console.log(str);
console.log(str.trim())
- 03 repeat重复
console.log("我爱你\n".repeat(100))
- 04 查找是否包含 indexOf lastIndexOf 找到返回下标,找不到返回-1 includes是否包含 返回true或false
var str = "台湾是中国的一个省份";
alert(str.includes("福建"))
- 05 检测:startsWith 以…开头 endsWith 以…结尾
var str = "我特别喜欢和你做朋友"
alert(str.startsWith('你'));
- 06 填充: padStart(位数,填充字符串) padEnd()
var str = '1';
console.log(str.padStart(3,'0'))
console.log(str.padEnd(10,'0'))
- 07 字符串模板(``),用${ }定义js,可以随意换行,可以随意使用符号
var s = '花轿';
var str = `那天,他坐上${s.length<3?'八抬大轿':'奔驰加长版'},'"微笑"'
着就看不见了`;
console.log(str);
数组
- 01 includes 检查
let arr = [5,"喜欢","吃肉"];
alert(arr.includes(6))
- 02 fill 填充
var arr =[];
// 设置长度
arr.length = 5;
// 填充数组
arr.fill("填充内容",0,5);
// 输出
console.log(arr)
- 03 set 去重
var arr = [1,2,3,1,2,3,2,1,1];
// 使用set去重
// 定义一个不重复的列表
var s = new Set(arr);
// 把set转换为数组
var arr2 = Array.from(s);
// 输出
console.log(arr2);
// 在数组里面展开一个set
var arr3 = [...new Set(arr)];
console.log(arr3);
- 04 filter 去重
// filter 去重的原理:indexOf下标与当前下标对比
var arr2 = arr.filter(function(item,index){
// return true保留,return false移除
// indexOf 得到下标等于index当前下标 保留
if(arr.indexOf(item)==index){
return true;
}else{
return false;
}
})
console.log(arr2)
函数参数
- 01 默认参数 函数的默认参数
function say(color = '黑'){
alert('没有你的世界是'+color+'色的');
}
say();
say('五彩');
- 02 扩展参数(执行) 函数的拓展实参(调用)
function metting(a1,a2,a3){
console.log(`今天来参加,中共中央政治局常委会的有,${a1},${a2},${a3}同志`);
}
var arr = ["小丁","大段","成龙","小小曾"];
// 在函数调用的时候把数组传入拓展
metting(...arr)
// metting.apply(null,arr);
- 03 不定参(定义) 函数的不定参数(定义的时候)
function add(...list){
// 把参数list列表累计相加弹出
// alert(list,reduce((a,b)=>a+b))
// arguments,关键字,指函数的参数列表,Array.from把类似数组的元素转换为数组
var re = Array.from(arguments).reduce((a,b)=>a+b);
alert(re);
}
add(15,20,30)
箭头函数
- 01 箭头函数就是函数的简写形式
// 箭头左边是参数
// 箭头右边是返回值,也是函数要执行的代码
var fun = function(str){return "love"+str;}
var fun1 = str=> "love"+str;
- 02 参数:0个或多个用()包裹
// 例1
var fun = function(a,b){alert(a+b)}
var fun2 = (a,b)=>alert(a+b)
// 例2
var fun = function(){alert("我爱ES6")}
var fun2 = ()=>alert("我爱ES6")
- 03 返回值
// 如果返回的是一个对象,那么用括号包裹
var fun = function(){return {name:"mumu",age:18}}
var fun2 = ()=>({name:"mumu",age:18})
console.log(fun2());
- 04 执行语句:如果执行有多行,返回语句如果用return 执行语句要用{}包裹
var fun = function(str){
if(str.includes("俄罗斯")){
return "沙皇大帝"
}else{
return "金帐汗国"
}
}
//
var fun2 = str=>{
if(str.includes("俄罗斯")){
return "沙皇大帝"
}else{
return "金帐汗国"
}
}
alert(fun2('puting'))
- 05 箭头函数的this指向上一层作用域的this
- 06 箭头函数不能new 当构造函数
class类
类就是function 构造函数的语法糖(简写) 本质上还是函数typeof class
class类小游戏
class Box{
// 初始化实例(构造函数)
constructor(life=1,x=0,y=0){
// 生命力
this.life = life;
// 墙的x与y值
this.x = x;
this.y = y;
// 创建一个节点
var dom = document.createElement("div");
// 插入节点
document.body.appendChild(dom);
// 指定实例的dom
this.dom = dom;
// 更新dom
this.updateDom();
// 给dom添加点击事件
this.dom.addEventListener("click",()=>{
// 箭头函数,this指向上一层作用域this(Box实例)
// 让生命值--
this.life--;
// 如果生命值小于等于0,让dom从页面删除
if(this.life <= 0){this.dom.remove(); }
// 更新dom
this.updateDom();
})
}
updateDom(){
// 根据生命值的不一样,赋值给它不同的颜色
if(this.life<3){
this.color="#c83a0b";
}else if(this.life<=5){
this.color="#791810";
}else{
this.color="#e3e3e3";
}
// 修改dom的样式:宽;高;背景色;位置;左;顶
this.dom.style.width = "100px";
this.dom.style.height = "100px";
this.dom.style.backgroundColor = this.color;
this.dom.style.position="absolute";
this.dom.style.left = this.x+"px";
this.dom.style.top = this.y+"px";
}
}
// Box是类:b1,b2,b3类的实例
var b1 = new Box();
// 当实例的时候会先执行constructor创建一个实例对象,也会执行updateDom更新dom
var b2 = new Box(10,100,0);
var b3 = new Box(4,200,0);
// 创建一个新的MBox 可以移动box 继承Box
// 自动移动(从上掉下来)
// 继承Box
class MBox extends Box{
constructor(life=1,x=0,y=0){
// super调用父构造函数的方法
super(life,x,y);
// 停止动画
this.id = null;
// 自动向下移动
this.autoMoveDown();
}
autoMoveDown(){
this.id = setInterval(()=>{
// 更改y值
this.y+=2;
// 更新dom(继承Box)
this.updateDom();
if(this.y>window.innerHeight){
// 如果操作了窗口的高,移除
this.dom.remove();
// 停止间隔调用
clearInterval(this.id);
}
},16)
}
}
// 实例化MBox
var b4 = new MBox(4,300,0)
var b5 = new MBox(10,400,-200)
var b6 = new MBox(2,500,-300)
var b7 = new MBox(3,600,-400)
效果图展示