ES6-ES11语法笔记

ES6新特性_ES6中模块暴露数据语法汇总---JavaScript_ECMAScript_ES6-ES11新特性工作笔记043 上一节说了,在浏览器中使用es6的模块化,来引用js, 上面是之前我们写的这个 m1.js文件 可以看到我们在我们想暴露的,变量或者 函数前面加上了一个 export 关键字 然后我们通过 <script type="module"> import * as m1 from "./src/js/m1.js" </script> 这种方式来引用了,这个m1.js 然后这种向浏览器网页,暴露某个文件变量或者函数的方式,叫做 分别暴露,也就是可以想暴露哪. 阅读详情

ES6新特性

let 声明变量

  1. 不能重复命名

  2. 块级作用域{}

  3. 不存在变量提升

  4. 不影响作用域链

  5. 里面定义的外面访问不到,外面定义的里面可以通过作用域链访问到

const 声明常量

  1. 必须要赋初始值(一般使用大写)

  2. 块级作用域{}

  3. 普通常量的值不能修改

  4. 可以对数组和对象常量中的元素进行修改

变量的解构赋值

允许按照一定模式从数组和对象中提取值,对变量进行赋值

例:

解构数组

<script>
        const persons=['张三','李四','王五']
        let [zg,ls,ww] =persons
        console.log(zg,ls,ww);
    </script>

