es6

es6

let

var a = 10
let b = 20
console.log(a, b);
看不出区别

前面输出不报错, 输出undefined
console.log(b);
var b = 20
前面输出报错
console.log(a);
let a = 10

 

1.let定义的变量没有预解析

2.let定义的变量不在window中

var a = 10
console.log(a);

let a = 10
console.log(a);

 

3.let会创建一个作用域, 如果碰到了大括号, 会将自己的作用域跟大括号重合 - 块级

for (var i = 1; i <= 3; i++) {}
console.log(i); //4

for (let i = 1; i <= 3; i++) {}
console.log(i); //is not defined 报错
if (true) {
  var a = 10
}
console.log(a); //10
if (true) {
  let a = 10
}
console.log(a); //is not defined 报错

 

{
  var a = 10
}
console.log(a); //10

{
  let a = 10
}
console.log(a); //is not defined 报错

4.同名变量不允许重复定义

var a = 10
var a = 20
console.log(a); //20

let a = 10
let a = 20
console.log(a); //报错
/Identifier 'a' has already been declared

 

let a = 10
function fn() {
  console.log(a);
}
fn() //10

 

 

const

const也是es6新增的定义变量的语法, 使用方式和var是一样的

let 和
const 的区别
修改值

let a = 10
a = 20
console.log(a); //20

const a = 10
a = 20
console.log(a); //报错
Uncaught TypeError: Assignment to constant variable.

console.log(a);
const a = 20
console.log(window);
const定义的变量, 值是不能修改的, 一旦定义就是永恒

const a
a = 10
报错, 不能这样
丢失了初始化赋值

总结:

let和const是es6新增的定义变量的两个关键字, 使用语法跟var是一样的, 跟var的区别:
1. 没有预解析
2. 全局变量不在window中
3. 不能重复定义
4. 会创建一个块级作用域, 碰到大括号会重合作用域

const的值不能改变 - 常量
var date = new Date()
var month = date.getMonth()
var day = date.getDate()

箭头函数

es6中提供了一种新的函数定义语法 - 只能等同于赋值式函数
这种语法对于匿名函数的一种简写 - 箭头函数
语法:() => {} //左边形参,右边大括号
var fn = function () {
  console.log(11);
}
let fn = () => {
  console.log(11);
}

 

当大括号中只有一行代码的时候, 大括号是可以省略的, 如果大括号中这一行代码中有return, 连return关键字一起省略(必须省略)
例:
var fn = function (a) {
  return parseInt(a)
}

let fn = a => parseInt(a)
let res = fn('7')
console.log(res);

var arr = [10, 20, 30]
var brr = arr.map(function (v) {
  return v + v * 0.3
})
console.log(brr);

var arr = [10, 20, 30]
var brr = arr.map(v => v + v * 0.3)
console.log(brr);
当只有一个新参的时候, 小括号可以省略
var fn = function (a) {
  console.log(parseInt(a));
}
fn('5')
let fn = a => {
  console.log(parseInt(a));

}
fn('5')

给函数的形参赋值

function en(a, b) {
  if (b === undefined) {
      b = 0
  }
  return Math.floor(Math.random() * Math.abs(a - b) + Math.min(a, b))
}
var na = en(0, 256)
console.log(na);

fn(0, 256)
fn(0, 1500)

fn(256)
fn(1500)

注意: 带有默认值得参数, 必须在所有形参的末尾

function fn(a, b = 0) {
  return Math.floor(Math.random() * Math.abs(a - b) + Math.min(a, b))
}
var color = fn(30)
console.log(color);

var colo = fn(30, 0)
console.log(colo);

 

反引号 `

es6中提供了一种新的语法用来定义字符串 - 反引号 `
var str = ''
var str = ""
var str = `abc`
console.log(str);
document.write(` < img src = "'+imgPath'" / > `)
document.write(` < img src = "${+imgPath}" / > `)

 

字符串方法

1. 字符串.startsWith(字符/小字符串)

var str = 'asdjfdgjgf'
var bool = str.startsWith('a')
console.log(bool);

var bool = str.startsWith('asdj')
console.log(bool);

 

2.字符串.endWith(字符/小字符串)

判断字符串是否以某个字符或者小字符串结尾的 - 字符串.endWith(字符/小字符串)
var bool = str.endsWish('f')
var bool = str.endsWish('asdj')
console.log(bool);

 

3.字符串.includes(字符/小字符串)

判断字符串中是否包含某个字符串或者小字符串 - 字符串.includes(字符/小字符串)
var bool = str.includes('jf')
console.log(bool);

var bool = str.includes('j')
console.log(bool);

 

数组方法

数组.some

