ECMAScript5,6,7从基本语法到高级函数

2023-10-31

 

尚硅谷ES5_6_7教程

(01. 尚硅谷_ECMAScript入门介绍&)

01. 尚硅谷_ECMAScript入门介绍&

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>ECMAScript理解</title>
</head>
<body>

<button id="testBtn">测试</button>

<!--
1. 它是一种由ECMA组织(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范
2. 而我们学的 JavaScript 是ECMA的实现, 但术语ECMAScript和JavaScript平时表达同一个意思
3. JS包含三个部分:
	1). ECMAScript(核心)
	2). 扩展==>浏览器端
		* BOM(浏览器对象模型)
		* DOM(文档对象模型)
	3). 扩展==>服务器端
		* Node
4. ES的几个重要版本
	* ES5 : 09年发布
	* ES6(ES2015) : 15年发布, 也称为ECMA2015
	* ES7(ES2016) : 16年发布, 也称为ECMA2016  (变化不大)
-->
<script type="text/javascript">


</script>
</body>
</html>

(02. 尚硅谷_ES5_严格模式&)

02. 尚硅谷_ES5_严格模式

雅阁模式禁止自定义函数中的this指向window

必须要使用var声明变量

创建eval作用域

对象不能有重名属性

 <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>01_严格模式</title>
</head>
<body>
<!--
1. 理解:
  * 除了正常运行模式(混杂模式),ES5添加了第二种运行模式:"严格模式"(strict mode)。
  * 顾名思义,这种模式使得Javascript在更严格的语法条件下运行
2.  目的/作用
	* 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为
	* 消除代码运行的一些不安全之处,为代码的安全运行保驾护航
	* 为未来新版本的Javascript做好铺垫
3. 使用
  * 在全局或函数的第一条语句定义为: 'use strict';
  * 如果浏览器不支持, 只解析为一条简单的语句, 没有任何副作用
4. 语法和行为改变
	* 必须用var声明变量
	* 禁止自定义的函数中的this指向window
	* 创建eval作用域
	* 对象不能有重名的属性
-->

<script type="text/javascript">

</script>

</body>
</html>

new时候this指向实例对象

eval定义的变量没有自己的作用域

(03. 尚硅谷_ES5_json对象扩展&)

03. 尚硅谷_ES5_json对象扩展&

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>02_JSON对象</title>
</head>
<body>
<!--
1. JSON.stringify(obj/arr)
  * js对象(数组)转换为json对象(数组)
2. JSON.parse(json)
  * json对象(数组)转换为js对象(数组)

-->
<script type="text/javascript">

</script>
</body>
</html>

(04. 尚硅谷_ES5_Object对象方法扩展&)

04. 尚硅谷_ES5_Object对象方法扩展&

原型里面的属性可以被继承

defineProperties扩展属性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>03_Object扩展</title>
</head>
<body>
<!--
ES5给Object扩展了一些静态方法, 常用的2个:
1. Object.create(prototype, [descriptors])
  * 作用: 以指定对象为原型创建新的对象
  * 为新的对象指定新的属性, 并对属性进行描述
    - value : 指定值
    - writable : 标识当前属性值是否是可修改的, 默认为false
    - configurable: 标识当前属性是否可以被删除 默认为false
    - enumerable: 标识当前属性是否能用for in 枚举 默认为false
2. Object.defineProperties(object, descriptors)
  * 作用: 为指定对象定义扩展多个属性
    * get :用来获取当前属性值得回调函数
    * set :修改当前属性值得触发的回调函数,并且实参即为修改后的值
   * 存取器属性:setter,getter一个用来存值,一个用来取值
-->
<script type="text/javascript">
  

</script>
</body>
</html>

对象本身两个方法回调

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--
    对象本身的两个方法
    * get propertyName(){} 用来得到当前属性值的回调函数
    * set propertyName(){} 用来监视当前属性值变化的回调函数
-->
<script type='text/javascript'>


</script>
</body>
</html>

(05. 尚硅谷_ES5_数组的扩展&)

05. 尚硅谷_ES5_数组的扩展&

prototype给实例增加属性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>04_Array扩展</title>
</head>
<body>
<!--
1. Array.prototype.indexOf(value) : 得到值在数组中的第一个下标
2. Array.prototype.lastIndexOf(value) : 得到值在数组中的最后一个下标
3. Array.prototype.forEach(function(item, index){}) : 遍历数组
4. Array.prototype.map(function(item, index){}) : 遍历数组返回一个新的数组,返回加工之后的值
5. Array.prototype.filter(function(item, index){}) : 遍历过滤出一个新的子数组, 返回条件为true的值
-->
<script type="text/javascript">
  /*
   需求:
   1. 输出第一个6的下标
   2. 输出最后一个6的下标
   3. 输出所有元素的值和下标
   4. 根据arr产生一个新数组,要求每个元素都比原来大10
   5. 根据arr产生一个新数组, 返回的每个元素要大于4
   */


