草庐IT

ES6基础

t遇见 2023-09-21 原文

一、ES6概述
JavaScript脚本语言贡献给ECMA组织用于制定前端编程语言标准,标准化组织推出了ECMAScript语法标准
二、变量声明扩展

  • let:声明变量,存在块级作用域(大括号范围也可以是一个作用域)、没有变量预解析、不能重复声明等等
  • const:声明常量,常量一旦声明不能改动
    ① let声明变量
let name = "大牧"
console.log(name, "name")
// 1、不能重复声明
// let name = "damu"
//Uncaught SyntaxError: Identifier 'name' has already been declared
// 未处理的  语法  错误:  标识符     name 已经被声明过了
// 2、预解析:不支持预解析功能
// console.log(age)
// Uncaught ReferenceError: Cannot access 'age' before initialization
// 为处理的  引用    错误:  不能在age变量声明之前访问
let age = 22
// 3、全局变量.局部变量
function fn() {
  let gender = "男"
  console.log("函数内:", gender)
}
fn()
// console.log("函数外:", gender) // gender没有定义
// 4、块级作用域
if (true) {
  let job = "需求分析工程师"
  // 声明的job只能在当前花括号内部使用:块级作用域
  }
// console.log(job, "job") // job没有定义
// 5、全局变量和循环
// for (let i = 0; i < 10; i++) {
//   console.log(i) // 0 1 2 3 4 5 6 7 8 9
// }
for (let i = 0; i < 10; i++) {
  setTimeout(function () {
    console.log(i)  // 0 1 2 3 4 5 6 7 8 9
  })
}

② const声明常量(一旦创建不能更改)

// 1、基础语法
const maxWords = 2000 // 常量
console.log("最大字数:", maxWords)
// maxWords = 2200 // 修改
// Uncaught TypeError: Assignment to constant variable.
// 未处理的  类型错误:  修改       了  一个常量-> 不能修改常量数据
// 2、注意:可以修改对象内部数据
// 声明了对象
const person = { name: "大牧", age: 22 }
// person = { name: "jerry" } // 不允许:直接修改了一个新对象
// 相当于重新创建了一个对象赋值给person
// Uncaught TypeError: Assignment to constant variable.
// 未处理的  类型错误:  修改       了  一个常量-> 不能修改常量数据
person.name = "damu"// 允许:修改了对象的属性,没有修改对象本身
console.log(person, "person")
// 理解:给person常量赋值了一个人- 张三
//  不允许:给person常量赋值一个人- 李四
//  允许:给张三~原来是紫色衣服,修改成白色衣服

三、运算符扩展

  • spread延展运算符、展开运算符
  • rest剩余参数运算符
    (1) spread延展运算符
// 语法: ...变量,将变量中的数组/对象数据进行展开
// 经常用于变量中数据的复制
// 1、数组展开操作
let arr = [1, 2, 3, 4, 56, 7, 8, 9]
console.log(arr) // (8) [1, 2, 3, 4, 56, 7, 8, 9]
// 展开运算符
console.log(...arr) // 1 2 3 4 56 7 8 9
// 复制数组,先展开数组中的数据,然后使用方括号包裹成新数组
let arr2 = [...arr]
arr2.push("新数据") // 操作arr2数组,对arr1没有影响
console.log('arr', arr)
console.log('arr2', arr2)
// 2、对象展开操作
let person = { name: "tom", age: 22 }
console.log(person)
// console.log(...person) // 不能这样展开,表达式存在语法问题
// 复制对象
let person2 = { ...person }
person.gender = "男" // 修改person属性,对person2对象没有影响
console.log(person)
console.log(person2)
console.log(person === person2)

(2) rest剩余参数运算符
经常用在函数的形式参数中(参数的最后一个位置),用于接受剩余的所有参数

