ES6语法(3)
模板字符串
- 基本语法
let name = 'nano' let str = `你好${name}` console.log(str) --> '你好nano'
- 拓展语法
(1) 标签模板字符串
定义:将模板字符串设置为一种调用函数的方式,第一个参数为数组,里面是模板字符串中的字符串,会根据${}分割,如果没有${}就是存放一整个字符串的数组,${}中的变量会依次传递给剩下的形参let foo = (m,n,y)=>{ console.log(m,n,y) } foo`ab${18}cd${20}e` --> ['ab','cd','e'],18,20
函数参数默认值
// 默认参数配合解构
function add ({name,age} = { name:'nano', age:19 }){
console.log( name,age ) -> 'nano',19
}
function add ({name = 'nano',age = 19} = {}){
console.log( name,age ) -> 'nano',19
}
备注: 有默认参数的形参最好放在最后
注意: 设置默认值的形参以及该形参之后的形参,都不算在函数的length之内
注意: 设置函数参数默认值后,会形成一个参数作用域,包裹函数作用域,用于保存参数的值
收集剩余参数(…)
- 定义: 函数参数中以…为前缀的,它会将剩余的参数放到该参数中并且作为一个数组(必须放到最后一个)
- 主要用法:
(1) 搭配箭头函数使用
(2) 收集指定参数[arguments是函数中所有的参数,而剩余参数则是收集未被形参接住的参数]function add(a,b,...args){ console.log(args) }
箭头函数
- this永远指向声明箭头函数的那个作用域
- 箭头函数的this不受this绑定规则的影响,永远指向声明箭头函数的那个作用域
- 箭头函数没有显示原型(prototype)
- 箭头函数不能用来作为构造函数
- 箭头函数没有arguments,通过搭配剩余参数写法收集参数
- 箭头函数都是匿名函数
- 箭头函数不能用作生成器(generator)
展开语法(…)
- 展开语法都是浅拷贝
ES6: 字符串和数组的展开 let str = 'abc' let arr = ['f','g'] console.log( [...str,...arr] ) --> [ 'a','b','c','f','g' ] ES9: 对象的展开 let obj = { a:1,b:2 } console.log( {c:3,...obj} ) --> { c:3,a:1,b:2 }
注意: es6字符串和数组的展开语法是因为迭代器的原因,而ES9的对象展开则是内部实现了一个新方法
Symbol
- 定义:新增的数据基础类型,但是用法跟函数类似,每次调用都会生成一个独一无二的值
- 使用场景: 防止对象key值重名
- 用法: Symbol(description) –> description描述符
let key1 = Symbol('key1')
console.log(key1.description) --> 'key1'
let key2 = Symbol('key2')
// Symbol作为对象的key
let obj = { [key1]:1,[key2]:2 }
obj[s2] = '18'
Object.defineProperty( obj, s2, {
...
} )
/*
Symbol设置为相同的值
Symbol.for(key)
*/
let s1 = Symbol.for('aaa')
let s2 = Symbol.for('aaa')
console.log( s1 === s2 ) --> true
// 如果不用.for的写法,他们是不相等的,因为Symbol每次创建的都是不同的值,即使key相同
// 获取.for的key值
const key = Symbol.keyFor(s1)
console.log(key) --> 'aaa'
注意: Symbol作为key的属性名时,只能通过Object.getOwnPropertySymbol( )的方法获取属性名,其它如遍历,Object.keys( ),Object.getOwnPropertyNames( )都是无法获取的
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!