</script>
</body>
</html>

(06. 尚硅谷_ES5_call,apply,bind用法详解&)

06. 尚硅谷_ES5_call,apply,bind用法详解&

强制绑定this

foo.apply(obj,33) obj调用foo传递33参数,bind的this是调用的obj而不是window

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>05_Function扩展</title>
</head>
<body>
<!--
1. Function.prototype.bind(obj) :
  * 作用: 将函数内的this绑定为obj, 并将函数返回
2. 面试题: 区别bind()与call()和apply()?
  * 都能指定函数中的this
  * call()/apply()是立即调用函数
  * bind()是将函数返回
-->
<script type="text/javascript">


</script>
</body>
</html>

(07. 尚硅谷_ES6_let const关键字&)

07. 尚硅谷_ES6_let const关键字&

不能重复声明,不存在var提升

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>01_let关键字</title>
</head>
<body>

<button>测试1</button>
<br>
<button>测试2</button>
<br>
<button>测试3</button>
<br>
<!--
***let
1. 作用:
  * 与var类似, 用于声明一个变量
2. 特点:
  * 在块作用域内有效
  * 不能重复声明
  * 不会预处理, 不存在提升
3. 应用:
  * 循环遍历加监听
  * 使用let取代var是趋势
-->
<script type="text/javascript">


</script>
</body>

</html>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>02_const关键字</title>
</head>
<body>
<!--
1. 作用:
  * 定义一个常量
2. 特点:
  * 不能修改
  * 其它特点同let
3. 应用:
  * 保存不用改变的数据
-->
<script type="text/javascript">

</script>
</body>
</html>

(08. 尚硅谷_ES6_变量的解构赋值&)

08. 尚硅谷_ES6_变量的解构赋值&

解构的目标是对象,只能以对象来接收,对象中可以设置属性,{}相当于全局变量usernam必须是本来对象的属性obj.xxx

只需要一部分数据

数组的解构赋值,根据下标一一对应,与写的什么没有关系

直接使用,在函数内部声明了username与age直接使用即可。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>03_变量的解构赋值</title>
</head>
<body>
<!--
1. 理解:
  * 从对象或数组中提取数据, 并赋值给变量(多个)
2. 对象的解构赋值
  let {n, a} = {n:'tom', a:12}
3. 数组的解构赋值
  let [a,b] = [1, 'atguigu'];
4. 用途
  * 给多个形参赋值
-->
<script type="text/javascript">


</script>
</body>
</html>

(09. 尚硅谷_ES6_模板字符串&)

09. 尚硅谷_ES6_模板字符串&

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>04_模板字符串</title>
</head>
<body>
<!--
1. 模板字符串 : 简化字符串的拼接
  * 模板字符串必须用 `` 包含
  * 变化的部分使用${xxx}定义
-->
<script type="text/javascript">

</script>
</body>
</html>

(10. 尚硅谷_ES6_对象的简写方式&)

10. 尚硅谷_ES6_对象的简写方式&

如果key与value一样,可以省略一个

去掉:和function

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>05_简化的对象写法</title>
</head>
<body>
<!--
简化的对象写法
* 省略同名的属性值
* 省略方法的function
* 例如:
  let x = 1;
  let y = 2;
  let point = {
    x,
    y,
    setX (x) {this.x = x}
  };
-->
<script type="text/javascript">

</script>
</body>
</html>

(11. 尚硅谷_ES6_箭头函数详解&)

11. 尚硅谷_ES6_箭头函数详解&

只有一条语句和表达式要省略大括号,自动返回计算结果

多条语句必须return要返回结果

箭头函数所处的对象就是this

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>06_箭头函数</title>

</head>
<body>
    <button id="btn1">测试箭头函数this_1</button>
    <button id="btn2">测试箭头函数this_2</button>


<!--
* 作用: 定义匿名函数
* 基本语法:
  * 没有参数: () => console.log('xxxx')
  * 一个参数: i => i+2
  * 大于一个参数: (i,j) => i+j
  * 函数体不用大括号: 默认返回结果
  * 函数体如果有多个语句, 需要用{}包围,若有需要返回的内容,需要手动返回
* 使用场景: 多用来定义回调函数