// 需求:一个函数需要处理一些数据
// 只有第一个数据确定的,其他数据的个数不确定
// 1、原生JS,给函数提供了一个特殊变量arguments,可以接受函数接受的所有参数
function intro() {
  console.log("函数接受的参数;", arguments[0])
  // arguments,会默认接受函数的所有参数,没有办法精确处理
  // arguments在项目开发中很少使用
  console.log("函数剩余的参数:", arguments)
}
intro("tom")
intro("tom", 22)
intro("tom", 22, "男")
// 2、ES6提供了剩余参数运算符
// args参数,用于接收除了name以外其他的所有参数
function introduction(name, ...args) {
  console.log("姓名:", name)
  console.log("其他资料:", args)
}
introduction("jerry")
introduction("jerry", 22)
introduction("jerry", 22, "女")

四、数据类型扩展
ES6中为了让数据的封装更加完善,提供了一种新的基本类型Symbol,用来表示唯一的数据,在项目中经常用来封装只读的属性或者私有属性,基本语法:创建匿名的Symbol对象、创建具名的Symbol对象

// 创建一个Symbol对象
var a1 = Symbol()
// 语义上提升,可以给一个Symbol起个名字
// "name"名称没有实际意义,语义上的一个名称,提高代码的可读性
var a2 = Symbol("name")

五、数组扩展

  • Array.of():创建数组对象
  • Array.from():将类数组对象转换成数组
// 1、创建一个数组,包含1,3,5三个元素
// 原生JS
let a1 = [1, 3, 5]
let a2 = new Array(1, 3, 5)
// ES6
let a3 = Array.of(1, 3, 5)
console.log(a1, a2, a3)
// 针对对象的操作,Array.of()是对new Array()的补充
// 2、创建一个包含10整数的数组
let s1 = [10]
let s2 = new Array(10)  // 原生JS创建对象的方式不可用
let s3 = Array.of(10)   // ES6 Array.of()就是对new Array()的补充
console.log(s1, "s1")
console.log(s2, "s2")
console.log(s3, "s3")
// 3、Array.from():将类似数组的结构,转化成数组进行使用
// let _ps = document.querySelectorAll("#title p")  // NodeList
let _ps = document.getElementsByTagName("p")        // HTMLCollection
console.log(_ps)
// 类似数组的结构,直接转换成数组进行操作,就可以使用数组的函数
_ps = Array.from(_ps)
console.log(_ps)
// 调用数组遍历函数,遍历数据
_ps.forEach(function (item) {
  console.log(item)
})

六、字符串扩展
(1) 模板字符串
基本语法:

// 声明变量
let name = "大牧"
let age = 20
let gender = "男"
// 原始拼接
console.log("姓名:" + name + "; 年龄:" + age + "; 性别:" + gender)
// ES6 提供了一种 模板字符串 语法
// 模板字符串:允许在字符串中直接使用变量、函数、简单运算
console.log(`姓名:${name},年龄:${age},性别:${gender}`)

(2) 字符串函数

  • startsWith(s):判断字符串是否以指定字符串开头
  • endsWith(s):判断字符串是否以指定字符串结束
  • padStart(length, fill):指定字符串输出长度,不够的位置前面补fill字符
  • padEnd(length, fill):指定字符串输出长度,不够的位置后面补fill字符
    七、对象扩展
    (1) 属性函数简写
// 1、属性函数简写
// 原生对象
let name = "汤姆"
let tom = {
  name: name,
  age: 22,
  play: function () {
    console.log(`${this.name}在游戏中...`)
  }
}
// ES6简写语法
let tom2 = {
  name,  // 如果name: name,属性名称和值相同,可以简化
  age: 23,
  study() {  // 函数语法,省略function关键字
    console.log(`${this.name}编程中...`)
  }
}

(2) 支持属性运算符

