es6新语法特性+vue2的学习笔记

news2024/11/20 8:36:07

1. es6

ECMA的第6版,15年发布,规定新的语法特性

2. let声明变量

varlet
声明的变量会越狱声明的变量有严格的作用域
可以声明多次只能声明一次
会变量提升==(未声明的变量不会报错)==不会变量提升

代码案例:

<script>
  // {
  //   var a = 1;
  //   let b = 2;
  // }
  // console.log(a);
  // // Uncaught ReferenceError: b is not defined
  // console.log(b);

  // var a =1;
  // var a =2;
  // let b =11;
  // let b = 22;
  // // Identifier 'b' has already been declared
  // console.log(a,b);

  // undefined
  console.log(aa);
  var aa = 111;
  // Cannot access 'bb' before initialization
  console.log(bb);
  let bb = 222;

</script>

3.const 声明常量

  • 声明之后不允许修改
  • 一旦声明之后必须初始化
  const aaa = 111;
  // Assignment to constant variable.
  aaa = 222;

4.解构表达式

<script>
  let arr = [1, 2, 3];
  /**数组**/
  // let a = arr[0];
  // let b = arr[1];
  // let c = arr[2];
  // console.log(a, b, c);
  // let [a,b,c] = arr;
  // console.log(a,b,c);

  /**对象**/
  const person = {
    name: 'shigen',
    age: 20,
    hobby: ["1", "2", "3"]
  }

  // abc赋值为name
  const {name: abc, age, hobby} = person;
  console.log(abc, age, hobby);
</script>

5.字符串

<script>
  // 字符串拓展
  let str = "hello.vue";
  console.log(str.startsWith("hello")); // true
  console.log(str.endsWith(".vue")); // true
  console.log(str.includes("e")); // true
  console.log(str.includes("hello")); // true

  // 字符串模板
  let ss = `<p>this is a <span>span</span></p>`;
  console.log(ss);

  // 字符串中插入变量和表达式
  const person = {
    name: "shigen",
    age: 20
  }
  const {name, age} = person;
  function func() {
    return "hello shigen";
  }
  // ${}中表达式
  let info = `我是:${name},我的年龄是 ${age + 10 }, ${func()}`;
  console.log(info);
</script>

6.函数优化

6.1 函数的默认参数

  function add(a, b) {
    // b为空,b的值为1
    b = b || 1;
    return a + b;
  }

6.2 方法声明的时候带默认值

  function add2(a, b = 1) {
    return a + b;
  }
  // 11 20
  console.log(add2(10), add2(10, 10));

6.3 不定参数

  function func(...values) {
    console.log(`参数的长度${values.length}`);
  }
  func(1,2);
  // 参数的长度3
  func(10,20,30);

6.4 箭头函数

  var print = function (obj) {
    console.log(obj);
  }
  var print1 = obj => console.log(obj);
  print1('hello');

  var sum = function (a, b) {
    return a + b;
  }
  var sum1 = (a, b) => a + b;
  console.log(sum1(10, 20));
6.4.1 箭头函数+解构
const person = {
  name : "zhangsan",
  ls: [12,"12","122"]
}
function hello(person) {
  console.log(`hello ${person.ls}`);
}
// 箭头函数+解构
var hello1 = ({ls}) => console.log(`hello ${ls}`);
hello1(person);

7. 对象优化

7.1 获得keysvaluesentries

const person = {
  name : "zhangsan",
  age: 21,
  ls: [12,"12","122"]
}
console.log(Object.keys(person));
console.log(Object.values(person));
console.log(Object.entries(person));

7.2 assign聚合

  const target = {a: 1};
  const source1 = {b: 2};
  const source2 = {c: 3};
  // 要变成 {a:1,b:2,c:3}
  Object.assign(target, source1, source2);
  console.log(target);

7.3 声明对象简写

const age = 11;
const name ="shigen";
const person1 = {age:age, name:name};
const person2 = {age, name};
console.log(person2);

7.4 对象的函数属性简写

let person3 = {
  name: "shigen",
  eat: function (food) {
    console.log(`${this.name} 在吃 ${food}`);
  },
  // 获取不到this
  eat2: food => console.log(`${this.name} 在吃 ${food}`),
  eat3(food) {
    console.log(`${this.name} 在吃 ${food}`);
  }
}

person3.eat("apple");
person3.eat2("banana");
person3.eat3("orange");

7.5 对象拓展运算符

7.5.1 深拷贝对象
  // 对象的深拷贝
  let p1 = {name: "shigen", age:15};
  let someone = {...p1}
  console.log(someone);
