ES6常用语法

た 入场券 2022-04-18 05:20 372阅读 0赞

后天就要交大论文绪论的,现在居然还在这写博客,YNB!

聊正事!什么是ES,ES就是ECMA Script,Javascript的语言标准,我们今天具体说下

一. let,const

我们主要关注下面几点:

  • let定义变量,const定义常量
  • 不能重复定义
  • 块级作用域
  • 不存在变量提升

    //变量和常量
    let r=2;
    r=4;
    console.log(r); //4

    const pi = 3.1415926;
    pi = 10; //报错

  1. //不能重复定义(为了防止重复定义到时混乱)
  2. var foo = 1;
  3. var foo = 2;
  4. console.log(foo); //2
  5. let bar = 1;
  6. let bar = 2;
  7. console.log(bar); //报错
  8. //块级作用域(块中的let在外部访问不到,var可以)
  9. if(true){
  10. var test = 1;
  11. }
  12. console.log(test); //1
  13. if(true){
  14. let test1 = 2;
  15. }
  16. console.log(test1); //报错
  17. //块级作用域2
  18. let arr = [1, 2, 3, 4];
  19. for(var i = 0, iLength = arr.length; i<iLength; i++){
  20. //do nothing
  21. }
  22. console.log(i); //4
  23. let arr = [1, 2, 3, 4];
  24. for(let i = 0, iLength = arr.length; i<iLength; i++){
  25. //do nothing
  26. }
  27. console.log(i); //报错
  28. //不存在变量提升(let)
  29. console.log(foo);
  30. var foo = 1; // undefined
  31. //上面代码在编译时是一下顺序
  32. //var foo;
  33. //console.log(foo);
  34. //foo = 1;
  35. console.log(bar);
  36. let bar = 1; //报错

二. 箭头函数

我们主要关注下面几点

  • 参数 => 表达式 / 语句;
  • 继承外层作用域
  • 不能用作构造函数
  • 没有prototype属性

    //箭头函数
    let value = 2;
    let double = x => 2 * x;
    let treble = x => {

    1. return 3 * x;

    }
    console.log(double(value)); //4
    console.log(treble(value)); //6

  1. //没有独立作用域
  2. var obj = {
  3. commonFn : funcion(){
  4. console.log(this); //this指向的是它的调用者obj
  5. },
  6. arrowFn : () => {
  7. console.log(this); //因为箭头函数没有作用域,所以它与obj共享一个作用域,因为obj是在window作用域下,所以此函数也在windows下
  8. }
  9. }
  10. obj.commonFn(); //{commonFn: f, arrowFn: f}
  11. obj.arrowFn(); //Window {postMessage: f, blur: f, focus: f, close: f, frames: window,...}
  12. //不能用作构造函数
  13. let Animal = function(){
  14. }
  15. let animal = new Animal();
  16. animal //Animal{}
  17. let Animal = () => {
  18. }
  19. let animal = new Animal(); //报错
  20. //没有prototype
  21. let commonFn = function(){};
  22. let arrowFn = () => {};
  23. console.log(commonFn.prototype); //{constructor: f}
  24. console.log(arrowFn.prototype); //undefined

三. 模板字符串

  • 反引号标识 “
  • 支持多行字符串
  • 支持变量和表达式

    //基本用法
    let str = ·

    1. <h1 class="title">123</h1>


    ·;
    document.querySelector(‘body’).innerHTML = str;

  1. //嵌套变量的用法
  2. let name = 'Rosen';
  3. let str = `
  4. <div>
  5. <h1 class="title">${name}</h1>
  6. <div>
  7. `
  8. //嵌套函数的用法
  9. let getName = () => {
  10. return 'Rosen Test';
  11. };
  12. let str = `
  13. <div>
  14. <h1 class="title">${getName()}</h1>
  15. <div>
  16. `
  17. //循环嵌套
  18. let names = ['Rosen', 'Geely', 'Jimin'];
  19. let str = `
  20. <ul>
  21. ${
  22. names.map(name => `<li>Hi, I am ${name}</li>`).join('') //其中name是每次循环遍历出来的元素;join('')使用空格分隔遍历的数组
  23. }
  24. </ul>
  25. `
  26. document.querySelector('body').innerHTML = str;