* 箭头函数的特点:
    1、简洁
    2、箭头函数没有自己的this,箭头函数的this不是调用的时候决定的,而是在定义的时候处在的对象就是它的this
    3、扩展理解: 箭头函数的this看外层的是否有函数,
        如果有,外层函数的this就是内部箭头函数的this,
        如果没有,则this是window。
-->
<script type="text/javascript">

</script>

</body>
</html>

与外层函数的this一样,常规函数this谁调用它this就是谁

外面是箭头函数,此时的this就是window

本质在window下定义的箭头函数

(12. 尚硅谷_ES6_三点运算符&)

12. 尚硅谷_ES6_三点运算符&

argument是伪数组不具备数组一般属性,value可以遍历比arguments方便

少了一个占位符2

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>07_3点运算符</title>
</head>
<body>
<!--
* 用途
1. rest(可变)参数
    * 用来取代arguments 但比 arguments 灵活,只能是最后部分形参参数
    function fun(...values) {
        console.log(arguments);
        arguments.forEach(function (item, index) {
            console.log(item, index);
        });
        console.log(values);
        values.forEach(function (item, index) {
            console.log(item, index);
        })
    }
    fun(1,2,3);
2. 扩展运算符
  let arr1 = [1,3,5];
  let arr2 = [2,...arr1,6];
  arr2.push(...arr1);
-->
<script type="text/javascript">


</script>

</body>
</html>

把2,3,4,5放在1,6中间

...arr不是一个数组

(13. 尚硅谷_ES6_形参默认值&)

13. 尚硅谷_ES6_形参默认值&

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>08_形参默认值</title>
</head>
<body>
<!--
    * 形参的默认值----当不传入参数的时候默认使用形参里的默认值
    function Point(x = 1,y = 2) {
    this.x = x;
    this.y = y;
    }
-->
<script type="text/javascript">


</script>

</body>
</html>

(14. 尚硅谷_ES6_promise对象原理详解&)

14. 尚硅谷_ES6_promise对象原理详解&

Promise是同步执行,同步阻塞,同步函数中执行异步操作

成功调用resolve(),.then()有两个回调,根据promise返回的状态执行成功的回调与失败的回调

根据状态码成功resolve返回第一个回调

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>11_Promise对象</title>
</head>
<body>
<!--
1. 理解:
  * Promise对象: 代表了未来某个将要发生的事件(通常是一个异步操作)
  * 有了promise对象, 可以将异步操作以同步的流程表达出来, 避免了层层嵌套的回调函数(俗称'回调地狱')
  * ES6的Promise是一个构造函数, 用来生成promise实例
2. 使用promise基本步骤(2步):
  * 创建promise对象
    let promise = new Promise((resolve, reject) => {
        //初始化promise状态为 pending
      //执行异步操作
      if(异步操作成功) {
        resolve(value);//修改promise的状态为fullfilled
      } else {
        reject(errMsg);//修改promise的状态为rejected
      }
    })
  * 调用promise的then()
    promise.then(function(
      result => console.log(result),
      errorMsg => alert(errorMsg)
    ))
3. promise对象的3个状态
  * pending: 初始化状态
  * fullfilled: 成功状态
  * rejected: 失败状态
4. 应用:
  * 使用promise实现超时处理

  * 使用promise封装处理ajax请求
    let request = new XMLHttpRequest();
    request.onreadystatechange = function () {
    }
    request.responseType = 'json';
    request.open("GET", url);
    request.send();
-->

<script type="text/javascript">


</script>

</body>

</html>

 

get请求的参数是查询字符串req.query.id,post请求参数在请求体  req.query.body

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function (req, res, next) {
    res.render('index', {title: 'Express'});
});

router.get('/news', function (req, res, next) {
    res.set('Access-Control-Allow-Origin', '*');
    var id = req.query.id;
    console.log('/news id='+id);
    var news = {
        id: id,
        title: 'news title1...',
        content: 'news content1...',
        commentsUrl: '/comments?newsId='+id
    };
    res.json(news);
});


router.get('/comments', function (req, res, next) {
    res.set('Access-Control-Allow-Origin', '*');
    console.log('/comments newsId=' + req.query.newsId);
    var newsId = req.query.newsId;
    var comments = [
        {
            id: 1,
            content: 'comment content1111...',
            newsId : newsId
        },
        {
            id: 2,
            content: 'comment content2222...',
            newsId : newsId
        }];
    res.json(comments);
});

module.exports = router;

