大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新......

在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!

一、let

作用:与var类似, 用于声明一个变量。

let和var的区别:

  • 在块作用域内有效
  • 不能重复声明
  • 不会预处理, 不存在提升
  1. <script type="text/javascript">
  2. console.log(res); //不会预处理, 不存在提升,报错
  3. // 不能重复声明
  4. let res = 10;
  5. let res = 10; // 报错
  6. </script>

应用:循环遍历加监听

我们先开看一个例子:

  1. <body>
  2. <button>测试1</button>
  3. <button>测试2</button>
  4. <button>测试3</button>
  5. <script type="text/javascript">
  6. let btns = document.getElementsByTagName('button');
  7. for (var i = 0; i < btns.length; i++) {
  8. btns[i].onclick = function () {
  9. alert(i);
  10. }
  11. }
  12. </script>
  13. </body>

我们分别点击按钮的时候,分别打印多少?

结果:打印的都是2。因为回调函数的写法会进行覆盖操作。如何解决?

方法一:使用闭包。

  1. for (var i = 0; i < btns.length; i++) {
  2. (function(){
  3. btns[i].onclick = function () {
  4. alert(i);
  5. }
  6. })(i);
  7. }

这种方式相当于,每个回调函数有个自己的区间,各个区间互不干扰。而 let 正好有这个特性。

方法二:将 for循环的 var改为let即可。

二、const

作用:定义一个常量。

特点:不能修改,其它特点同let。

  1. const uName = 'Daotin';

三、变量的解构赋值

理解:从对象或数组中提取数据, 并赋值给变量(多个)。

1、对象的解构赋值

之前我们要获取一个对象的属性,会定义变量然后接收对象的属性值。

  1. let obj = {name : 'kobe', age : 39};
  2. let name = obj.name;
  3. let age = obj.age;
  4. console.log(name, age);

对象的解构赋值可以这样做:

  1. let {name, age} = obj;
  2. console.log(name, age);

注意:

1、对象的解构赋值必须使用大括号 {}

2、大括号里面的变量名必须和obj里面的属性名相同

3、可以只定义一部分变量接收一部分的obj属性,不需要全部接收。

2、数组的解构赋值

数组没有对象的数组名,但是有下标可以使用。所以这里的变量名可以随便起。

  1. let arr = ['abc', 23, true];
  2. let [a, b, c] = arr;
  3. console.log(a, b, c);

注意:

1、数组的解构赋值必须使用中括号 []

如果只想取其中的某几个值,那么变量可以使用逗号隔开。

let [,,a,,] = arr;

如果定义的变量个数比数组的个数多,多出来的变量的值为 undefined

四、模板字符串

作用:简化字符串的拼接。

注意:

1、模板字符串必须用 ``` ` 包含;

2、变化的部分使用${xxx}定义

  1. let obj = {
  2. name: 'anverson',
  3. age: 41
  4. };
  5. // 我们之前拼接字符串用的是+
  6. console.log('我叫:' + obj.name + ', 我的年龄是:' + obj.age);
  7. // 使用模板字符串的方式
  8. console.log(`我叫:${obj.name}, 我的年龄是:${obj.age}`);

五、对象的简化写法

如果有变量和对象的属性名称相同,之前的写法是赋值操作:

  1. let a = 1;
  2. let b = 2;
  3. let Obj = {
  4. a: a,
  5. b: b,
  6. };

现在,如果变量和对象的属性名称相同,可以简写如下:

  1. let a = 1;
  2. let b = 2;
  3. let Obj = {
  4. a,
  5. b,
  6. };

对于对象的属性,如果是个函数的话,也可以简写:

之前的写法为:

  1. let Obj = {
  2. foo: function(){
  3. //...
  4. }
  5. };

现在的写法为:(去掉冒号和function)

  1. let Obj = {
  2. foo(){
  3. //...
  4. }
  5. };

六、箭头函数

作用:箭头函数的作用主要是定义匿名函数。

有下面几种情况的匿名函数都可以使用箭头函数:

  1. let foo = function () {};
  2. // 转换成箭头函数
  3. let foo = () => {};
  4. //------------------------------
  5. let Obj = {
  6. foo: function () { }
  7. }
  8. // 转换成箭头函数
  9. let Obj = {
  10. foo: () => { }
  11. }

基本语法(参数)

1、匿名函数没有参数:() 不能省略,占位作用。let foo = () => {};

2、只有一个参数:() 可以省略,也可以不省略。let foo = a => {};

3、多个参数,() 不能省略。let foo = (a,b) => {};

基本语法(函数体)

1、函数体只有一条语句:可以省略{},并且默认返回结果(不需要 return)。

  1. let foo = (x, y) => x + y;
  2. console.log(foo(1, 2));

2、函数体如果有多个语句, 需要用{}包围,若有需要返回的内容,需要添加return。

  1. let foo = (x, y) => {
  2. console.log(x, y);
  3. return x + y;
  4. };
  5. console.log(foo(1, 2));

