JS基础

146 阅读2分钟
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