bin/www

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('es_server:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

可以修改为同步方式

onreadystatechange发送一次请求调用4次,有5种状态码,初始化为0,发送send为1,200和304成功状态码

获取的data是字符串,需要变为一个对象

可以继续链式调用

(16. 尚硅谷_ES6_Symbol属性介绍_01&)

16. 尚硅谷_ES6_Symbol属性介绍_01&

Symbol是原始数据类型,同一个Symbol调用属性值都是唯一值

对象实例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Symbol</title>
</head>
<body>
  <!--
    前言:ES5中对象的属性名都是字符串,容易造成重名,污染环境
    Symbol:
      概念:ES6中的添加了一种原始数据类型symbol(已有的原始数据类型:String, Number, boolean, null, undefined, 对象)
      特点:
        1、Symbol属性对应的值是唯一的,解决命名冲突问题
        2、Symbol值不能与其他数据进行计算,包括同字符串拼串
        3、for in, for of遍历时不会遍历symbol属性。
      使用:
        1、调用Symbol函数得到symbol值
          let symbol = Symbol();
          let obj = {};
          obj[symbol] = 'hello';
        2、传参标识
          let symbol = Symbol('one');
          let symbol2 = Symbol('two');
          console.log(symbol);// Symbol('one')
          console.log(symbol2);// Symbol('two')
        3、内置Symbol值
          * 除了定义自己使用的Symbol值以外,ES6还提供了11个内置的Symbol值,指向语言内部使用的方法。
          - Symbol.iterator
           * 对象的Symbol.iterator属性,指向该对象的默认遍历器方法(后边讲)

  -->


<script type="text/javascript">
    

</script>

</body>
</html>

(17. 尚硅谷_ES6_Symbol属性介绍_02&)

17. 尚硅谷_ES6_Symbol属性介绍_02&

Symbol不能被for in遍历出来

(18. 尚硅谷_ES6_iterator接口机制_01&)

18. 尚硅谷_ES6_iterator接口机制_01&

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Iterator遍历器</title>
</head>
<body>
  <!--
    概念: iterator是一种接口机制,为各种不同的数据结构提供统一的访问机制
    作用:
      1、为各种数据结构,提供一个统一的、简便的访问接口;
      2、使得数据结构的成员能够按某种次序排列
      3、ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。
    工作原理:
      - 创建一个指针对象(遍历器对象),指向数据结构的起始位置。
      - 第一次调用next方法,指针自动指向数据结构的第一个成员
      - 接下来不断调用next方法,指针会一直往后移动,直到指向最后一个成员
      - 每调用next方法返回的是一个包含value和done的对象,{value: 当前成员的值,done: 布尔值}
        * value表示当前成员的值,done对应的布尔值表示当前的数据的结构是否遍历结束。
        * 当遍历结束的时候返回的value值是undefined,done值为false
    原生具备iterator接口的数据(可用for of遍历)
      1、Array
      2、arguments
      3、set容器
      4、map容器
      5、String
      。。。
  -->

  <script type="text/javascript">

  </script>
</body>
</html>

arguments伪数组没有数组的一般方法可以使用for of遍历,普通对象没有interator接口

(21. 尚硅谷_ES6_Generator函数简介_01&)

21. 尚硅谷_ES6_Generator函数简介_01&

可暂停执行,生成指针对象,调用next执行内部的逻辑,普通js逻辑不会阻塞

指针执行最后返回函数的返回值,默认undefined

在哪暂停的,就在哪里启动,传入的参数就是返回值

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Generator函数</title>
</head>
<body>

  <!--
   Generator函数
    概念:
      1、ES6提供的解决异步编程的方案之一
      2、Generator函数是一个状态机,内部封装了不同状态的数据,
      3、用来生成遍历器对象
      4、可暂停函数(惰性求值), yield可暂停,next方法可启动。每次返回的是yield后的表达式结果
    特点:
      1、function 与函数名之间有一个星号
      2、内部用yield表达式来定义不同的状态
      例如:
        function* generatorExample(){
          let result = yield 'hello';  // 状态值为hello
          yield 'generator'; // 状态值为generator
        }
      3、generator函数返回的是指针对象(接11章节里iterator),而不会执行函数内部逻辑
      4、调用next方法函数内部逻辑开始执行,遇到yield表达式停止,返回{value: yield后的表达式结果/undefined, done: false/true}
      5、再次调用next方法会从上一次停止时的yield处开始,直到最后
      6、yield语句返回结果通常为undefined, 当调用next方法时传参内容会作为启动时yield语句的返回值。
  -->
<script type="text/javascript" src="./js/jquery-1.10.1.min.js"></script>
<script type="text/javascript">

    
    // 对象的symbol.iterator属性  指向遍历器对象
    // 案例练习
    /*
    * 需求:
    * 1、发送ajax请求获取新闻内容
    * 2、新闻内容获取成功后再次发送请求,获取对应的新闻评论内容
    * 3、新闻内容获取失败则不需要再次发送请求。
    * 
    * */ 

</script>


</body>
</html>

返回每一个yield对应的状态

$.get返回url,保证成功调用next()又能看到url

传递url,写在getNews中的SX.next()保证了上一次请求已经成功

传递的'aaa'就是返回的url

(24. 尚硅谷_ES6_async函数详解及应用_01&)

24. 尚硅谷_ES6_async函数详解及应用_01&

以同步流程表达异步操作

遇到await不会向下执行,直到等待完异步才会继续向下执行,await接收promise,async返回值是promise对象

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>async函数</title>
</head>
<body>

<!--
  async函数(源自ES2017)
  概念: 真正意义上去解决异步回调的问题,同步流程表达异步操作
  本质: Generator的语法糖
  语法:
      async function foo(){
        await 异步操作;
        await 异步操作;
      }
  特点:
    1、不需要像Generator去调用next方法,遇到await等待,当前的异步操作完成就往下执行
    2、返回的总是Promise对象,可以用then方法进行下一步操作
    3、async取代Generator函数的星号*,await取代Generator的yield
    4、语意上更为明确,使用简单,经临床验证,暂时没有任何副作用

-->
<script type="text/javascript" src="./js/jquery-1.10.1.min.js"></script>
<script type="text/javascript">

</script>

</body>
</html>

普通函数await返回值就是当前函数执行完毕的返回值

调用成功状态的返回值

上面的异步任务执行成功以后才会执行下面的

返回值data作为resolve的参数

一旦状态为reject失败,后面await不会继续执行

失败会返回result为false

(26. 尚硅谷_ES6_class类使用详解&)

26. 尚硅谷_ES6_class类使用详解&

constructor中的属性都会放到类的原型上

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>12_class</title>
</head>
<body>
</body>
<!--
1. 通过class定义类/实现类的继承
2. 在类中通过constructor定义构造方法
3. 通过new来创建类的实例
4. 通过extends来实现类的继承
5. 通过super调用父类的构造方法
6. 重写从父类中继承的一般方法
-->
<script type="text/javascript">

</script>
</html>

extends实现类型继承,super调用父类构造方法

(27. 尚硅谷_ES6_字符串,数组的扩展&)

27. 尚硅谷_ES6_字符串,数组的扩展

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>01_字符串扩展</title>
</head>
<body>
<!--
1. includes(str) : 判断是否包含指定的字符串
2. startsWith(str) : 判断是否以指定字符串开头
3. endsWith(str) : 判断是否以指定字符串结尾
4. repeat(count) : 重复指定次数
-->
<script type="text/javascript">


</script>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>02_数值扩展</title>
</head>
<body>
<!--
1. 二进制与八进制数值表示法: 二进制用0b, 八进制用0o
2. Number.isFinite(i) : 判断是否是有限大的数
3. Number.isNaN(i) : 判断是否是NaN
4. Number.isInteger(i) : 判断是否是整数
5. Number.parseInt(str) : 将字符串转换为对应的数值
6. Math.trunc(i) : 直接去除小数部分
-->
<script type="text/javascript">


</script>
</body>
</html>

(28. 尚硅谷_ES6_数组方法的扩展&)

28. 尚硅谷_ES6_数组方法的扩展&

form包装完毕就有数组的真方法了


<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>03_数组扩展</title>
</head>
<body>
<button>测试1</button>
<br>
<button>测试2</button>
<br>
<button>测试3</button>
<br>

<!--
1. Array.from(v) : 将伪数组对象或可遍历对象转换为真数组
2. Array.of(v1, v2, v3) : 将一系列值转换成数组
3. find(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素
4. findIndex(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素下标
-->
<script type="text/javascript">


</script>
</body>

</html>

(29. 尚硅谷_ES6_对象方法的扩展&)

29. 尚硅谷_ES6_对象方法的扩展&

obj4是obj3的原型

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>04_对象扩展</title>
</head>
<body>
<!--
1. Object.is(v1, v2)
  * 判断2个数据是否完全相等
2. Object.assign(target, source1, source2..)
  * 将源对象的属性复制到目标对象上
3. 直接操作 __proto__ 属性
  let obj2 = {};
  obj2.__proto__ = obj1;
-->

<script type="text/javascript">


</script>
</body>

</html>

(30. 尚硅谷_ES6_深度克隆_01&)

30. 尚硅谷_ES6_深度克隆_01&

输出wade堆栈模型

数组拷贝方法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>对象的深度克隆</title>
</head>
<body>

<!--
  1、数据类型:
    * 数据分为基本的数据类型(String, Number, boolean, Null, Undefined)和对象数据类型
    - 基本数据类型:
      特点: 存储的是该对象的实际数据
    - 对象数据类型:
      特点: 存储的是该对象在栈中引用,真实的数据存放在堆内存里
  2、复制数据
    - 基本数据类型存放的就是实际的数据,可直接复制
      let number2 = 2;
      let number1 = number2;
    - 克隆数据:对象/数组
      1、区别: 浅拷贝/深度拷贝
         判断: 拷贝是否产生了新的数据还是拷贝的是数据的引用
         知识点:对象数据存放的是对象在栈内存的引用,直接复制的是对象的引用
         let obj = {username: 'kobe'}
         let obj1 = obj; // obj1 复制了obj在栈内存的引用
      2、常用的拷贝技术
        1). arr.concat(): 数组浅拷贝
        2). arr.slice(): 数组浅拷贝
        3). JSON.parse(JSON.stringify(arr/obj)): 数组或对象深拷贝, 但不能处理函数数据
        4). 浅拷贝包含函数数据的对象/数组
        5). 深拷贝包含函数数据的对象/数组
