ES6

文章目录

  • ES6
    • let 声明变量
    • const 声明常量
    • 解构赋值
      • 数组解构
      • 对象解构
    • 模板字符串
    • 对象相关新特性
      • 声明对象简写
      • 对象方法简写
      • 对象拓展运算符
    • 箭头函数

ES6

ECMAScript 6,也被称为ES6或ECMAScript 2015,是JavaScript语言标准的第六个版本,于2015年发布。它引入了许多新的语言特性和改进,以增强JavaScript的编程能力和简化复杂应用的开发

let 声明变量

let声明变量与var相似,但是使用规范会更严格。

注意事项:

  • let 声明的变量有严格局部作用域
  • let 只能声明一次, var 可以声明多次
  • let 不存在变量提升, var 存在变量提升
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>demo</title>
</head>
<body>
<script type="text/javascript">

    // let 细节 1
    // (1) let 声明的变量, 在代码块中,则作用域在代码块中
    // (2) var 声明的变量, 在代码块中,作用域没有限制
    {
        var name = "lxg";
        let job = "java 工程师";
        console.log("name=", name);
        console.log("job=", job);
    }

    console.log("name=", name);
    console.log("job=", job);//job is not defined

    // let 细节 2
    // 1. var 可以声明多次
    // 2. let 只能声明一次
    var num1 = 100;
    var num1 = 200;
    console.log(num1);
    let num2 = 600;
    let num2 = 900; //Uncaught SyntaxError: redeclaration of let num2
    console.log(num2);
    
    // let 细节 3
    // 1. let 不存在变量提升
    // 2. var 存在变量提升
    console.log("x=", x);//undefined
    var x = "tom";
    
    //can't access lexical declaration 'z'
    console.log("z=", z);
    let z = "mary";
</script>
</body>
</html>

const 声明常量

const 声明常量在定义时需要赋值,并且不能修改。

//常量
const PI = 3.14;
console.log("PI=", PI)

解构赋值

解构赋值是对赋值运算符的扩展,是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。主要有两种形式: 数组解构和对象解构

数组解构

let arr = [1, 2, 3];
//如果要看某个变量的类型
console.log("arr=>", arr);

//数组解构[取出元素]
//1.传统
let x = arr[0], y = arr[1], z = arr[2];
console.log(x, y, z);

//2. ES6 风格
let [a, b, c] = arr;
console.log("==================================");
console.log(a, b, c);

let [num1, num2, num3] = [100, 200, 300];
console.log(num1, num2, num3);

对象解构

//monster 是一个对象
let monster = {name: '牛魔王', age: 800};

//传统方式取出属性-解构 对象名.属性名
console.log(monster.name, " ", monster.age);

//ES6 对象解构
//1. 把 monster 对象的属性, 赋值给{name,age}
//2. {name,age} 的取名 name 和 age 要和 monster 对象的属性名保持一致
//3. 使用{} 包括, 不要使用[]
//4. {name,age} 顺序是无所谓
let {name, age} = monster;
console.log("========================");
console.log("name=", name, " age=", age);

//还有其它的形式,比如方法上使用对象解构
//如果这样使用,仍然要保证名称和对象的属性名一致
function f1({name, age}) {
console.log("f1-name=", name, " ", "f1-age=", age)
}
f1(monster);

模板字符串

模板字符串使用反引号``将字符串包裹

应用场景:

  • 可作为普通字符串
  • 可用来定义多行字符串,即可以将换行字符串原生输出
  • 字符串插入变量和表达式, 使用 ${}
  • 字符串中调用函数
//1、字符串,换行会原生输出
let str1 = `for(int i = 0;i < 10;i++){
					System.out.println("i="+i);
				}`;
console.log("str1=", str1);

//2. 字符串插入变量和表达式。变量名写在 ${} 中,${} 中可以放入 JavaScript 表达式。
let name = "lxg";
//当解析 ${name}, 就找最近的 name 遍历, 进行替换
//然后可以得到最后解析的字符串
let str2 = `名称=${name}`;
let str3 = `1+2=${1 + 2}`;
let n1 = 80;
let n2 = 20;
let str4 = `${n1}+${n2}=${n1 + n2}`;
console.log("str2=", str2);
console.log("str3=", str3);
console.log("str4=", str4);