// 2、属性运算符
let jerry = {
  name: "杰瑞" // 原生JS中的写法
}
// 属性运算符:和数组语法类似,主要出现在对象的属性名称上进行使用
// 作用1:在一定程度上对对象的属性名称进行了保护
// 作用2:属性名称,可以动态变化
let jerry2 = {
  ["n" + "ame"]: "杰瑞" // ES6提供的属性运算符,属性名称支持表达式运算
  // name: "杰瑞"
}

(3)Object扩展

  • Object.assign(tgt, val1, val2 ,...):对象合并,将多个对象合并成一个对象
  • Object.keys():获取对象中的所有属性
  • Object.values():获取对象中的所有值
 // 3、Object扩展
let tom11 = { "name": "tom" }
let tom22 = { "age": 20 }
// assign(target, v1, v2, ...):将v1, v2,...多个对象合并到target中
Object.assign(tom11, tom22)
console.log(tom11)
// keys():经常用于辅助判断,对象是否包含某个属性
console.log(Object.keys(tom11)) // ['name', 'age']
// values():经常用于辅助读取(Symbol)私有属性数据
console.log(Object.values(tom11)) // ['tom', 22]

(4) JSON扩展

  • JSON.stringify(jsonObj):将一个json对象转换成json格式字符串
  • JSON.parse(jsonStr):将一个json格式字符串转换成json对象
// 4、JSON函数扩展
// json对象
let shuke = { name: "舒克", age: 18 }
// json对象,由于它的操作便捷性,在项目中使用最为频繁
// 直接存储shuke对象
// sessionStorage.setItem("shuke", shuke)
// let value = sessionStorage.getItem("shuke")
// console.log(value, typeof (value), "本地存储中读取的数据")
// 转换成字符串:方便网络传输和存储
let shukeStr = JSON.stringify(shuke)
console.log(shukeStr)
// sessionStorage.setItem("shukeStr", shukeStr)
// 转换成json对象,方便数据的使用
let shukeObj = JSON.parse(shukeStr)
console.log(shukeObj)

八、赋值扩展-解构赋值
(1) 什么是解构赋值
ES6根据数组的结构、对象的结构,按照结构的形式进行解析赋值的方式,称为解构赋值,如:

// 数组
var a = [1, 2, 3]
// 解析结构:[数据1, 数据2, 数据3]
// 根据结构,进行变量赋值
var [x1, x2, x3] = a
// x1=1  x2=2  x3=3

(2) 数组解构赋值

// 1、数组解构
let brr = [1, 2, 3, 4, 5]
// 完全解构:将数组中的数据全部提取出来
var [a1, a2, a3, a4, a5] = brr
console.log(a1, a2, a3, a4, a5)
// 不完全解构:按照结构顺序提取数据[重点]
var [b1, b2] = brr
console.log(b1, b2) // 提取第一个和第二个数据
var [, , b3, b4] = brr // 提取第三个和第四个数据
console.log(b3, b4)
// 解构失败:超出结构的数据,下面的c6解构失败的数据
var [c1, c2, c3, c4, c5, c6] = brr
console.log(c1, c2, c3, c4, c5, c6)
// 解构默认值:如果某个数据解构失败,可以使用默认数据
var [d1, d2, d3, d4, d5 = "默认值", d6 = "默认值"] = brr
console.log(d1, d2, d3, d4, d5, d6)

(3)对象的结构赋值

// 2、对象数据解构
let tom = { name: "汤姆", age: 20, gender: "男", email: "tom@163.com" }
// 完全解构:根据属性名称,将所有属性进行结构
var { name, age, gender, email } = tom
console.log(name, age, gender, email)
// 不完全结构
var { name, email } = tom
console.log(name, email)
// 解构失败: 对象没有phone属性,所以解构失败得到undefined
var { name, age, phone } = tom
console.log(name, age, phone)
// 解构默认值
var { name, age, phone = "16699990000" } = tom
console.log(name, age, phone)
// 解构重命名
var { name: n, age: a } = tom
console.log(n, a) // 不能再使用name,age了
// console.log(name, age)

九、关于变量
操作对象属性时出现的问题