7.5.2 合并对象
  let age1 = {age: 15}
  let name1 = {name: "zhangsan"}
  let p2 = {name: "lisi"}
  p2 = {...age1, ...name1}
  // {age: 15, name: 'zhangsan'}
  console.log(p2);

7.6 mapreduce

7.6.1 map的使用

接受一个函数,将原来数组中所有元素用这个函数处理之后放入新数组返回

  let arr = ['1', '-10', 45, '-100']
  arr = arr.map(item => item*2);
  // 2,-20,90,-200
  console.log(arr.toString());
7.6.2 reduce的使用

为数组中的每一个元素依次执行回调函数,不包括数组中被删除或者从未被赋值的元素

/**
   * 1.previousValue 上一次调用回调的返回值/或者是提供的初始值:initialValue
   * 2.currentValue 数组中当前被处理的元素
   * 3.index
   * 4. array 调用reduce的数组
   */
let result = arr.reduce((a,b) => {
  console.log(`previousValue: ${a} currentValue: ${b}`);
  return a+b;
}, 100);
// -128 ===> -28
console.log(`result: ${result}`);

7.7 promisereject

<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>

<script>

  function get(url) {
    /**
     * resolve 成功往下传递
     * reject 失败往下传递
     */
    return new Promise((resolve, reject) => {
      $.ajax({
        url: url,
        success: function (data) {
          resolve(data);
        },
        error: function (data) {
          reject(data);
        }
      })
    })
  }

  get(`mock/user.json`)
  .then((data) => {
    console.log('查询用户成功', data);
    return get(`mock/user_course_${data.id}.json`);
  })
  .then((data) => {
    console.log('课程查询成功', data);
    return get(`mock/score_${data.course_id}.json`);
  })
  .then((data) => {
    console.log('成绩查询成功', data);
  })
  .catch((err) => {
    console.log('出现异常', err);
  });


</script>

8.模块化

8.1 什么是模块化

将代码进行拆分,方便重复使用,类似java中的导包。

export用于规定模块的对外接口

import 用于导入其他模块提供的功能

const util = {
  sum(a, b) {
    return a + b;
  }
}

export {util}

// ---------------------
import util from './util.js'
import {name,age} from './user.js'
util.add(1,2);

9.vue的使用

9.1 npm的使用

npm init -y
npm install vue

9.2 入门的demo

<div id="app">
  <h2>{{name}} is good!</h2>
</div>

<script src="../../../js/vue.js"></script>
<script>
  let vm = new Vue({
    el: '#app',
    data: {
      name: "shigen"
    }
    
  });
</script>

9.3 vue的指令

  • 插值表达式{{}}只能写在标签体里边

  • v-htmlv-text

  • v-bind:href='link'绑定属性 ——-单向绑定

  • v-model ——- 双向绑定

  • v-on 绑定事件

    • 事件修饰符
    • v-on:click=func()或者@click=func()
    • 按键修饰符
    • v-on:keyup.up="num+=2"
  • .stop:防止事件冒泡,等同于JavaScript中的event.stopPropagation()
  • .prevent:防止执行预设的行为,等同于JavaScript中的event.preventDefault()
  • .capture:捕获冒泡
  • .self:将事件绑定到自身,只有自身才能触发
  • .once:只触发一次
  • .passive:不阻止事件的默认行为
  • v-for遍历
  • v-ifv-show v-show只是控制display的属性值
  • 计算属性和监听器
<script>
  let vm = new Vue({
    el: '#app',
    data: {
      xyjPrice: 99.87,
      shzPrice: 89.99,
      xyjNum: 1,
      shzNum: 1,
      msg: ''
    },
    computed: {
      totalPrice() {
        return this.xyjNum * this.xyjPrice + this.shzNum* this.shzPrice;
      }
    },
    watch: {
      xyjNum(newVal, oldVal) {
        if (newVal >= 3) {
          this.msg = "不能超过三本";
          this.xyjNum = 3;
        } else {
          this.msg = ''
        }
      }
    }
  });
</script>
  • 过滤器

常用来处理文本格式化的操作,双括号插值/v-bind表达式

<body>
<div id="app">
  <ul>
    <li v-for="(user,index) in userList">
      {{user.name}} ==> {{user.gender === 1 ? '男' : '女'}} ==> {{user.gender | genderFilter }}
    </li>
  </ul>
</div>