数组.some - 判断数组中是否至少有一个元素是满足指定条件的,返回布尔值
语法:
var 返回值 = 数组.some(function(v,i,a){
  return 条件
})

var arr = [100, 50, 90, 80, 76, 88]
var k = 0
var bool = arr.some(function (v) {
  k++
  return v < 60
})
console.log(bool);

console.log(k);

 

数组.every

数组.every - 判断数组中是否所有元素都满足指定条件 - 返回布尔值
语法:
var 返回值 = 数组.every(function (v, i, a) {
  return 条件
})

var arr = [100, 50, 90, 80, 76, 88]
var bool = arr.every(v => v > 60)
console.log(bool); //false

数组.find 找第一个满足条件的元素 - 返回找到的元素 找不到 - undefined
语法:
var 返回值 = 数组.find(function (v, i, a) {
  return 条件
})

数组.findIndex

数组.findIndex - 在数组中找第一个满足条件的元素的下标 - 找到返回下标 找不到返回 - 1
语法:
var 返回值 = 数组.findIndex(function (v, i, a) {
  return 条件
})
var arr = [100, 50, 90, 80, 76, 88]
var index = arr.findIndex(v => v < 60)
console.log(index);//1

解构

解构赋值

解构赋值:快速的将对象或数组中的值批量赋值给变量
var arr = [100, 50, 90, 80, 76, 88]
var a = arr[0]
var b = arr[1]
// 赋值给a,b
console.log(a); //100

 

数组解构

数组解构 - 快速的将数组中的批量赋值给变量
var/let/const[变量1,变量2,...]=数组

var arr = [1, 2, 3, 4, 5]
var [c] = arr   //用这个输出1
var [a, b, c] = arr //这个输出3
var [_,_,c] = arr //位置不占也是3
console.log(c);

 

 

多重解构
var/let/const[[变量]]=数组

var arr = [
  1,
  [
      4,
      5
  ],
  2,
  3
]
var[_,brr]= arr
console.log(brr);//(2)[4,5]
var [_,a] = brr
console.log(a);//5
简写:
var[_,[_,a]] = arr
console.log(a);//5

快速交换两个变量的值
var a = 1
var b = 2
var[b,a] = [a,b]
console.log(a,b);

 

对象解构

对象解构
var/let/const{跟对象中的键同名的变量}=对象

var tang = {
  username: '唐伯虎',
  age: '12',
  sex: '男',
  wife: {
      usname: '翠花',
      age: 13,
      sex: '女'
  }
}

正常写:
赋值给age
var age = tang.age
var username = tang.username
console.log(age);

解构时变量名必须跟对象的键的名字保持一致
var {
  age,
  username
} = tang
console.log(age, username);
不保持一致,输出undefined
例:
var {a,b} = tang
console.log(a,b);

解构对象并取别名 - 一旦取别名原来的键就不能用了
var/let/const{跟对象中的键同名的变量:自定义的变量名}=对象
var {
  age: a,
  username: b
} = tang
console.log(a, b);//12 唐伯虎
console.log(age, username);//报错,取别名原来的键就不能用了

多重解构
var/let/const{跟对象中的键同名的变量:{继续解构}}=对象
var {wife} = tang
console.log(wife);//{usname: '翠花', age: 13, sex: '女'}
var {wife:{usname}} = tang
console.log(usname);//翠花

...运算符

...运算符 - (对象或者数组) 可以将一个对象或数或组或展开多个值或者多个键值对, 也可以将多个值合并为一个对象或者数组
var pbj = {
  unname: '陈冠希',
  sex: '男'
}
console.log(pbj);
var obj = {
  ...pbj,
  wife: {
      age: '12',
      name: '如花',
      sex: '女'
  }
}
console.log(obj); //{unname: '陈冠希', sex: '男', wife: {…}}

var obj2 = {
  ...pbj,
  age: '12',
  name: '如花',
  sex: '女'
}
console.log(obj2); //{unname: '陈冠希', sex: '女', age: '12', name: '如花'}

 

展开数组

function fn(a,b,c){
  return a+b+c
}
利用数组展开
var arr = [4,5,6]
var num =fn(...arr)//把一个数组展开成多个值
console.log(num);

var arr = [1,9,3,7,6,4,2,8,5]
var max = Math.max(arr)
console.log(max);//NaN
var max1 = Math.max(...arr)
console.log(max1);//9
合并数组
function fn(...arr) { //任意多个数组的和
  console.log(arr);
}
fn(1, 2, 3)
fn(1, 2, 3, 4, 5, 6)

 

posted @ 2022-03-28 00:03  禅心佛子  阅读(49)  评论(0)    收藏  举报