解构对象

  
  <script>
        const zs ={
            name:'张三',
            age:33,
            work(){
                console.log('法外狂徒');
            }
        let {name,age,work}=zs
        console.log('叫'+zs.name+' 年龄'+zs.age);
        zs.work()
    </script>

模板字符串 ``

  1. 支持换行

  2. 支持变量拼接 ${内容}

箭头函数

  
  <script>
        // 传统方式
       function fn(a,b){
            return a+b
        }
        console.log(fn(1,2));
        let fn1 = (a,b)=>{
            return a+b
        }
        console.log(fn1(1,2));
    </script>

箭头函数适用与this无关的回调,定时器,数组的方法回调

箭头函数不适用于this有关的回调,事件回调,对象的方法

this是静态的,始终指向函数声明时所在作用域下的this的值 call()方法无法改变

箭头函数不能作为构造函数new出来

不能使用argument变量 arguments是参数伪数组 在不知情多少参数的情况下使用 可以遍历

当形参有且只有一个的时候 可以省略( )

当代码体只有一条语句的时候 可以省略{ return} 语句的结果就是函数的返回值

rest参数(...args)

 <script>
      function fn(){
        console.log(arguments);
      }
        // 参数对象
      fn(2,3,3,3,3)
      let fn1 = (a,b...args)=>{
          console.log(args);
      }
        // 参数数组
      fn1(2,4,4,4,4)
    </script>

  1. 作用类似ES5中arguments对象保存参数,rest用数组保存参数

  2. rest参数必须放在参数最后

扩展运算符(将数组转变一个字符串序列)

数组的合并

       
 <script>
            const person1 = ['张三','李四']
            const person2 = ['王五','赵六']
            const persons = [...person1,...person2]
            console.log(persons);
        </script>

数组的克隆(浅拷贝)

 <script>
            const flower = ['薇尔莉特','伊芙加登']
            const violet = [...flower]
            console.log('人如其名 '+violet);
        </script>

伪数组转为真数组

<script>
        const divs = document.querySelectorAll('div')
        // 是个对象
        console.log(divs);
        const newDivs =[...divs]
        // 是个数组
        console.log(newDivs);
    </script>

Symbol的基本使用

Symbol是新的原始数据类型,表示独一无二的值,是一种类似字符串的数据类型

  1. Symbol的值是唯一的,用来解决命名冲突的问题

  2. Symbol的值不能用于和其他数据进行运算/对比/比较

  3. Symbol定义的对象属性不能使用for...in遍历循环,但可以使用Reflect.ownKeys来获取所有对象的键名

    创建独一无二的值

  <script>
      // Symbol 独一无二的值 创建方法
      let s1 = Symbol('wkq')
      let s2 = Symbol('wkq')
      console.log(s1 === s2) //false
      // Symbol 相同值 创建方法
      let s3 = Symbol.for('wkq')
      let s4 = Symbol.for('wkq')
      console.log(s3 === s4) //true
 </script>

避免创建对象同名的冲突

 <script>
    let films = {
        name:'紫罗兰永恒花园',
        heroine(){},
        city(){},
        [Symbol('heroine')]:function(){
            console.log('女主角薇尔莉特.伊芙加登')
        },
        [Symbol('city')]:function(){
            console.log('故事地点在莱顿');
        }
    }
    console.log(films);
    </script>

JavaScript七种数据类型

USONB you are so niubility 你是真牛逼

U: undefined

S: String、Symbol

O: bject

N: Number、Null

B:Boolean

迭代器(自定义遍历数据)

for(let v in 迭代对象) for...in中迭代保存的是键名

for(let v of 迭代对象) for...of中迭代保存的是键值

生成器(本质就是特殊的函数 识别是函数名前加* 也是迭代器原理)

  
<script>
      function getUsers(){
        setTimeout(() => {
          let data = '用户数据'
          // 调用next方法,并将数据传入  这是第二个next 它的实参将作为第一个yield的返回结果
          iterater.next(data)  
        }, 1000);
      }
      function getOrders(){
        setTimeout(() => {
          let data = '订单数据'
          // 这是第三个next 它的实参将作为第二个yield的返回结果
          iterater.next(data)
        }, 1000);
      }
      function getGoods(){
        setTimeout(() => {
          let data = '商品数据'
          // 这是第四个next 它的实参将作为第三个yield的返回结果
          iterater.next(data)
        }, 1000);
      }
        function *gen(){
          let users = yield getUsers()
          console.log(users);
          let orders = yield getOrders()
          console.log(orders);
          let goods = yield getGoods()
          console.log(goods);
        }
      // 调用生成器
        let iterater = gen()
        // 生成器跑起来
        iterater.next()   
    </script>

Promise构造函数

构造函数有两个函数参数 resolve和reject 根据异步任务的执行情况改变promiseState以及promiseResult

与之对应的then函数有两个函数参数value和reason 值由promiseResult决定 状态由promiseState决定。

如果then的value和reason返回一个Promise函数 则该返回的Promise的状态和数据决定了value或reason的

状态和数据,异常的状态仍为rejected。then中可以在套Promise函数,最后以catch异常穿透,从而解决回调

地狱的问题

const fs = require('fs')
​
const { resolve } = require('path/posix')
​
const p = new Promise((resolve,reject)=>{
​
  fs.readFile('./name.txt',(err,data)=>{
​
•    resolve(data)
​
  })
​
})
​
p.then(v=>{
​
  return new Promise(resolve=>{
​
•    fs.readFile('./gender.txt',(err,data)=>{
​
•      resolve([v,data])
​
•    })
​
  })
​
}).then(v=>{
​
  return new Promise(resolve=>{
​
•    fs.readFile('./age.txt',(err,data)=>{
​
•      v.push(data)
​
•      resolve(v)
​
•    })
​
  })
​
}).then(v=>{
​
  console.log(v.join(' \r\n'));
​
})

Set集合(本质是对象)

类似数组,但成员的值是唯一的,集合实现了迭代器接口,可以用扩展运算符和for...of进行遍历

方法

  1. size 返回集合元素个数

  2. add 增加一个元素并返回当前集合

  3. delete 删除元素并返回布尔值

  4. has 检测集合中是否包含某个元素,返回boolean值

  5. clear 清空集合

 <script>
      let s = new Set(['甘', '文', '崔', '小玉', '小玉'])
      //  添加元素
      s.add('阿福')
      //  删除元素
      s.delete('小玉')
      //  长度
      console.log(s.size)
      //  是否存在
      console.log(s.has('阿福'))
      // 清空
      s.clear() let nums1 = [0, 1, 2, 3, 2, 1, 0]
      let nums2 = [2, 3, 4, 5, 4, 3, 2]
      // 数组去重 变为集合在变为数组
      let result1 = [...new Set(nums1)]
      console.log(result1)
      // 求交集
      let result2 = [...new Set(nums1)].filter((item) =>
        new Set(nums2).has(item)
      )
      console.log(result2)
      // 求并集
      let result3 = [...new Set([...nums1, ...nums2])]
      console.log(result3)
      // 求差集(交集的逆运算)
      let result4 = [...new Set(nums1)].filter(
        (item) => !(new Set(nums2).has(item))
      )
      console.log(result4)
    </script>

Map(升级版对象 键可以多样)

键值对的集合,但是键的范围不限于字符串包括对象可以作为键,各种类型的值

集合实现了迭代器接口,可以用扩展运算符和for...of进行遍历

方法

  1. size 返回map的元素个数

  2. set 增加一个新元素并返回当前Map

  3. delete 删除一个元素

  4. get 返回键名对象的键值

  5. has 检测Map中是否包含某个元素,返回boolean值

  6. clear 清空集合并返回undefined

`

<script>
  // 创建新的Map
  let m = new Map()
  // 添加元素
  m.set('name','张三')
  m.set('idea', function(){
    console.log('方法可以作为值');
  })
  let key = {
    age: 24,
  }
  m.set(key,[1,2,3])
  // Map元素个数
  console.log(m.size);
  // 根据键名返回键值
  console.log(m.get('idea'));
  console.log(m.get(key));
  // 删除一个元素
  m.delete('name')
  console.log(m.size);
  // 是否包含某个值
  console.log(m.has('idea'));
  // 遍历   返回的每个元素是个数组
  for(let v of m){
    console.log(i);
  }
  // 清空Map
  m.clear()
</script>

`

Class类

  1. 实例对象身上是没有构造函数对象身上的属性方法,构造函数对象身上的属性方法称为静态成员,有构造函数原型对象上的属性方法 构造函数.prototype.属性/方法

  2. 子类不能直接调用父类的同名方法,只能重写

`

   
 <script>
      class Phone {
        // 构造方法 名字不能修改 在new的时候自动调用
        constructor(brand, price) {
          this.brand = brand
          this.price = price
        }
        static president = '张三'
        // get和set
        get Info() {
          console.log('信息被获取了')
          // 返回值就是调用getInfo呈现的值
          return '信息'
        }
        set Info(info) {
          console.log('信息被设置了')
        }
        call() {
          console.log('我可以打电话')
        }
      }
      const DGD = new Phone()
      console.log(DGD.president) //undefined
      // 获取
      console.log(DGD.Info)
      // 设置
      DGD.Info = '改后的信息'
​
      //  继承
      class SmartPhone extends Phone {
        constructor(brand, price, color, weight) {
          // super 省略了同样的this.xx=xx的编码
          super(brand, price)
          this.color = color
          this.weight = weight
        }
        play() {
          console.log('我能打游戏')
        }
        call() {
          console.log('我能打视频电话')
        }
      }
      const ET = new SmartPhone('外星人', '19999', '银色', '5kg')
      ET.call()
      ET.play()
    </script>

`

数值扩展

  1. Number.EPSILON代表JavaScript中最小精度值,如果两个浮点数相差小于该值,则为相等

  2. 进制数 二进制:0b开头,如0b1010 =10 八进制:0o开头,如0o777 = 511 十六进制:0x开头,如0xff = 255

  3. Number.isFinite(num) 判断一个数值是否为有限数

  4. Number.isNaN(num) 判断一个数值是否为NaN

  5. Number.parseInt(str)和Number.parseFloat(str) 字符串转数值 夹断!! 适用于数字开头的字符串

  6. Number.isInteger(num) 判断一个数值是否为整数

  7. Math.trunc(float) 将数值的小数部分 夹断!!

  8. Math.sign(num) 判断一个数值是正数 负数 还是0 分别返回1 -1 0

对象方法扩展

   <script>
      // Object.is(a,b) 判断a,b是否完全相等  a,b不为对象
      console.log(Object.is(NaN, NaN))
      // Object.assign(a,b)  b覆盖掉a同名的属性,不存在则保留
      const config1 = {
        host: 'localhost',
        username: 'root',
        password: '123',
        special: '独一份',
      }
      const config2 = {
        host: '127.0.0.1',
        username: '张三',
        password: '233',
        sologon: '法外狂徒',
      }
      console.log(Object.assign(config1, config2))
      //设置原型对象 setPrototypeOf(a,b)   b作为a的原型
      const person ={
        name:'张三',
        talk:'法外狂徒'
      }
      const city ={
        locate:'二仙桥'
      }
      Object.setPrototypeOf(person,city)
      console.log(Object.getPrototypeOf(person));
      console.log(person);
            </script>

模块化 (类似乐高)将较大的程序文件拆分成多个小文件,然后将这些小文件组装

暴露模块语法汇总

// 默认暴露
​
export default {
​
 name: '张三',
​
 sologon:function() {
​
  console.log('法外狂徒')
​
 },
​
}
​
// 统一暴露
​
let age = 23
​
function run(){
​
  console.log('跑得快');
    
​
}
​
export {age,run}
​
// 分别暴露
​
export let gender = '男'
​
export function jump(){
​
  console.log('跳得远');
​
}

引入模块汇总

  <script type="module">
      // 通用引入
      import * as m1 from './src/m1.js'
    //  解构赋值引入(按需引入)
    import {name,sologon} from './src/m1.js'
    // m2.js中放在default中
    import {default as m2} from './src/m2.js'
    // 针对默认暴露
    import m1 from './src/m1.js'
  </script>

ES7新特性

Array.prototype.includes 检查数组中是否包含某个元素,返回布尔值

    <script>
      const books = ['张三', '李四', '王五', '赵六']
      console.log(books.includes('张三'))     //true
      console.log(books.includes('尼古拉斯赵四'))     //false
    </script>

指数操作符**

   
 <script>
       let result = 2 ** 10         //** 类似Math.pow(2,10)      console.log(result);
    </script>

ES8新特性

async和await

1、async 函数的返回值是promise对象

promise对象的结果和状态由async函数执行的返回值决定

如果返回值是promise则由该promise的结果和状态决定

2、await右侧的表达式一般为promise对象 2.1、如果是promise对象,await返回的是promise成功的值 2.2、如果是其他,直接将此值作为await的返回值

3、await必须在async函数中 async可以没有await 如果await的promise失败了 则抛出异常 相应try...catch进行捕获

const fs = require('fs')
const util = require('util')
const mineReadFile = util.promisify(fs.readFile)
async function main(){
  try {
    const p1 =await mineReadFile('./content1.txt')
    const p2 =await mineReadFile('./content2.txt')
    const p3 =await mineReadFile('./content3.txt')
     console.log(p1+p2+p3);
  } catch (error) {
      console.log(error);
  }
}
main()    

对象方法扩展

Object.keys(对象) 获取对象所有的键

Object.values(对象) 获取对象所有的值

Object.entries(对象) 获取对象所有的键值 对象转二维数组

Object.getOwnPropertyDescriptor(对象) 获取对象所有的信息

Object.create(null/{},{对象属性}) 创建带有对象属性描述的对象

ES9新特性

向对象提供rest参数和扩展运算符

  
<script>
    function connect({host,port,...user}){
      console.log(host);
      console.log(port);
      console.log(user);    //{username: "root", password: 233}
    }
    connect({
      host:'127.0.0.1',
      port:3000,
      username:'root',
      password:233
    })
     const name={
       name:'张三'
     }
     const sologon={
       sologon:'法外狂徒'
     }
     const result = {...name,...sologon}
     console.log(result);     //{name: "张三", sologon: "法外狂徒"}
    </script>

正则扩展

命名捕获分组

  
 <script>
      // 会多一个groups里面是url和text 这样方便提取捕获  ?<别名>
      let str = '<a href="https://www.baidu.com">百度</a>'
      const reg = /<a href=(?<url>.*)>(?<text>.*)<\/a>/
      const result = reg.exec(str)
      console.log(result)
      console.log(result.groups.url)      //"https://www.baidu.com"
      console.log(result.groups.text)       //百度
    </script>

断言

<script>
      // 通过前面和后面 判断唯一性
      let str1 = '心野2222啦啦'
       // 正向断言 通过后面 判断前面的是否匹配
      const reg1 = /\d+(?=啦)/
      // 反向断言 通过前面 判断后面的是否满足
      const reg2 =/(?<=啦)\d+/
      const result1 = reg1.exec(str1)
      const result2 = reg2.exec(str1)
      console.log(result1);cd
      console.log(result2);
    </script>

dotAll模式(简略换行)

  
<script>
      let str = `
      <ul>
      <li>
        <a>肖申克的救赎</a>
        <p>上映日期:1994-09-10</p>
      </li>
    </ul>`
      // 之前
      const reg1  =/<li>\s+<a>(.*?)<\/a>\s+<p>(.*?)<\/p>/
        const result1 = reg1.exec(str)
        console.log(result1);
        // dotAll模式    .*?  替代 /s 同时在正则后加s
        const reg2 = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/s
          const result2 = reg2.exec(str)
          console.log(result2);
      </script>

E10新特性

对象方法扩展

Object.fromEntries 获取数组所有的键值 二维数组转对象

  
  <script>
      const result = Object.fromEntries([
        ['name', '张三'],
        ['sologon', '法外狂徒'],
      ])
      console.log(result)
      const result1 = Object.entries({
        name: '张三',
        sologon: '法外狂徒',
      })
      console.log(result1);
      const m = new Map()
      m.set('name','张三')
      m.set('sologon','法外狂徒')
      console.log(m);
    </script>

字符串方法扩展

trimStart和trimEnd清除左右空白

 <script>
      let str = '     还有一件事 要用魔法打败魔法      '
      console.log(str)
      console.log(str.trim())
      console.log(str.trimStart())
      console.log(str.trimEnd())
</script>

数组方法扩展

flat 降低数组维度 和 flatMap 先map函数处理返回如果是多维再flat降低维度

    
<script>
      //flat(数字)  降低维度 数字从0开始 0默认为一维 降到多少维写多少
      let arr = [1, 2, 3, [4, 5, 6, [7, 8, 9]]]
      let result1 = arr.flat(2)
      console.log(arr) //(4) [1, 2, 3, Array(4)]
      console.log(result1) //[1, 2, 3, 4, 5, 6, 7, 8, 9]
      //flatMap  先map再flat
      let arr1 = [1, 2, 3, 4]
      let result2 = arr.map((item) => [item * 10]) //返回形式如果多维 要降维度
      let result3 = arr.flatMap((item) => [item * 10])
      console.log(result2)
      console.log(result3)
    </script>

Symbol扩展

symbol.prototype.description Symbol的描述

   
 <script>
      let s = Symbol('我是Symbol的描述')
      console.log(s.description);
    </script>

E11新特性

私有属性 #属性

   <script>
      class Person {
        // 公有属性可以在外部获取
        name
        // 私有属性 只可以由内部方法获取
        #age
        #weight
        constructor(name, age, weight) {
          this.name = name
          this.#age = age
          this.#weight = weight
        }
        getAtrribute() {
          console.log(this.name)
          console.log(this.#age)
          console.log(this.#weight)
        }
      }
      let zs = new Person('张三', 23, 100)
      console.log(zs.name)
      console.log(zs.age)    //私有属性 是undefined
      zs.getAtrribute()     //私有属性通过方法 this.#xx获取
    </script>

Promise扩展

Promise.allSettled

接收promise数组 返回结果是promise 成功的状态 值是数组中各个promise的状态和数据

  
  <script>
      const p1 = new Promise((resolve, reject) => {
        resolve('成功!')
      })
      const p2 = new Promise((resolve, reject) => {
       try {
        // reject('失败!')
        throw '出错啦'
       } catch (error) {
        console.warn(error);
       }
      })
      const pArr = [p1, p2]
      let result = Promise.allSettled(pArr)
      console.log(result)
      let result1 = Promise.all(pArr)
      console.log(result1);
    </script>

字符串扩展

String.prototype.matchAll(正则表达式) 用于得到正则批量匹配的结果 用于正则匹配提取数据

    
<script>
           let str = `
      <ul>
      <li>
        <a>肖申克的救赎</a>
        <p>上映日期:1994-09-10</p>
      </li>
      <li>
        <a>阿甘正传</a>
        <p>上映日期:1994-07-06</p>
      </li>
    </ul>`
    const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/sg
      const result =str.matchAll(reg)
      for(v of result){
        console.log(v);
      }
      console.log(...result);
    </script>

可选链操作符

当所属值在对象的深处,省去层层判断

    
<script>
         function main(config){
          //  传统方案
          // const dbPassWord = config && config.db && config.db.password
          // 可选链操作符   x?.y  如果x有,在去传入y
          const dbPassWord = config?.config.db?.db.password
          console.log(dbPassWord);
         }
         main({
           db:{
             name:'MySql',
             password:222
           },
           cache:{
            name:'高速缓存区',
            password:333
           }
         })
    </script>

动态导入

import(路径)返回的是promise对象 可以用then 实现promise成功的数据

 <body>
    <button id="btn">点击获取方法</button>
    <script>
      const btn = document.querySelector('#btn')
        btn.onclick =function(){
          import('./src/m1.js').then(module=>{
            console.log(module.sologon());
          })
        }
    </script>
  </body>

大整型数据类型

用于大数值的计算

<script>
      let n = 1024n   //整数n  即表示是个大整型数据
      let max = Number.MAX_SAFE_INTEGER //最大安全整数
      console.log(max + 1)
      console.log(max + 2)
      console.log(BigInt(max) + BinInt(1))
      console.log(BigInt(max) + BinInt(2))
    </script>

globalThis

始终指向全局对象,当需要使用全局对象时就可以调用这个

如果有错误的地方,希望各位大神多多指教啊

ES6新特性_ES6语法糖class介绍与初体验_就是个语法糖而已---JavaScript_ECMAScript_ES6-ES11新特性工作笔记033 然后我们看es6中的class,es6中引入这个class这个概念,为了让js的写法更加的 面向对象,写起来方便好理解一些. 其实就是个语法糖而已,他的这个功能,es5的语法都能实现. . 可以看看es6中的class介绍 可以看到以上是es5中对创建一个对象的方法的实现. 通过function声明一个类,然后通过类名.prototype.call=function(){} 来给这个类添加方法. 然后用new 来创建这个类. 然后我们用es6来创建这个类,可以看到语法是 .. 阅读详情

相关推荐

ES6新特性_ES6语法糖-class的类继承---JavaScript_ECMAScript_ES6-ES11新特性工作笔记036

然后我们再来看一下, class类的继承, 上一讲,我说了一下es5中,类的继承,可以看到,es5的写法,真的是.. 四不像,感觉像c? 所以,现在es6,支持的写法,这个写法有点像java了,理解起来好理解啊: 去看看我们先声明一个Phone类,有个构造方法 有个品牌,价格这两个参数 然后再写一个call方法 然后我们再去写一个类SmartPhone 继承Phone 然后我们给SmartPhone写上构造方法, 可以看到构造方法中也是需要super(),先写上父类的参..

添柴程序猿的专栏 575

JavaScript ES(6-11)基础语法系列(6)

Promise、Generator

weixin_44060138的博客 1232

ES6新特性_ES6语法糖_ES5中构造函数的继承---JavaScript_ECMAScript_ES6-ES11新特性工作笔记035

我们先看用es5实现一个构造函数的继承. 我们去用es5的写法写一个Phone这个类 然后给他添加一个Phone.prototype.call = function(){} 添加call的方法. 然后我们再去声明一个SmartPhone这个类,可以看到我们可以通过, 在SmartPhone 的构造方法中,调用Phone.call(this,brand,price); 这样相当于 我们SmartPhone作为子类把自身传给了Phone了进去. 然后我们SmartPhone写的时候..

添柴程序猿的专栏 545

ES6-ES11语法学习

目录一、ES6语法二级目录三级目录 一、ES6语法 1.let 不可重复声明 自带块级作用域,块级外访问不到块级内的 不存在变量提升 不影响作用域链 2.const 常量:值不能修改的量 一定要赋初始值 一般常量使用大写(潜规则) 常量的值不能修改 自带块级作用域 对于数组和对象的元素的修改,不算对常量的修改,不会报错(地址不变) 3.解构赋值 3.1数组的解构 const F4 = ['小沈阳','刘能','赵四','宋小宝'] let [xiao,liu,zhao,song] = F4 3.2对象的

qinsangdilvzhi的博客 478

JavaScript ES6到ES11核心语法全面学习与实战

在配置管理中,使用const可防止意外修改:// 错误尝试// 虽然不会报错,但违反约定// 更安全的做法});// 或整体冻结});使对象浅层不可变,适合用于配置项、枚举、状态常量等。

weixin_42590539的博客 730

SpringBoot实现电子发票生成

电子发票是近年来比较流行的一种票据形式,它取代了以往传统的纸质发票,具有减少纸张浪费、方便有效查验等优点。本文将介绍如何使用Spring Boot和Vue.js构建一个仿真电子发票生成应用程序,借助微信二维码扫描功能和第三方库,实现用户扫描二维码获取发票信息并填写相关开票信息,最后生成电子发票。在本文中,我们介绍了如何使用Spring Boot和Vue.js构建一个仿真电子发票生成应用程序,借助微信二维码扫描功能和第三方库,实现用户扫描二维码获取发票信息并填写相关开票信息,最后生成电子发票。

不愧是暮言的博客 6090

最全Es6 - Es11( Es6篇)

一、Es6 1、let ES6新增声明变量的指令 let,它的用法类似与var,他是为了解决var在作用域方面出现的异常情况而新增使用词法作用域或块级作用域的变量 for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i) },1000) } //输出结果 5 5 5 5 5 for (let i = 0; i < 5; i