<script src="../../../js/vue.js"></script>
<script>
  let vm = new Vue({
    el: '#app',
    data: {
      userList: [
        {name: 'shigen', gender: 1},
        {name: 'zhangsan', gender: 0}
      ]
    },
    filters: {
      genderFilter(gender) {
        return gender === 1 ? '男' : '女';
      }
    }
  })
</script>
</body>

// 定义全局的过滤器  
Vue.filter('gFilter', function (val) {
  return val === 1 ? '男' : '女';
})

10. vue的组件化

10.1 全局声明一个组件

组件的data是方法的返回

<body>
<div id="app">
  <button v-on:click="count++">被点击了 {{count}}</button>
  <counter></counter>
</div>
<script src="../../../js/vue.js"></script>
<script>
  Vue.component('counter', {
    template: '<button v-on:click="count++">被点击了 {{count}} 次</button>',
    data() {
      return {
        count: 0
      }
    }
  });

  let vm = new Vue({
    el: '#app',
    data: {
      count: 0
    }
  });
</script>
</body>

10.2 局部声明一个组件

const buttonCounter = {
  template: '<button v-on:click="count++">被点击了 {{count}} 次</button>',
  data() {
    return {
      count: 0
    }
  }
};
components: {
  'button-counter': buttonCounter
}
<button-counter></button-counter>

11. 生命周期

Vue 实例生命周期

12.node.js

运行在服务器的javaScript

# 查看node的版本
node -v
# 运行node
node hello.js                                                                                        
hello js!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1035395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

点分治维护dp+连通块上新型dp思路+乘积方面进行根号dp:0922T4

首先连通块&#xff0c;所以点分治肯定是 Trick1 钦定选根的连通块dp 对于钦定选根的连通块dp&#xff0c;有一种常见思路 先对原树求其dfn序&#xff0c;按dfn序倒序求解 具体的&#xff0c;对于当前点 i i i&#xff08;注意这里都是指dfn序&#xff09;&#xff0c;我们…

如何申请办理400电话?

导语&#xff1a;随着企业的发展和市场竞争的加剧&#xff0c;越来越多的企业开始意识到拥有一个400电话的重要性。本文将介绍如何申请办理400电话&#xff0c;帮助企业提升客户服务质量和品牌形象。 一、了解400电话的概念和优势 400电话是一种企业客服电话号码&#xff0c;…

描述符——设备描述符

