var nickname
//变量提升
console.log(nickname) //undefined
nickname = "simba"
console.log(nickname) //simba
var a = 10
var b = a
//此时b和a指向同一个地址,当a发生改变时,b跟着改变,但是当b改变时,b的地址发生改变,b变,a不变
var a = [10]
function test(a) {
a = [20]
}
test(a)
console.log(a) // 10
//数字都是克隆,如果是数组的话需要看指向的地址是否发生改变
var和let区别
var支持重复声明,支持声明提前.所有声明没有赋值的变量(undefined),没有块级作用域
let不支持重复声明,let不支持声明提前(报错),有块级作用域
let arr = [1,2,3,4]
arr.forEach(function(item//数组的数字,i//数组的下标){
cosole.log(item,i)
}
箭头函数
arr.forEach((item,i)=> {
console.log(item,i)
})
map方法
let arr = [1,2,3,4]
//想要得到[2,4,6,8]
let arr1 = arr.map(function(item){
return item*2
}
当一个方法只有一句话,并且需要return可以简写
let arr1 = arr.map(item => item*2)
//过滤筛选
let arr1 = arr.filter(item => item>=30)
//是否存在
let arr1 = arr.some(item => item === 30)
//是否全部都是
let arr1 = arr.every(item => item === 30)
//统计操作
let arr1 = arr.reduce((total//总和,current//每个项目) => total + current.age,0//初始值)
//批量数组创建
let arr = Array.from({
length:30
}).map((r,i) => {
id: i + 1,
name:"用户" + i,
age:Math.floor(Math.random()*50),
gender:Math.round(Math.random())?"男":"女"
}))
console.log(arr)//创建30个随机数据包含id,name,age,gender 4个属性
//解构,从对象中取同名属性的值,数组找下标
壹
let nickname = "simba"
let age = 20
let obj = {
nickname,//当属性和属性值一样时可以简写
age
}
console.log(obj)//{“simba","20"}
贰
let obj1 = {
a:10,
b:20
}
let {a,b} = obj1
console.log(a,b)//10,20
叁
let arr = [1,2,3,4]
let [,d,e] = arr
console.log(d,e)//2,3
//展开运算符...
let a = {
name:"simba",
age:20
}
let b = {
...a,
gender:"男"
}
console.log(b)//{name:"simba",age:20,gender:"男"}
//模板字符串
let str = '我叫${b.name}'
console.log(str)//我叫simba