weixin_44646763的博客 699

(1)大蚂蚁即时通讯

即时通讯软件BigAnt(大蚂蚁)是杭州艾朴软件推出的一个”企业级”的即时通讯平台。该平台专为企业,其他企事业单位和政府单位而设计,目的就是为了增强内部沟通能力,提高内部员工的工作效率;同时服务器就直接置于单位内部,所有信息由单位自己管理,让单位以更安全、更可伸缩和更易于管理的方式灵活方便地使用协同和通信服务的功能! BigAnt(大蚂蚁)即时通讯软件包括服务器端和客户端。客户端功能包括单位

少安的砖厂 2232

ES6-11语法万字简单总结,看这个就够了,持续更新中...

ES6-11语法简单总结 什么是ES? 我们经常说到的ES5、ES6到底指的是什么? ES是指ECMAScript,它是脚本语言的规范。而平时我们经常编写的JavaSript,是ECMAScript的一种实现,所以ES新特性其实指的就是JavaScript的新特性。我们所学的JS基础应该都是基于ES5(早在2009年12月份ECMA公司就发布了ECMAScript5),而我们嘴边所说的ES6是在2015年发布的,之后每年ECMA都会更新迭代新版本的ES,不过之后的每一版改动的内容不多。 我们会发现,现在关