箭头函数的特点:

1、简介

2、箭头函数没有自己的this,箭头函数的this不是调用的时候决定的,而是在定义的时候处在的对象就是它的this。(意思:箭头函数的外层的是否有函数,如果有,箭头函数的this就是外层函数的this,如果没有,则为 window)

  1. <script type="text/javascript">
  2. let foo = () => {
  3. console.log(this);
  4. };
  5. foo(); // window 对象
  6. let Obj1 = {
  7. bar() {
  8. let foo = () => {
  9. console.log(this);
  10. };
  11. foo();
  12. }
  13. };
  14. Obj1.bar(); // Obj1 对象,箭头函数外层有函数bar,bar里面的this是Obj1.
  15. let Obj2 = {
  16. bar: () => {
  17. let foo = () => {
  18. console.log(this);
  19. };
  20. foo();
  21. }
  22. };
  23. Obj2.bar(); // window 对象,箭头函数外层有函数bar,bar函数也是箭头函数,bar的外层没有函数,所以bar里面的this是window,所以foo里面的this也是window。
  24. </script>

七、三点(可变参数)运算符

作用:

1、用来取代 arguments 但比 arguments 灵活,

arguments 是个伪数组,但是三点运算符是真数组,可以使用 forEach 等方法。

2、三点(可变参数)运算符只能是最后部分形参参数。 但是前面是可以有参数来占位的。

3、扩展运算符

  1. let arr = [1, 6];
  2. let arr1 = [2, 3, 4, 5];
  3. arr = [1, ...arr1, 6];
  4. console.log(arr); // [1,2,3,4,5,6]
  5. console.log(...arr); // 1 2 3 4 5 6

语法:...数组名 :表示遍历数组的所有元素。

八、形参默认值

作用:当不传入参数的时候默认使用形参里的默认值。

  1. <script type="text/javascript">
  2. //定义一个点的坐标
  3. function Point(x = 12, y = 12) { // 形参的默认值
  4. this.x = x;
  5. this.y = y;
  6. }
  7. let p = new Point();
  8. console.log(p);
  9. let point = new Point(25, 36);
  10. console.log(point);
  11. </script>

从零开始学 Web 之 ES6(三)ES6基础语法一的更多相关文章

  1. 从零开始学 Web 之 ES6(五)ES6基础语法三

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  2. 从零开始学 Web 之 ES6(四)ES6基础语法二

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  3. 从零开始学 Web 之 ES6(六)ES6基础语法四

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  4. 从零开始学 Web 之 ES6(二)ES5的一些扩展

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  5. 从零开始学 Web 之 ES6(一)ES5严格模式

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  6. 从零开始学 Web 之 CSS(三)链接伪类、背景、行高、盒子模型、浮动

    大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...

  7. 从零开始学 Web 之 HTML(三)表单

    大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...

  8. 从零开始学 Web 之 JavaScript(三)函数

    大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...

  9. 从零开始学 Web 之 BOM(三)offset,scroll,变速动画函数

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

随机推荐

  1. 设计原则之依赖倒置js

    依赖倒置 定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象.(百科全书) 这个定义什么意思,太专业 感觉不像人话.. 什么叫高层模块,什么叫底层模块,什么叫 ...

  2. json-server使用及路由配置

    1.先安装node.js,node.js中包含了json-server模块 2.在angular-hello/src/app/data-base.json文件中,编辑json格式的服务数据, { &q ...

  3. Piwis Tester II V18.100 with CF30 Laptop for Porsche

    Porsche Piwis Tester II is the latest professional tester for Porshe,the most poweful diagnose and o ...

  4. VC 中引用js文件

    #include "comutil.h" using namespace MSScriptControl; #include <MsHTML.h> #include & ...

  5. HDU 5521.Meeting 最短路模板题

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  6. Java内存泄露监控工具:JVM监控工具介绍

    本文将对JVM监控工具jstack, jconsole, jinfo, jmap, jdb, jstat进行详细的介绍,具体内容请看下文 Sun JDK监控和故障处理工具 名称 主要作用 jps JV ...

  7. finereport 下拉复选框多选

  8. ScrollView嵌套Linearlayout显示不全的解决办法

    以为ScrollView只能嵌套一个元素,所以把几个控件都包裹在了一个LinearLayout中了.但是发现底部显示不全,滑动不到最底下. 代码: <ScrollView android:id= ...

  9. Collision (hdu-5114

    题意:你有一个以(0, 0), (x, 0), (0, y), (x, y)为边界点的四边形,给你两个点从(x1, y1), (x2, y2)的点发射,以(1, 1)的速度走,碰到边界会反射,问你最终 ...

  10. Java集合:ConcurrentHashMap原理分析

    集合是编程中最常用的数据结构.而谈到并发,几乎总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap).这篇文章主 ...