//3. 字符串中调用函数
function sayHi(name) {
    return "hi " + name;
}
let name2 = "tom";
let str5 = `sayHi() 返回的结果是=${sayHi('jack')}`;
let str6 = `sayHi() 返回的结果是=${sayHi(name2)}`;
console.log("str5=", str5);
console.log("str6=", str6);

对象相关新特性

声明对象简写

const age = 800;
const name = "牛魔王";
// 传统 声明/定义对象
let monster = {name: name, age: age};

// ES6 声明/定义对象
//1. {name, age} : 表示对象的属性名是 name 和 age
//2. 属性 name 的值是从变量/常量 name 来的
let monster02 = {name, age};
console.log("monster02=>", monster02);

对象方法简写

// 传统-对象方法定义
let monster = {
    name: "红孩儿", 
    age: 100, 
    sayHi: function () {
        console.log("信息: name=", this.name, " age=", this.age);
    }
}
monster.f10 = function () {
    console.log("哈哈");
};
monster.sayHi();
monster.f10();

// ES6-对象方法定义
let monster2 = {
    name: "红孩儿~", 
    age: 900, 
    sayHi() {
        console.log("信息: name=", this.name, " age=", this.age);
    },
    f1() {
        console.log("f1()");
    }
}
monster2.sayHi();
monster2.f1();

对象拓展运算符

// 拷贝对象(深拷贝)
let cat2 = {...cat};
cat2.name = "中花猫";
console.log("cat=>", cat);//小花猫
console.log("cat2=>", cat2);//中花猫

// 合并对象[深拷贝]
let monster = {name: "白骨精", age: 100};
let car = {brand: "奔驰", price: 800000};
let monster_car = {...monster, ...car}
monster_car.name = "狐狸精";
console.log("monster=>", monster);
console.log("monster_car=>", monster_car);

箭头函数

箭头函数提供更加简洁的函数书写方式。基本语法是:(参数列表) => { 函数体 }

注意事项:

  • 箭头函数没有参数或有多个参数,要用 () 括起来,箭头函数只有一个参数, 可以省略()
  • 箭头函数函数体有多行语句,用 {} 包裹起来,表示代码块
  • 函数体只有一行语句,并且需要返回结果时,可以省略 {} , 结果会自动返回
  • 箭头函数多用于匿名函数的定义

一个参数:

// 传统定义函数
var f1 = function (n) { 
    return n * 2
}
console.log("传统= " + f1(2))

// ES6 , 箭头函数使用
let f2 = (n) => {
    return n * 2;
}
console.log("f2() 结果= ", f2(100));//200

//上面的 es6 函数写法,还可以简化
let f3 = n => n * 3;
console.log("f3() 结果=", f3(100));//300

//函数也可以传给一个变量
function hi(f4) {
    console.log(f4(900));
}
hi((n) => {
    return n + 100
});

多个参数:

// 传统
var f1 = function (n, m) {
    var res = 0
    for (var i = n; i <= m; i++) {
        res += i
    }
    return res
}
console.log("传统= " + f1(1, 10))

// ES6 , 箭头函数使用
let f2 = (n, m) => {
    var res = 0
    for (var i = n; i <= m; i++) {
        res += i
    }
    return res
};
console.log(f2(1, 10));

箭头函数加对象解析:

const monster = {
    name: "红孩儿", age: 1000, skill: ['红缨枪', '三位真火']
}
//要求:在方法形参取出 monster 对象的 skill 属性
//传统方式
function f1(monster) {
    console.log("skill=", monster.skill);
}

f1(monster);

//箭头函数
let f2 = ({skill}) => {
    console.log("skill=", skill);
}