你是我修复不了的bug,但我会用一生去维护 1185

Python爬虫实战:基于最新技术爬取国家企业信用信息公示系统数据

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的国家企业信用信息公示系统爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、数据解析与存储等高级话题,最终实现一个完整的爬虫系统。文章包含大量实战代码示例,适合中高级Python开发者学习参考。网络爬虫(Web Crawler)是一种自动获取网页内容的程序,广泛应用于搜索引擎、数据分析和商业情报收集等领域。通用爬虫:如搜索引擎爬虫,广泛抓取互联网公开信息聚焦爬虫:针对特定领域或网站的数据采集增量式爬虫:只抓取更新内容,减少资源消耗。

2201_76125261的博客 2405

2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析

2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析

君逍遥o 5987

ES6语法笔记(ES6~ES11)

1.let // let声明变量 let a; let b,c,d; let e = 100; let f = 110,g = 'qwe',h = []; 1.1:let声明变量的特性 1.不能重复声明变量 //1.不能重复声明 let star = '罗志祥'; let star = "小猪" //error 2.let的块级作用域 //全局|函数|eval

aniudunaichiji的博客 716

128、点云配准与ICP:经典配准算法与深度学习配准

上周调试一台双臂协作机器人,左手持结构光相机扫描桌面上的随机堆叠工件,右手准备执行抓取。问题出在“对齐”这一步——相机扫描得到的点云和CAD模型点云之间差了大约15度的旋转,导致抓取姿态计算出来直接怼到桌面上。我第一反应是“ICP跑一下不就行了”,结果跑了三分钟,误差纹丝不动,甚至越迭代越发散。后来查了日志才发现,初始位姿给得太离谱,ICP直接掉进了局部最优。这个场景太典型了——很多人以为点云配准就是调个ICP库函数,实际工程里坑比想象中多得多。今天这篇笔记,咱们把点云配准这件事从头捋一遍。

