快速通道:
老样子,先纵览下 ES2018 的新功能:
async/await: 异步终极解决方案
Object.values()
Object.entries()
String padding:String.prototype.padStart、String.prototype.padEnd
函数参数列表结尾允许逗号
Object.getOwnPropertyDescriptors(): 获取一个对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象
SharedArrayBuffer 对象:用来表示一个通用的,固定长度的原始二进制数据缓冲区
Atomics 对象:提供了一组静态方法用来对 SharedArrayBuffer 对象进行原子操作
async/await
async fetchData(query) =>{ try { const response = await axios.get(`/query?query=${query}`); const data = response.data; return data; }catch (error) { console.log(error) }} fetchData(query).then(data =>{ this.processfetchedData(data) })
Object.values()
假设我们要遍历如下对象obj
的所有值
const obj = {a: 1, b: 2, c: 3}; // ES7 const vals=Object.keys(obj).map(key=>obj[key]); console.log(vals);//[1, 2, 3] // ES8 const values=Object.values(obj1); console.log(values);//[1, 2, 3]
Object.values()
省去了遍历key,并根据这些key获取value的步骤。
Object.entries()
假设我们要遍历如下对象obj对象的所有属性的key和value:
// ES7 Object.keys(obj).forEach(key=>{ console.log('key:'+key+' value:'+obj[key]); }) // ES8 for(let [key,value] of Object.entries(obj1)){ console.log(`key: ${key} value:${value}`) }
String padding:String.prototype.padStart、String.prototype.padEnd
String.padStart(targetLength,[padString]) console.log('0.0'.padStart(4,'10')) //10.0 console.log('0.0'.padStart(20))// 0.00
- targetLength:当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。
- padString:(可选)填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断,此参数的缺省值为 " "。
String.padEnd(targetLength,padString]) console.log('0.0'.padEnd(4,'0')) //0.00 console.log('0.0'.padEnd(10,'0'))//0.00000000
- targetLength:当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。
- padString:(可选) 填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断,此参数的缺省值为 " ";
函数参数列表结尾允许逗号
Object.getOwnPropertyDescriptors()
const obj = { name: 'lxm', get age() { return '28' } }; Object.getOwnPropertyDescriptors(obj)
SharedArrayBuffer 对象
/** * * @param {*} length 所创建的数组缓冲区的大小,以字节(byte)为单位。 * @returns {SharedArrayBuffer} 一个大小指定的新 SharedArrayBuffer 对象。其内容被初始化为 0。 */ new SharedArrayBuffer(length)
Atomics 对象
多个共享内存的线程能够同时读写同一位置上的数据。原子操作会确保正在读或写的数据的值是符合预期的,即下一个原子操作一定会在上一个原子操作结束后才会开始,其操作过程不会中断。'
- Atomics.add()
- Atomics.compareExchange()
- Atomics.exchange()
- Atomics.load()
- Atomics.or()
- Atomics.store()
wait() 和 wake() 方法采用的是 Linux 上的 futexes 模型(fast user-space mutex,快速用户空间互斥量),可以让进程一直等待直到某个特定的条件为真,主要用于实现阻塞。