014 ES6常用

55 阅读4分钟

ES6常用

1. 为什么使用ES6

  • 使得JS可以用来开发大型的Web应用,成为企业级语言
  • 而企业级的开发语言就是: 适合模块化开发,拥有良好的依赖管理

2. var、let、const的区别

var不受条件限制,定义的变量没有范围限制,没有前后关系

let与var相反,受范围与前后关系限制

const是常量,定义完之后不能修改

3. ES6块级作用域

什么是块级作用域?

作用域就是一个变量可以使用的范围

在没有es6 的let之前,只有var 的全局作用域函数作用域

而块级作用域的意思其实就是一个{} (代码块),变量只有在 {} 中生效

{
    let a = 'ab'
    var b = 'cd'
    console.log(a) // 'ab'
}
console.log(a)  // ReferenceError: a is not defined
console.log(b)  // 'cd'

2. ES6字符串模板

  1. 使用反字符号``来总括分行的字符串
str = `<div>
			<span>你好</span>
		</div>`
console.log(str)  // <div><span>你好</span></div>
  1. 在字符串中插入变量和表达式,变量名写在${}中,${}也可以放入js表达式
let a = '小明'
let b = '西瓜'
let c = 18
let d = `${a}今年${c + 20}岁,爱吃${b}`  // 小明今年38岁,爱吃西瓜
  1. 插入函数
function fineFunc() {
    return `是的,不错!`
}
let say = `今天天气不错!${fineFunc()}`
console.log(say)

3. ES6判断字符串里是否包含某些值

1. indexOf()

方法可以返回某个指定的字符串值在字符串中首次出现的位置

如果要检索的字符串值没有出现,则该方法返回 -1

let str = 'Tom'
console.log(str.indexOf('a') != -1) // false 

2. includes()

返回布尔值,表示是否找到了参数字符串。

let str = 'Tom'
str.includes('a')?console.log(true):console.log(false)  // false

let arr = [2, 4, 8]
arr.includes(3)  // false
arr.includes(4)  // true

3. startsWith()

用来判断当前字符串是否是以另外一个给定的值开头的,根据判断结果返回 true 或 false

// str.startsWith(searchString, [position])
// searchString: 要搜索的值
// position: 在str中搜索searchString 的开始位置,默认为0

// 例子:
let str = "我和我的祖国,一刻也不能分割"
str.startsWith("我和")  // true
str.startsWith("我和", 0)  // true
str.startsWith("我和", 1)  // false
str.startsWith("一刻")  // false
str.startsWith("一刻",7)  // true

4. endsWith()

用于判断字符串是否以给定的值结尾,根据判断结果返回true或false

let str = "前端开发工程师"
str.endsWidth('师')  // true

4. ES6箭头函数

箭头函数的出现简化了函数的定义,让代码更简洁,省去关键字function

但是也要注意箭头函数的局限性,以及箭头函数中自身没有this,this指向父级

弊端:

  1. 箭头函数没有原型prototype, 因此箭头函数没有this指向。
  2. 箭头函数不会创建自己的this,如果存在外层第一个普通函数,在函数定义的时候会继承它的this
  3. 箭头函数外层没有函数,严格模式和非严格模式下它的this都会指向window全局对象
let getFunc = ()=>{
    return '你好'
}
// 只有一个参数可以省去括号
let getData = name => {
    return name
}
// 多个参数用括号包裹,以逗号分割
let getStr = (a,b,c,d) => {
    return [a,b,c,d]
}

5. ES6对象表达式

let a = 'jack'
let b = 'tom'

const obj1 = {
    a:a,
    b:b
}
const obj2 = {
    a,
    b,
}

6. ES6判断两个值是否相等

除了常用的 ===== 用来比较两个值的结果,ES6 可以使用新的方式。

Object.is(val1, val2)
Object.is(88,88)  // true
Object.is(88,'88')  // false
Object.is('',0)  // false
Object.is('ab','cd')  // false

7. ES6 Object.assign() 复制对象,数据合并

let obj = {}
Object.assign(obj, { name: 'jack' })
console.log(obj)  // { name: 'jack' }

let target = { a: 1 }
let s1 = { b: 1 }
let s2 = { c: 1 }
Object.assign(target, s1, s2)
console.log(target)  // { a: 1, b: 1, c: 1 }

9. ES6解构运算符

let arr = [1,2,3]
let [a, b, c] = arr
console.log(a,b,c)  //  1,2,3

10. ES6展开操作符

let arr = ['a','b','c']
console.log(...arr)  // a b c

11. 获取对象属性Object.keys(),Object.values(),Object.entries()

const person = {
    name: 'jack',
    age: 20,
    lang: ['html', 'css', 'javascript']
}
console.log(Object.keys(person)) // ['name', 'age', 'lang']
console.log(Object.values(person))  // ['jack', 20, ['html', 'css', 'javascript']]
console.log(Object.entries(person)) 
// [
//  [ 'name', 'jack' ],
//  [ 'age', 20 ],
//  [ 'lang', [ 'html', 'css', 'javascript' ] ]
// ]

12. 深度拷贝 ...

1. 单个对象拷贝

const person1 = {
    name: 'jack',
    age: 28
}
// 将person1 的内容完全拷贝给 person2
const person2 = { ...person1 }
console.log(person1)
console.log(person2)

2. 合并两个对象到第三个对相

相同的属性会覆盖,多余会添加。

const m1 = {
    name: 'jack',
    age: 18,
    address: 'zhengzhou'
}
const m2 = {
    name: 'tom',
    age: 23,
    sex: 'girl'
}
const m3 = { ...m1, ...m2 }
console.log(m3) 
// { name: 'tom', age: 23, address: 'zhengzhou', sex: 'girl' }