一、= 的含义
1)如果右边的数据是基础数据类型(字符串、数字、未定义、布尔值、null空指针)
赋值:右边的数据给左边变量,给完之后,左右就没有关系了
2)如果右边的数据是对象(只有对象才有引用关系)
则 = 是引用:右边数据给左边,左右建立引用关系,两个变量建立了引用关系之后,任意一边的改变(是指使用点操作或者 [] 符号的操作)会影响另外一边。但是重新赋值是不会影响的
例如:点操作1
结果:
例如:点操作2
<div id="wrap">123</div>
let oWrap = document . getElementById (”wrap")
// oNrap.classList .add ("abc") ;
let x= oWrap.classList;
x.add("aaa") ;//x.["add"]("aaa");下标操作
结果
例如:数组操作
例如4:任意一边的改变(是指使用点操作或者 [] 符号/下标的操作)会影响另外一边。但是重新赋值是不会影响另外一边
原因
3)数据 类型的 === 判断
//基础数据类型在做比较运行的时候,只看值与类型一不一样
let a=10;
let b=10;
console.log(a === b) ; / /true
//对象数据类型,在做比较的时候,比较的是地址
let c={name:"lala"};
let b={name:"lala"};
let e=c;
console. log(c ===b); // false
console.log(c === e) ; // true
二、必记:箭头函数(属于一种函数的写法)
特性:内部不会产生新的this执行(父级作用域this指向是谁这里的this指向就是谁)
例如:
let a=function(){
console.log(123);
};
//箭头函数的写法, ()=> 相当于function()
let a= ()=>{
console.log (123) ;
};
a();//打印123
1)注意 :当形参只有一个的时候,() 括号可以省略不写(除此之外,任何情况下都要写小括号)
2)函数内部的代码只用一行返回的时候 {} 符号可以省略不写,省略大括号的时候,=> 右边的表达式就是函数的return的值
例如:1
let X = (a,b)=>{
return a+b;
};
let x = (a,b)=>a+b;//a+b默认函数的return值
console.log( x(3, 4) ) ;
例如:2
3)箭头函数的this指向会指向父级的this的指向
结果:
3)事件中不可以使用箭头函数,因为箭头函数的this指向会指向父级的this的指向
三、必记:数组的一些API
1)日常操作
2)修改数组的长度
结果:后面的数据被清除掉
考题:如何快速的把一个数组清空,前提是不改变引用的前提下清空,(如arr=[]这种写法则改变了引用了,因为这种写法是重新赋值了)?
length=0 即可
3)数组的长度改变了
let arr = [11,22,33,44] ;
arr.length = 10;
console. log(arr) ;/(10) [11, 22, 33, 44, empty x 6]6个空项.empty不是数据
console. log(arr[6]) ;//undefined
4)length 下标操作
//功能:push pop unshift shift 只能在前后加减
//splice可以指定位置进行删除或增加
let arr = [11,22,33,44] ;
//unshift 往数组前面添加数据
// arr.unshift (999) ;
//console. log (arr) ;//[999 ,11,22,33,44] ;
//删除数组第一个数据
//arr.shift() ;
//console. log (arr) ;//[,11,22,33,44] ;
//push往数组后面添加数据
arr.push (678) ;
console. log (arr) ;//[,11,22,33,44,678] ;
// arr.push(5, 6) ;
//console. log (arr) ;//[,11,22,33,44,5,6] ;
//pop删除数组的最后一个数据,不需要写参数,只能删除一个
//如果需要多删除几个就多写几个pop
// arr.pop () ;
//console. log (arr) ;//[,11,22,33] ;
//splice可以指定位置进行删除或增加
//三个参数:从哪一位开始,删除多少个(前两个参数是固定的,必须写),用什么来替换
//返回值是删除数据的集合
//let x=arr.splice(1,1);//(1)[22]
例如:
let arr = [11,22,33,44] ;
arr.splice(1,1)//从第一位开始,删除一个// [11,33,44] ;
//替换
arr.splice(1,1,2)//从第一位开始,删除一个,替换为2
// [11,2,33,44] ;
//不删除,只想添加
arr.splice(2,0,999)//从第二位开始,不删除,在22和33之间添加为999
// [11,2,999,33,44] ;
2)返回值(不常用:了解)
push与unshift
pop与shift一致
5)数组遍历操作
1…形参:item: 数据,index序号,arr原数组(一般不写)
2.item: 数据,index序号,arr原数组(一般不写)的顺序是固定的,形参的名字可以自定义
3.forEach通常与箭头函数结合,不考虑this指向
4.除了数组可以forEach之外, querySelectorAll获取的节点列表也可以直接.forEach
例如1:
let arr = [5,6,7,8];
//形参:item: 数据,index序号,arr原数组(一般不写)
arr.forEach(function(item,index,arr){
console.log(item, index, arr);
});
例如2:对所有的li 进行遍历操作
例如3:获取数据,序号
例如4:加点击事件,获取每一项
aLi.forEach(function(item,index){
item.onclick = function(){
alert(index);
};
});
例如5:点击获取 ,获取每一项li的内容
let aLi = document.querySelectorAll("ul li");
aLi.forEach(function(node){
node.onclick = function(){
alert(this.innerText);
};
});
例如6:通常forEach与箭头函数结合,不考虑this指向
6)其他的处理数组数据的遍历方法,不改变原数组
//filter的参数函数需要返回一个布尔值
//筛选出偶数组成新数组
//filter的参数函数需要返回一个布尔值
//简写
let arr = [1,2,3,4,5,6,7];
let newArr = arr.filter(item=>!(item%2));
console.log(newArr);
//map得到原数组每一项的平方,组成新数组
let arr = [1,2,3,4,5,6,7];
//得到原数组每一项的平方,组成新数组
let newArr = arr.map(item=>item**3); // item**3 item的3次方
console.log(newArr);