//1. f2 传入对象 monster
//2. f2 形参是 {skill} , 所以 es6 的对象解构特性, 会把 monster 对象的 skill 属性赋给skill
//3. 对象解构的前提就是 {skill}的 skill 和 monster 的 skill 属性是一致
f2(monster);
//箭头函数+解构, 注意有{}, skill 名称需要和对象属性名一致.
let f3 = ({age, name, skill}) => {
    console.log("skill=", skill, " age=", age, " name=", name);
}
f3(monster);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Material Design风格开源、易用、强大的WPF UI控件库

前言 今天大姚给大家分享一款基于Material Design风格开源、免费&#xff08;MIT License&#xff09;、易于使用、强大的WPF UI控件库&#xff1a;MaterialDesignInXamlToolkit。 项目介绍 MaterialDesignInXamlToolkit 是一个开源、易于使用、强大的 WPF UI 控件库&#x…

【opencv】示例-videocapture_starter.cpp 从视频文件、图像序列或连接到计算机的摄像头中捕获帧...

/** * file videocapture_starter.cpp * brief 一个使用OpenCV的VideoCapture与捕获设备&#xff0c;视频文件或图像序列的入门示例 * 就像CV_PI一样简单&#xff0c;对吧&#xff1f; * * 创建于: 2010年11月23日 * 作者: Ethan Rublee * * 修改于: 2013年4月17日 * …

mysql 查询实战3-解答

对mysql 查询实战3-题目&#xff0c;进行一个解答 11、查询每⽉产品交易与退款情况 目标&#xff1a;查询每⽉产品交易&#xff08;交易总额&#xff0c;交易数&#xff09;与退款情况&#xff08;退款总额&#xff0c;退款数&#xff09; 1&#xff0c;先把日期格式化 使用 E…

Savina Mx 高級的無塵擦拭布系列產品,吸水吸油性極強,不磨損原件

Savina Mx是日本KBSEIREN株式會社&#xff08;原KANEBO&#xff09;開發的目前*高級的無塵擦拭布系列產品&#xff0c;吸水吸油性極強&#xff0c;不磨損原件。廣氾用於光學鏡頭製造&#xff0c;辦公器材保養&#xff0c;10級以上的無塵車間淨化室&#xff0c;半導體生產線車間…

美易官方:以色列袭击伊朗!原油、黄金走势上涨?

以色列突然袭击伊朗的消息震惊了全球市场&#xff0c;引发了一场原油和黄金价格的飙升。这一事件不仅令投资者感到紧张&#xff0c;也引发了国际社会对于中东地区紧张局势的担忧。 以色列此次袭击的目标据说是伊朗的一处军事基地&#xff0c;据称该基地涉及到伊朗的核武器研发计…

Network: wirehark: 解包问题:乱序重组

如果一个大的TCP数据被分成几个segment&#xff0c;而每个segment如果走的路由途径不同的化&#xff0c;会导致下面这个解析上错误。从下面这个图里看&#xff0c;第一片和第二片的顺序的&#xff0c;但是第三片跑到了第二片的前面&#xff0c;wirehark就解析不出来了&#xff…

安卓apk文件签名

一、环境准备 链接: https://pan.baidu.com/s/1D3WxIL5M5ewyFNTqJzARPw 提取码: pd6w 上篇博文编译的apk文件 1、docker build -t android-build:v1.0.1 . 直接制作镜像 2、docker run -it android-build:v1.0.1 /bin/bash 运行进入容器 指定sdk的路径&#xff0c;然后直接…

华为欧拉系统(openEuler-22.03)安装深信服EasyConnect软件(图文详解)

欧拉镜像下载安装 iso镜像官网下载地址 选择最小化安装&#xff0c;标准模式 换华为镜像源 更换华为镜像站&#xff0c;加速下载&#xff1a; sed -i "s#http://repo.openeuler.org#https://mirrors.huaweicloud.com/openeuler#g" /etc/yum.repos.d/openEuler.r…

使用Termux在Android设备上编译运行SpecCPU2006

Spec CPU 2006 的使用说明&#xff08;曲线救国版&#xff09; 因本部分实验用到的Spec CPU2006依赖于多个编译工具包&#xff0c;因此对源码的编译要在配置好环境的Linux设备上运行&#xff0c;根据实验发现&#xff0c;现有的环境&#xff08;包括adb和termux&#xff09;都不…

通过实例学C#之FileStream类

简介 可以通过此类进行文件读取。 首先在项目所在文件夹的Bin文件中新建一个test.txt文件&#xff0c;里面输入内容“hello world!”。 构造函数 FileStream (string path, FileMode mode&#xff0c;FileAccess access) 通过路径文件path&#xff0c;打开文件模式mode以及读写…

Arcgis Pro2.5安装教程(内含安装文件)

​最近处理的数据量大&#xff0c;发现arcmap这种老产品属实是不行了&#xff0c;相比于下一代的Arcgis Pro,不但运行速度慢&#xff0c;也容易遇到突然关闭的问题&#xff0c;之前基于团队的选择也没办法&#xff0c;最近实在是被数据搞得无语了&#xff0c;一鼓作气装上了Arc…

Java序列流和打印流、对象序列化

目录 1、序列流 1.1 SequenceInputStream 1.2 案例:切割mp3并合并 2、 对象的序列化 2.1 ObjectOutputStream与ObjectInputStream 2.2 Serializable 3、Properties. 4、打印流 4.1 PrintStream 5、操作基本数据类型的流对象 5.1 DataInputStream以及DataOutputStrea…

书生·浦语大模型全链路开源体系-第6课

书生浦语大模型全链路开源体系-第6课 书生浦语大模型全链路开源体系-第6课相关资源Lagent & AgentLego 智能体应用搭建环境准备创建虚拟环境安装LMDeploy安装 Lagent安装 AgentLego Lagent 轻量级智能体框架使用 LMDeploy 部署启动并使用 Lagent Web Demo使用自定义工具获取…

呼叫系统的技术实现原理和运作流程,ai智能系统,呼叫中心外呼软交换部署

呼叫系统的技术实现原理和运作流程可以涉及多个组成部分&#xff0c;包括硬件设备、软件系统和通信协议。以下是一般情况下呼叫系统的技术实现原理和运作流程的概述&#xff1a; 硬件设备&#xff1a; 服务器&#xff1a;用于承载呼叫系统的核心软件和数据库。电话交换机&#…

学习-官方文档编辑方法

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Linux常用命令英文全称与中文解释

Linux操作系统中有许多常用的命令&#xff0c;每个命令都有其英文全称&#xff08;Full Name&#xff09;和中文解释。以下是一些常见的Linux命令及其英文全称和中文解释的列表&#xff1a; 你猜猜这个是哪个软件的快捷键↑ man: Manual 意思是手册&#xff0c;可以用这个命…

如何让指定 Windows 程序崩溃

一、为何要把人家搞崩溃呢 看到这个标题&#xff0c;大家可能觉得奇怪&#xff0c;为什么要让指定程序崩溃呢&#xff0c;难道是想作恶吗&#xff1f;&#x1f613; 哈哈&#xff0c;绝对不是&#xff0c;真实原因是这样的。如果大家用过 Windows 电脑&#xff0c;可能见过类…

【个人博客搭建】(3)添加SqlSugar ORM 以及Json配置文件读取

1、安装sqlsugar。在models下的依赖项那右击选择管理Nuget程序包&#xff0c;输入sqlsugarcore&#xff08;因为我们用的是netcore&#xff0c;而不是net famework所以也对应sqlsugarcore&#xff09;&#xff0c;出来的第一个就是了&#xff0c;然后点击选择版本&#xff0c;一…

展会媒体邀约资源,媒体宣传服务执行

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 在组织展会时&#xff0c;媒体宣传服务的执行是提升展会知名度和影响力的关键环节。 确定目标媒体&#xff1a;根据展会的主题和目标受众&#xff0c;选择适合的媒体进行邀请。这可能包…

微软 SDL 安全研发生命周期详解

微软SDL&#xff08;Security Development Lifecycle&#xff09;是一种安全软件开发的方法论&#xff0c;它强调在整个产品开发过程中融入安全考虑因素。SDL 是一个动态的过程&#xff0c;包括多个阶段和活动&#xff0c;以确保产品的安全开发、测试、部署和运行。Microsoft 要…
最新文章