-->
<script type="text/javascript">

</script> 
</body>
</html>

深拷贝

call绑定this,slice截取字符串最后一个可以使用-1

不能指向同一个内存地址,要继续遍历获取的value值

嵌套对象,result为最终克隆的数据

(32. 尚硅谷_ES6_set,map容器详解&)

32. 尚硅谷_ES6_set,map容器详解&

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>05_Set和Map数据结构</title>
</head>
<body>
<!--
1. Set容器 : 无序不可重复的多个value的集合体
  * Set()
  * Set(array)
  * add(value)
  * delete(value)
  * has(value)
  * clear()
  * size
2. Map容器 : 无序的 key不重复的多个key-value的集合体
  * Map()
  * Map(array)
  * set(key, value)//添加
  * get(key)
  * delete(key)
  * has(key)
  * clear()
  * size
-->

<script type="text/javascript">


</script>
</body>

</html>

(33. 尚硅谷_ES6_for of用法详解&)

33. 尚硅谷_ES6_for of用法详解&

数组去重

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>06_for_of循环</title>
</head>
<body>

<!--
for(let value of target){}循环遍历
  1. 遍历数组
  2. 遍历Set
  3. 遍历Map
  4. 遍历字符串
  5. 遍历伪数组
-->

<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>

<script type="text/javascript">