文章目录 描述符定义描述符实现描述符含义 描述符定义 描述符实现 /*** brief Device descriptor.*/ typedef struct __attribute__ ((packed)) {uint8_t bLength ; /**< Size of this descriptor in bytes. */uint8_t bDescriptorType ; /**< DEVICE D…

Linux0.11——第三回 做好访问内存的最基础准备工作

前面两回是把启动区的代码复制来复制去的&#xff0c;这里我们要讨论的就是操作系统怎么为程序访问内存的方式做初步规划的&#xff1f; 操作系统的代码最开头的 512 字节的数据&#xff0c;先从硬盘的启动区移动到了内存 0x7c00 处&#xff0c;然后又立刻被移动到 0x90000 处…

mybatis-plus中更新null值的问题

文章目录 前言一、情景介绍二、方法分析三、原因分析四、解决方式五、方式扩展总结 前言 本文主要介绍 mybatis-plus 中常使用的 update 相关方法的区别&#xff0c;以及更新 null 的方法有哪些等。 至于为什么要写这篇文章&#xff0c;首先是在开发中确实有被坑过几次&#x…

Json文件序列化读取

Json文件 [{"name":"清华大学","location":"北京","grade":"1"},{"name":"北京大学","location":"北京","grade":"2"} ] 安装包 代码 Program.c…

睿趣科技:抖音开网店真的可以相信吗

随着社交媒体的快速发展&#xff0c;抖音已经成为了一个备受欢迎的平台&#xff0c;尤其是对于那些希望在电商领域有所作为的人们。许多人开始在抖音上开设网店&#xff0c;以获取额外的收入或建立自己的事业。然而&#xff0c;对于抖音开网店是否真的可以相信&#xff0c;存在…

java基础学习之变量与运算符

一&#xff0c;关键字 1&#xff0c;定义&#xff1a;被java语言赋予了特殊含义&#xff0c;用作专门用途的字符串或单词。 2&#xff0c;特点&#xff1a;关键字全都是小写字母。 3&#xff0c;关键字一共50个&#xff0c;其中const和goto是保留字。 4&#xff0c;true&#x…

硕士应聘大专老师

招聘信息 当地人社局、学校&#xff08;官方&#xff09; 公众号&#xff08;推荐&#xff09;&#xff1a; 辅导员招聘 厦门人才就业信息平台 高校人才网V 公告出完没多久就要考试面试&#xff0c;提前联系当地院校&#xff0c;问是否招人。 校招南方某些学校会直接去招老师。…

Web自动化测试测试常见BUG

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程&#xff0c;刷完面试就稳了&#xff0c;你也可以当高薪软件测试工程师&#xff08;自动化测试&#xff09; 1.翻页 翻页时&#xff0c;没有加载数据为空&#xff0c;第二页数据没有请求 翻页时&#xff0c;重复请…

“淘宝” 开放平台接口设计思路(内附API接口免费接入地址)

最近对接的开放平台有点多&#xff0c;像淘宝、天猫、京东、拼多多、快手、抖音等电商平台的开放平台基本对接了个遍&#xff0c;什么是CRUD BODY也许就是这样的吧&#xff01;&#xff01;&#xff01; 经过这几天的整理&#xff0c;脑子里大概有了个开放平台接口的设计套路&…

mysql优化之索引

索引官方定义&#xff1a;索引是帮助mysql高效获取数据的数据结构。 索引的目的在于提高查询效率&#xff0c;可以类比字典。 可以简单理解为&#xff1a;排好序的快速查找数据结构 在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这种数据…

面试题:ElasticSearch是什么?应用场景是什么?

文章目录 1、什么是搜索2、如果用数据库做搜索会怎么样3、什么是全文检索、倒排索引和Lucene4、ElasticSearch是什么ElasticSearch的功能ElasticSearch的应用场景ElasticSearch的特点 ElasticSearch是一个分布式&#xff0c;高性能、高可用、可伸缩的搜索和分析系统 看了上面这…

泛型编程<T extends Comparable<? super T>>是什么意思

今天看到了两个这样的写法,非常好奇。 <T extends Comparable<? super T>>public class BplusTree<K extends Comparable </K/>,V>下面是不同人对这种写法的解释 大概理解的意思是实现不同类之间属性的对比 转载链接 这段代码是什么意思呢 public…

小米系列机型--MIUI14关闭广告 推送广告 开屏广告 通用其他miui版本

在现代社会中&#xff0c;手机广告已经成为我们日常生活中的一种困扰。每当我们使用手机时&#xff0c;不断弹出的广告不仅打扰了我们的正常操作&#xff0c;还消耗了我们的流量和电池电量&#xff0c;以小米机型为例.根据下方的设置完以后基本手机就相对来说很干净。 以前博文…

2000-2019年高新技术企业统计情况

2000-2019年高新技术企业统计情况 1、时间&#xff1a;2000-2019年 2、指标&#xff1a;统计年度、所属省份、所属省份代码、所属城市、所属城市代码、认定对象身份、认定总次数、涉及公司总数量 3、来源&#xff1a;csmar 4、指标说明&#xff1a; SgnYear [统计年度] - …

高效查询大量快递信息,轻松掌握技巧

在如今快节奏的生活中&#xff0c;快递已经成为我们日常不可或缺的一部分。然而&#xff0c;对于一些忙碌的人来说&#xff0c;单个查询每一个快递单号可能会浪费太多时间。因此&#xff0c;我们需要一款可以帮助我们批量查询快递的软件。 在市场上&#xff0c;有很多款专门用于…

vue+express、gitee pm2部署轻量服务器(20230923)

一、代码配置 前后端接口都保持 127.0.0.1:3000 vue 项目 创建文件 pm2.config.cjs module.exports {apps: [{name: xin-web, // 应用程序的名称script: npm, // 启动脚本args: run dev, // 启动脚本的参数cwd: /home/vue/xin_web, // Vite 项目的根目录interpreter: none,…

Matlab图像处理-模式识别

模式识别 模式识别就是用计算的方法根据样本的特征将样本划分到一定的类别中去。模式识别就是通过计算机用数学技术方法来研究模式的自动处理和判读&#xff0c;把环境与客体统称为“模式”。模式识别以图像处理与计算机视觉、语音语言信息处理、脑网络组、类脑智能等为主要研…

奇舞周刊第507期:通过 View Transition API 在状态之间添加丰富的过渡动画

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 通过 View Transition API 在状态之间添加丰富的过渡动画 W3C 2023 年度全球技术大会 (TPAC2023) 于今年9月 11 - 15 日召开。W3C CSS 工作组成员 Bramus Van Damme(Google) 为本届…