js-day15

83 阅读3分钟

ES6

字符串扩展

repeat():重复功能

var str = 'hello 王成!\n'
var res = str.repeat(20)
console.log(res)

补充说明:\n转义字符,把这个字符原来的意思给转换了,变成了表示换行。br只能在网页中解析

includes() startsWith() endsWith() 判定字符串中是否存在某个字符 includes()配合filter()方法可以做模糊搜索功能

console.log('hello'.includes('a'))
console.log('hello'.includes('h'))
console.log('hello'.startsWith('a'))
console.log('hello'.startsWith('h'))
console.log('hello'.endsWith('s'))sole.log('hello'.endsWith('o'))

for of

for of 遍历方式,可以遍历数组也可以遍历字符串,可以直接拿到结果

var str = '王成'
for(let item of str){
    console.log(item)
}
console.log(item)

模版字符串

模板字符串:就是把咱们之前字符串的拼接进行了简化处理

语法:`` 特点:简化了字符串拼接操作、可以让字符串进行换行操作、可以在模板里面

直接使用变量 ${变量名称}

解构赋值

  1. 数组解构
    let [a, b, c] = [10, 20, 30]
    console.log(a, b, c)
    
    let [arr, obj, num] = [[1, 2], {a: 1}, 10]
    console.log(arr, obj, num)
    
    let [a, , b] = [10, 20, 30]
    console.log(a, b) 
    
  2. 字符串解构
    let str = '王成很厉害'
    let [a, b, c, d, e] = str
    console.log(a, b, c, d, e)
    
  3. 对象解构
    let str = '王成很厉害'
    let [a, b, c, d, e] = str
    console.log(a, b, c, d, e)
    对象解构
    let obj = {
       name: '张三',
       age: 18,
       like: ['篮球', '足球'],
       info: {
           id: 1,
           des: '他是一个很牛的人
       }
    }
    let {name, age} = obj
    console.log(name, age)
    let {like} = obj
    console.log(like)
    let {info: {id, des}} = obj
    console.log(id, des)
    console.log(obj.info.des)
    
  4. 交换两个变量的值
        let a = 10;
        let b = 20;
        [a, b] = [b, a]
        console.log(a, b)
    

Symbol

创建一个Symbol类型,独一无二,每个Symbol和Symbol之间都不相同

Symbol()括号里面写的是一个描述信息,不是值。因为Symbol类型专门用来做属性的

let sy1 = Symbol(10)
let sy2 = Symbol(10)
console.log(sy1 == sy2) // false
let num1 = 10
let num2 = 10
console.log(num1 == num2) // true
// let obj = {name: '王成'}
// obj[Symbol('name')] = '崔傑瑜'
// console.log(obj)
let obj = {
    [Symbol('name')]: '张三'
}
obj[Symbol('name')] = '王成'
// console.log(obj)
let arr = Object.getOwnPropertySymbols(obj)
console.log(arr[0])
console.log(obj[arr[0]])
console.log(obj[arr[1]])

Set()

Set() 里面的数据不能有重复的,自带过滤功能

// let s = new Set(['a', 'a', 'b', 'b', 'a', 'c'])
// console.log(s)
// 数组去重
// let arr = ['a', 'a', 'a', 'b', 'c', 'b']
// let s = new Set(arr)
// let res = Array.from(s)
// console.log(res)
let s = new Set(['a', 'b', 'c'])
// - `add(value)`:添加一个值,返回Set结构本身
// - `delete(value)`:删除某个值,返回布尔值
// - `has(value)`:返回布尔值,表示是否是成员
// - `clear()`:清除所有成员,无返回值
console.log(s.size)
// s.add('d')
// s.add('n')
// s.add(['a', 'b'])
s.delete('a')
console.log(s.has('a'))
s.clear()
console.log(s)

Map()

不用Map()
问题:无论把什么类型当成对象的键来使用,最终都会把这个类型转成字符串类型来展示。有时候需要的是就是这个类型本身当初对象的键

let obj = {}
let arr = ['a', 'b']
obj[arr] = '我是一个数组'
obj[1] = '我是一个数字'
console.log(obj)
console.log(arr.toString())

Map()对象,专门可以解决以上的问题。你写的是什么类型作为对象的键,那么就是什么类型

  • keys() : 取出Map里面所有的键
  • values() : 取出Map里面所有的值
  • entries() :取出里面所有的键和值
  • set() : 增加、修改
  • delete() : 删除
  • clear() : 清除
let arr = [10, 20]
let mp = new Map([
   [10, '我是一个数字'],
   [{a: 1}, '我是对象,但是我可以当成键'],
   [arr, '我是数组']
])