美文网首页
es6笔记1

es6笔记1

作者: 刘叶青 | 来源:发表于2019-03-26 08:15 被阅读0次

以下是async await的demo,async await就是把异步请求以同步的形式写出来,异步的目标就是让代码越来越像同步的:

function a(){

        return new Promise((resolve, reject)=>{

            resolve(1)

        });

    }

    function b(data){

        return new Promise((resolve, reject) => {

            resolve(data + 4);

        });

    }

    async function test(){

        let a_result =await a()

        let b_result =await b(a_result)

        console.log(a_result);

        console.log(b_result);

        return 'test返回值';

    }

    test().then(res => {

        console.log('res', res);

    });

跟es6有关的面试题,要联想到es5的相关知识

promise和jQuery的deferred用法几乎一致,如果3年前开始做前端的时候就把jQuery学好,现在学习promise一看就能懂,所以不要以为jQuery过时了,其实他的影子一直都在

问:let a = 6;

function f() {

    setTimeout(function () {

        alert(a);      //为什么这里会报错

        let a = 666;

    }, 0);

}

f();

es6的部分技术,在以前就已经实现了:

es6的剩余参数,其实在coffeescript里已经实现了;

es6的promise,在jQuery1.5的deferred有类似功能;

学习es6时,要联想到相关知识(比如es6的一些东西可以用es5来实现只不过更复杂,es6的一些东西早在jQuery、coffeescript的时代已经有了),有利于对es6的记忆更加深刻

问:es6的箭头函数有什么特点?
答:this是定义时就确定了,而不是调用时才确定

问:es6的class和es5的构造函数有什么区别?
答:class没有提升功能,构造函数有提升功能,示例如下:

问:为什么箭头函数可以改变this的指向?
答:因为箭头函数是和父级上下文绑定在一起的,原文链接:https://cn.vuejs.org/v2/guide/instance.html


问:你能写1个promise的demo吗?
答:
let a = 10;
let promise = new Promise(function (resolve, reject) {
if(a == 10){
    resolve('成功');
}
else{
    reject('失败');
}
});
promise.then(function (res) {
    console.log('res', res);
});


如果不考虑浏览器兼容性问题,定义对象的时候不要这样写:
var name = "name";
var obj = {
 name : name
};
要这样写:
var name = "name";
var obj = {
 name
 };

Object.assign的用途:
1.复制1个对象
2.合并参数


问:如果某个数据,用户写了,就用用户写的内容,如果用户没写,就用默认值,怎么实现?
答:
function ajax(options){ //用户传的数据
let defaults = {
type : 'get',
header : '',
data : {},
};
let data = Object.assign({}, defaults, options)
}

问:你能写几个扩展运算符的demo吗?
答:
demo1:
function show(...a) {  //这里的...a,就是[1, 9, 8, 3, 2]
 return a.sort();
}
console.log(show(1, 9, 8, 3, 2));
demo2:
function show(a, ...b) {    //...b,就是[9, 8, 3, 2],也就是剩余的参数,所以,扩展运算符也叫作剩余运算符
console.log(a);
console.log(b);
}
show(1, 9, 8, 3, 2);
demo3:
let arr = [1, 2];
// 我需要复制一份这个数组,可以使用let arr2 = arr;但是这样的话,他们就是引用同一个地址了,arr2和arr会互相影响,怎么办?怎么样才能实现复制又没有引用同一个地址?
let arr2 = [...arr];
demo4:
扩展字符串可以把伪数组改成数组,
let ul = document.querySelectorAll('ul');  //这里的ul,是伪数组
let newUl = [...ul]; //这里的newUl,就是真数组了

我觉得ecma会新增这些es6的特性,一定是有人提出这样的需求,所以,学习的时候,不要以为自己用不到,或者,不要以为可以用其他方式实现就不认真学习es6了,要认真学习es6,以后哪天遇到某个需求的时候,说不定用es6的某些特性,可以提高工作效率

字符串模板(``)的用途:避免拼接字符串

问:解构赋值的时候,如果值是空的,会报错,怎么设置默认的函数参数?

答:

let a;
    ({a} = {a : 'apple', b : 'banana'})  //如果用结构赋值的时候括号写得不对,js会把解构赋值的东西,解析成块级作用域,这个时候,外面包一层括号就行了,也就是:({a} = {a : 'apple', b : 'banana'}) console.log(a);

解构赋值的用途:
1.ajax数据交互
2.交换2个数据:通过[a, b] = [b, a];可以交换a和b的值
3.import a from '../a.vue',引用模块的时候会用到

const arr = [1];
arr.push(2);
console.log(arr);  //[1, 2],const里的数组,虽然不能直接进行arr=[];这样修改,但是可以间接修改,如果真的要完全禁止修改,可以这样:
const arr2 = Object.freeze([1]);
arr2.push(2);
console.log(arr2);//Uncaught TypeError: Cannot add property 1, object is not extensible

symbol的用途:node底层会用到

class里的get、set、静态方法的用途:封装框架的时候用得到

相关文章

  • ES6_note

    ES6笔记 es6 - 解构 数组的 解构赋值 let [a, b, c] = [1, 2, 3]; 这种写法属于...

  • Ant Design Pro的知识储备

    Less 笔记 Less 官方文档 ReactJs笔记 ReactJs官方文档 ES6笔记 ES6文档 dvaJs...

  • let 和 const 命令

    ES6学习笔记1、let命令ES6中新增了let,用于声明变量,与var类似,但let声明只是在其block(块)...

  • this指向

    js笔记:this的用法+ es6 1、this的用法: this:1、绑定事件的时候,事件"."前面是谁,thi...

  • [总结]ES6 Array

    学习es6时做得小笔记

  • 2.let 和 const 命令

    阮一峰ES6教程学习笔记原文地址 1. let和var let:ES6 新增命令用法类似于var,但是所声明的变量...

  • es6 笔记·1·

    一,常量,变量 const :常量,用法 const info='hello es6'; 特点:首次赋值...

  • (码友推荐)2018-08-21 .NET及相关开发资讯速递

    (码友推荐)2018-08-21 .NET及相关开发资讯速递: 1.学习ES6笔记──工作中常用到的ES6语法2....

  • ES6变量的解构赋值

    本文参考阮一峰老师es6入门做的学习笔记。 1.数组的解构赋值。 ES6允许按照一定模式,从数组和对象中提取值,对...

  • Node.js笔记七:es6

    Node.js笔记七:es6 es6是javascript的新一代语法规范,现在很多新的库都是基于新的es6语法规...

网友评论

      本文标题:es6笔记1

      本文链接:https://www.haomeiwen.com/subject/majwvqtx.html