</script>
</body>

</html>

(34. 尚硅谷_ES7_方法介绍&)

34. 尚硅谷_ES7_方法介绍&

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ECMAScript5,6,7从基本语法到高级函数 的相关文章

  • ES6笔记( 五 )- Object

    目录 新增的对象字面量语法 成员速写 方法速写 计算属性名 新增的Object方法 Object is Object assign Object setPrototypeOf Object keys Object values Object
  • 今日笔记:关于Symbol(Symbol.iterator)的使用笔记

  • Js中var,let,const的区别

    一 区别 1 var声明的变量属于函数作用域 而let和const声明的变量属于块级作用域 js作用域在上篇文章 2 var声明的变量存在变量提升 而let和const没有 3 var声明的变量可以重复声明 而在同一块级作用域 let变量不
  • React全家桶-react-router原理实现

    29 9React课程 第05节 react全家桶 第5节 react全家桶 第5节 react全家桶 App js exact精确匹配 可以使用switch独占如果有一个匹配不会继续往下走 一般要与exact配合使用 否则下面不会执行 f
  • 深入理解js数组自定义排序sort

    定义和用法 sort 方法用于对数组的元素进行排序 语法 arrayObject sort function nextValue currentValue code 案例 var arr 5 4 3 2 1 6 7 8 9 倒序 arr s
  • dva.js 知识导图

    JavaScript语言 JavaScript语言 不要用 var 而是用 const 和 let 分别表示常量和变量 不同于 var 的函数作用域 const 和 let 都是块级作用域 模板字符串 模板字符串提供了另一种做字符串组合的方
  • umi框架实战项目

    29 9React课程 第10节 umi框架实战项目 第10节 umi框架实战项目 第10节 umi框架实战项目 Generator是异步解决方案 next执行下一个步骤 可以放在后面也可以放在前面 Yield表示暂停 import Rea
  • ECMAScript5,6,7从基本语法到高级函数

    尚硅谷ES5 6 7教程 01 尚硅谷 ECMAScript入门介绍 01 尚硅谷 ECMAScript入门介绍
  • $.extend插件的开发与代码的编写

    extend插件的开发与代码的编写 extend item 该方法是将item合并到Jquery的全局对象中去 相当于为Jquery全局对象添加了一个静态方法 extend SayHello function value alert hel
  • Set构造函数及其属性

    Set构造函数及其属性 Set的属性 Set prototype Set prototype add 方法 Set prototype clear 方法 Set prototype has 方法 Set prototype delete 方
  • easyui树插件的开发与编写

    easyui树插件的开发与编写 id 1 text Folder1 iconCls icon save children text File1 checked true text Books state open attributes ur
  • 创建Component的方式

    createClass createClass 组件的props state等都是以对象属性的方式组合在一起 其中默认属props和初始state都是返回对象的函数 component component state是通过在构造函数中对th
  • TypeScript之泛型, 模块化, 命名空间, 装饰器(TypeScript完结)

    TypeScript TypeScript中的泛型 泛型的定义 2 泛型函数 3 泛型类 4 泛型接口 泛型 软件工程中 我们不仅要创建一致的定义良好的API 同时也要考虑可重用性 组件不仅能够支持当前的数据类型 同时也能支持未来的数据类型
  • React组件化一

    29 9React课程 第02节 react组件化 第2节 02课react组件化 02课react组件化 02课react组件化 初始化显示constructor构造函数 要使用super 否则没法在内部使用this 2与3之间要对组件进
  • JS模块化教程

    尚硅谷JS模块化教程 当项目功能越来越多 代码量便也会越来越多 后期的维护难度会增大 此时在JS方面就会考虑使用模块化规范去管理 本视频内容涵盖 理解模块化 为什么要模块化 模块化的优缺点以及模块化规范 并且将带领大家学习开发中最流行的co
  • React从入门到实战- 企业级实战项目-宜居一

    2019年最新 React从入门到实战 带 React 企业级实战项目 宜居 React基础知识 React基础知识 1 React 学习前期准备 React 学习前期准备 React 学习前期准备 react环境 工程化 webpack安
  • var、let、const的区别

    var let const的区别 大体区别 const定义的变量不可以修改 而且必须初始化 var定义的变量可以修改 如果不初始化会输出undefined 不会报错 var定义的变量没有块的概念 可以跨酷爱访问 不能跨函数访问 let是块级
  • my97日期控件插件的开发与编写

    my97日期控件插件的开发与编写 扩展一个easyui 的my97 控件 function undefined function create target var state data target my97 opts state opt
  • js扩展jquery对象基元的开发与代码编写

    js扩展jquery对象基元的开发与代码编写 function window undefined var Core function var eventarr var OnPageLoad undefined 获取USER信息 var ge
  • ES6阮一峰入门教程

    地址为 https es6 ruanyifeng com