sundong_81的博客 42

ES都出到11了,今天把自己的ES6语法的笔记搞出来分享一下

一些常用的ES6小栗子,用的时候直接参考就好了。 三种解决方法 this指向 例子: 默认值 例子

ClamJ092的博客 706

YOLO11涨点优化:卷积魔改 | 可变形条带卷积(DSCN),魔改轻量DCNv3二次创新

如何跟YOLO11结合:1)和C3k2创新性结合

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 986

射频仿真软件:ADS (Advanced Design System)_(29).ADS脚本编程与自动化

ADS脚本编程为射频设计提供了强大的自动化工具,可以帮助用户实现设计流程的优化、参数扫描和优化、结果分析和报告生成等任务。选择合适的脚本语言(Python、Tcl、AEL)并合理设置ADS环境,可以显著提高设计效率和准确性。通过实际项目中的应用案例,我们可以更好地理解如何利用脚本编程解决复杂的射频设计问题。希望本文对您的ADS脚本编程学习有所帮助。

kkchenjj的博客 2469

ES6学习笔记(11)——Generator函数语法

Generator函数语法 Generator函数 Generator 函数是 ES6 提供的一种异步编程解决方案。Generator 函数在形式上具有两个特征: 一、function关键字与函数名之间有一个星号; 二、函数体内部使用yield语句,定义不同的内部状态 function* helloWorldGenerator() { yield 'hello'; //hello状态 yield 'world'; //world状态 return 'ending'; //结束 } 调用Gen

aaaaapipi的博客 242

2023年GESP12月认证C++五级真题解析

例如,如果a=4,那么4是最⼩的幸运数,而1不是,但我们可以连续对1做3次+1操作,使其变为4,所以我们可以说,1幸运化后的结果是 4。【题目大意】给一个完全平方数的标准,推导出哪些是超级幸运数,然后判断N个数字中,哪些是超级幸运数,是的输出“lucky”,不是的输出离该数字最近的比它大的数字。前一个数字,下标是j的数字是偶数,后面的数字下标是j+1的是奇数,按照要求,偶数在奇数的后面,要交换。A函数时间复杂度是O(n/2),B函数算法是O(sqrt(n)),大部分情况后者是优的,值更小。

lan_in的博客 1006

Es5和Es6中数组循环的方法

JavaScript ES(6-11)全版本语法 每个前端都需要的基础课

maoxiaohei_的博客 986

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【笔记】再学JavaScript ES(6-10)全版本语法-真香!!

文章目录序课程体系笔记 序 工作之余,用了半个月的时间学习完了慕课网的《再学JavaScript ES(6-10)全版本语法》这门课程,学习过程中反观在工作中用到的那些ES6-ES10中的语法,感觉醍醐灌顶,同时一些晦涩难懂的语法内容并不是学习完一遍就能记得住的,包括记下的这些笔记,过一段时间后再看还会有一些打壳儿,这说明学习完之后还需要在实际工作中主动去使用这些新的特性和功能,共勉之! 课程体系 摘自慕课网 笔记 ...

程序边界 4275

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【笔记】再学JavaScript ES(6-10)全版本语法——Class

文章目录一、类的声明1.ES5的做法2.ES6的做法二、属性读写三、类的静态方法1.ES5中类的静态方法2.ES6中类的静态方法四、类的继承1.ES5中类的继承2.ES6中类的继承 一、类的声明 1.ES5的做法 /* * ES5类的声明 */ // 每个子类特有的属性或方法写到父类的内部 let Animal = function (type) { this.type = type } // 共有方法挂到父类的原型链上 Animal.prototype.eat = function () {

程序边界 963

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

语法糖是什么?(ES6的一些小笔记)

专业的解释 通俗的解释 JavaScript的语法糖

Limonor的博客 8616

ES6 ~ ES11 学习笔记

es6 ~ es11 学习笔记

DanielSYC的博客 2403

JavaScript之 ES6 - ES11新增语法

由上一章可知javaScript = ECMAScript + DOM +BOMECMA 是欧洲计算机制造商协会(European Computer Manufacturers Association)的缩写。该协会成立于 1961 年,是一个旨在促进欧洲计算机行业发展的标准化组织。它在计算机技术和相关领域制定了许多重要的标准,其中最著名的是与编程语言和脚本语言相关的标准,以下是一些具体介绍:ECMA - 262:这是由 Ecma 国际发布的标准文件,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAS

xrkhy的博客 702

IE11兼容ES6语法问题

一、使浏览器兼容ES6基本语法 例如:1.新的变量声明方式 let/const 2.箭头函数 3.模板字符串 4.函数默认参数 5.展开运算符等基础语法 方法 在引入其他脚本前先引入browser.min.js。(脚本下载地址:开发版本browser.js;生产版本browser.min.js。) script标签的type的值设为text/babel。 <!DOCTYPE htm...

qq506930427的博客 2万+

JavaScript笔记:ES6语法

ES6语法 ES6相关概念 什么是ES6 ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Io9MbElQ-1603887190104)(images/es-version.png)] 为什么使用 ES6 ? 每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。 变量提升特性增加了程序运行时的不可预测性 语法过于松散,

weixin_47763189的博客 1855
上一篇: MongoDb个人笔记
下一篇: TS入门个人笔记
心里予
博客等级 码龄6年 0粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值