// 属性读取,经常出现的错误
const img = document.querySelector("img") // img = null
// 操作img属性src:如果img不存在就会报错,导致程序崩溃退出
// img.src = "images/1.jpg"
// 问题:如何判断一个对象不能为空,再去操作它的属性?
// 如果img存在的话,操作src属性
// ① if判断
if (img) {
  console.log(img.src)
}
// ② 逻辑运算符: 如果img存在的话,读取img.src属性;如果不存在返回null
console.log(img && img.src, "获取src属性")
// ③ 出现了一种新的运算符:属性控制运算符 ?.
// img?.src  尝试获取img的src属性,如果不存在就返回undefined
console.log(img?.src, "获取src属性")

有关ES6基础的更多相关文章

  1. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  2. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  3. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  4. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  5. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  6. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

  7. c++基础-运算符 - 2

    目录1关系运算符2运算符优先级3关系表达式的书写代码实例:下面是面试中可能遇到的问题:1关系运算符C++中有6个关系运算符,用于比较两个值的大小关系,它们分别是:运算符描述==等于!=不等于小于>大于小于等于>=大于等于这些运算符返回一个布尔值,即true或false。例如,当x等于y时,x==y的结果为true,否则结果为false。2运算符优先级在C++中,关系运算符的优先级高于赋值运算符,但低于算术运算符。以下是关系运算符的优先级,从高到低排列:运算符描述>,,>=,关系运算符==,!=相等性运算符&&逻辑与`如果在表达式中有多个运算符,则按照优先级顺序依次进行运算。3关系表达式的书写在

  8. 计算机必读基础书籍 - 2

    一.计算机组成原理    这本书利用组合逻辑、同步时序逻辑电路设计的相关知识,从逻辑门开始逐步构建运算器、存储器、数据通路和控制器,最终集成为完整的CU原型系统,使读者从设计者的角度理解计算机部件构成及运行的基本原理,掌握软硬件协同的概念。    全书共9章,主要内容包括计算机系统概述、数据信息的表示、运算方法与运算器、存储系统、指令系统、中央处理器、指令流水线、总线系统、输入输出系统。1.计算机系统概述1.1计算机发展历程    计算机是一种能够按照事先存储的程序,自动、高速、准确地对相关信息进行处理的电子设备。1946年2月,世界上第一台电子数字计算机ENIAC(ElectronicNum

  9. 0基础学习软件测试有哪些建议 - 2

    其实现在基础的资料和视频到处都是,就是看你有没有认真的去找学习资源了,去哪里学习都是要看你个人靠谱不靠谱,再好的教程和老师,你自己学习不进去也是白搭在正式选择之前,大可以在各种学习网站里面找找学习资源先自己学习一下为什么选择学软件测试?同学们理由众多!大概分这几类:①不受开发语言、行业产品变化限制;②入门更简单,对零基础、女生都友好;③软件项目都需要测试人员,职业生涯稳;④学习周期短,但薪资并不低。要想“肩扛”一条线?需掌握三大技能:技能1:掌握测试流程,熟悉系统框架能提前与开发人员一起制定测试计划,通过测试左移,推动代码评审,代码审计,单元测试,自动化冒烟测试,来保证研发阶段的质量。技能2:

  10. 关于ES集群信息的一些查看 - 2

    文章目录查看ES信息查看节点信息查看分片信息实际场景下ES分片及副本数量应该怎么分关于ES的灵活使用查看ES信息查看版本kibana:GET/查看节点信息GET/_cat/nodes?v解释:ip:集群中节点的ip地址;heap.percent:堆内存的占用百分比;ram.percent:总内存的占用百分比,其实这个不是很准确,因为buff/cache和available也被当作使用内存;cpu:cpu占用百分比;load_1m:1分钟内cpu负载;load_5m:5分钟内cpu负载;load_15m:15分钟内cpu负载;node.role:上图的dilmrt代表全部权限master:*代表

随机推荐