随机推荐

  • 为什么有了ERP还需要MES,看完这5点你就明白了

    随时MES项目实施的越来越多 涉及的行业也越来越多 我发现MES和ERP这两者的关系在制造企业中总是会被混淆 ERP实施对于制造企业而言是很关键的 它管理着企业的人力 资源 财务 计划等重要信息 当一个企业已经实施了ERP后 实施MES系统
  • linux nginx配置多站点,nginx配置多个站点的方法

    这里以配置2个站点对应2个不同域名为例 操作环境 ubuntu 16 04 64位 nginx 1 10 3 假设 IP地址 111 111 111 111 域名1 example1 com 放在 www example1 域名2 exam
  • 使用maven引入第三方jar包以及打包

    我们知道 Maven 是通过仓库对依赖进行管理的 当 Maven 项目需要某个依赖时 只要其 POM 中声明了依赖的坐标信息 Maven 就会自动从仓库中去下载该构件使用 但在实际的开发过程中 经常会遇到一种情况 对接第三方厂商 人家给了一
  • 人脸库dlib安装

    yum install gcc gcc c cmake pip3 install dlib i https pypi tuna tsinghua edu cn simple
  • mongodb的更新语句

    MongoDB 使用 update 和 save 方法来更新集合中的文档 update 方法 update 方法用于更新已存在的文档 语法格式如下 db collection update
  • STM32--0.96寸OLED显示屏

    1 OLED屏幕介绍 OLED有机发光二极管又称为有机激光显示 OL ED显示技术具有自发光的特性 采用非常薄的有机材料涂层 和玻璃基板 当有电流通过时 这些有机材料就会发光 而且OLED显示屏幕可视角大 功耗低 OL ED由于同时具备自发
  • 基于python的12306自动抢票系统的设计与实现

    铁路售票系统12306网站作为一个广受人们的日常使用工具 受大极大的关注 铁路售票的管理者都主要考虑降低成本 提升售票服务满意度 一年一度的春运和节假日出行高峰期 给众多的出行群众者带来了极大的烦恼 也给用户购买火车票造成了巨大的不方便 本
  • 未来几年学什么设计更有前途?

    设计 是把一种设想通过合理的规划 周密的计划 通过各种感觉形式传达出来的过程 是设计师有目标有计划的进行技术性的创作与创意活动 设计的任务不只是为生活和商业服务 同时也伴有艺术性的创作 它是一个很大范围的概念 如果单问未来几年学什么设计更有
  • 朴素贝叶斯分类器(Naive Bayes Classifiers)

    原文地址 Naive Bayes Classifiers 本文讨论的是朴素贝叶斯分类器 Naive Bayes classifiers 背后的理论以及其的实现 朴素贝叶斯分类器是分类算法集合中基于贝叶斯理论的一种算法 它不是单一存在的 而是
  • 西门子工业无线IWLAN和漏波电缆RCoax的安装与配置方法

    1 目的 安装和配置西门子IWLAN工业无线通信 包括工业无线AP 客户端和RCoax漏波电缆 从而实现两个PLC的无线通信 智能IO设备 博途工控人平时在哪里技术交流博途工控人社群 博途工控人平时在哪里技术交流博途工控人社群 2 硬件布置
  • 基于Vue + Antd 搭建自己的博客后台管理系统

    博客后台管理 博客前台的项目地址 github com WqhForGitHu 前言 博客后台管理是基于 Vue Antd 实现的 Antd 确实是非常适合中后台应用的开发 有非常多的组件可以使用 非常多的组件可以使用 技术栈 Vue an
  • 将秒数转化为日期、时、分、秒

    1 说明 笔者最近在开发过程中 需要进行时间上的处理的地方比较多 有时候没有处理好导致出现各种的错误 这里主要是讲一下 如何时将秒数的时间转化为 yyyy MM dd HH mm ss 的格式 例如 2016 12 04 16 40 23的
  • 全备份、增量备份与差量备份

    基本概念 全备份 做的一个完整备份 差量备份 以上一次的全备份为基本做的备份 增量备份 以上一次全备份或增量备份为基本做的备份 看了概念以后是不是还是一头雾水 呵呵 正常 不过没关系 下面会举例说明 如果版本库不是很大 直接做全备份就好了
  • python--打字练习的成绩判定

    题目 模拟打字练习程序 假设original为原始内容 user Inputs为用户输入的内容 要求 用户输入的内容长度不得大于原始内容长度 若对应位置字符一致 则认为正确 否则 判定输入错误 最后成绩为 正确的字符数量 原始字符串长度 按
  • Jsoup解析Html获取内容

    在做自己的博客时遇到问题 文章列表需要文章内容的第一段作为列表的内容展示 但是编辑采用的是富文本编辑器 内容为html格式 这是上网搜到Jsoup可以解析html 希望能帮到需要的小伙陪 p span style font size 6 3
  • msvcr110.dll丢失的解决方法哪种好,推荐这个4种解决方法

    Msvcr110 dll是Microsoft Visual Studio 2012的运行时组件之一 这个DLL文件包含一些用于Windows操作系统的C 函数库 当程序需要这些函数时 它们会被加载到内存中 以便程序可以使用它们 当计算机提示
  • 程序员挣够了钱,到中年失业真的很可怕吗?

    最近一刷知乎全部都是大龄程序员失业危机 真的有这么可怕吗 程序员35岁就真的到了瓶颈期 我不这么认为 挣够了钱 当然不可怕 问题是没挣够啊 按题主的算法是 大城市薪资1w以上 45岁失业 工作20年可以挣够钱 那我们现在来算一下 20年12
  • 《HarmonyOS物联网应用开发》课程上线

    讲师简介 51CTO的学员们 大家好 我是51CTO学院的新晋讲师许思维 目前就职于江苏润和软件股份有限公司 任高级软件工程师一职 同时也是企业内训讲师 我擅长的领域包括Linux系统编程 单片机编程 以及Android App和Andro
  • multiple definition of `qMain(int, char**)'错误该怎么处理!

    原因 在 pro文件中重复使用了一些文件
  • ECMAScript5,6,7从基本语法到高级函数

    尚硅谷ES5 6 7教程 01 尚硅谷 ECMAScript入门介绍 01 尚硅谷 ECMAScript入门介绍