四. Promise

  • Promise对象
  • 关键词:resolve,reject,then

    new Promise((resolve, reject)=>{

    1. $.ajax({
    2. url : 'http://baidu.com',
    3. type: 'post',
    4. success(res){
    5. resolve(res);
    6. },
    7. error(err){
    8. reject(err);
    9. }
    10. })

    }).then((res) => {

    1. console.log('success:', res);

    },(err) => {

    1. console.log('error:', err);

    });

五. 面向对象-类

  • 关键字:class
  • 语法糖,对应function
  • 构造函数
  • extends:类的继承
  • super:调用父类的构造函数

    //类的构造函数
    class Animal{

    1. constructor(){
    2. this.name = 'animal';
    3. }
    4. getName(){
    5. return this.name
    6. }

    }

    let animal = new Animal();
    console.log(animal.getName()); //animal

    class Animal{

    1. constructor(name){
    2. this.name = name;
    3. }
    4. getName(){
    5. return this.name
    6. }

    }

    let animal = new Animal(‘animal test’);
    console.log(animal.getName()); //animal test

  1. //类的继承
  2. class Animal{
  3. constructor(){
  4. this.name = 'animal';
  5. }
  6. getName(){
  7. return this.name
  8. }
  9. }
  10. class Cat extends Animal{
  11. constructor(){
  12. this.name = 'cat';
  13. }
  14. }
  15. new Cat() // 报错(因为继承的子类里面是没有this的,所以要想this指针,则需要加一句super())
  16. class Animal{
  17. constructor(){
  18. this.name = 'animal';
  19. }
  20. getName(){
  21. return this.name
  22. }
  23. }
  24. class Cat extends Animal{
  25. constructor(){
  26. super();
  27. this.name = 'cat';
  28. }
  29. }
  30. let animal = new Animal();
  31. let cat = new Cat();
  32. console.log(animal.getName()) //animal
  33. console.log(cat.getName()) //cat
  34. //对象的用法
  35. //老的用法
  36. var name = 'Rosen',
  37. age = 18;
  38. var obj = {
  39. name: name,
  40. age: age,
  41. getName: function(){
  42. return this.name;
  43. }
  44. getAge: function(){
  45. return this.age;
  46. }
  47. }
  48. //新的用法
  49. let name = 'Rosen',
  50. age = 18;
  51. let obj = {
  52. // 变量名可以直接用作对象的属性名称
  53. name,
  54. age,
  55. //对象里的方法可以简写
  56. getName(){
  57. return this.name;
  58. },
  59. //表达式作为属性名或方法名
  60. ['get' + 'Age'](){
  61. return this.age;
  62. }
  63. }

发表评论

表情:
评论列表 (有 0 条评论,372人围观)

还没有评论,来说两句吧...

相关阅读

    相关 es语法

    ES6语法 Let 声明局部变量,从内往外逐步查找 const 声明常量不可变,用于声明数组较合适 字符串语法 \`\` 反向单引号,字符串内容中可以出

    相关 Es6语法

    1.var要比let的位高,作用域要大 2.let的作用范围很小很小 3.若果在函数内定义一个var变量,在函数外是不能被访问的. function user()

    相关 ES6语法

    后天就要交大论文绪论的,现在居然还在这写博客,YNB!   聊正事!什么是ES,ES就是ECMA Script,Javascript的语言标准,我们今天具体说下 一.

    相关 ES6语法

    [转载文章地址][Link 1] var 之前,js定义变量只有一个关键字:var var有一个问题,就是定义的变量有时会莫名奇妙的成为全局变量。 例如这样