饮冰三年-人工智能-Python-46 Python之 初识ECMAScript6

一、ECMAScript与JavaScript 的关系

前者是后者的规格,后者是前者的一种实现。在日常场合,这两个词是可以互换的。

二、let和const命令

1、let与var

  var:变量提升 与 let:块级作用域 

<script>
    console.log(a)  //输出结果: undefined
    console.log(b)  //直接报错: Uncaught ReferenceError: Cannot access ‘b‘ before initialization
    var a = "Hello,World";
    let b ="Hello,ECMA6"
</script>

var变量提升

<script>
    {
        var a = "Hello,World";
        let b = "Hello,ECMA6"
    }
    console.log(a)  //输出结果: Hello,World
    console.log(b)  //直接报错: Uncaught ReferenceError: b is not defined
</script>

let块级作用域

{
        var a = "Hello,World"
        var a = "Hello,ECMA6"
        console.log(a)  //输出结果: Hello,ECMA6
    }

var同一变量可以重复定义,后者覆盖前者

{
        let b = "Hello,World";
        let b = "Hello,ECMA6"
        console.log(b)  //报错:Uncaught SyntaxError: Identifier ‘b‘ has already been declared
    }

let同一变量名不可以重复定义

    let n=5
    if(true){
        let n =10;
    }
    console.log(n) //输出结果: 5

let同一变量不同块之间可以重复定义,但是各个块之间值不共同

<script>
var a=[]
for (let i = 0; i < 5; i++) {
    a[i]=function () {
        console.log(i)
    }
}
var b=[]
for (var i = 0; i < 5; i++) {
    b[i]=function () {
        console.log(i)
    }
}
a[0]()  //0
b[0]()  //5
</script>

一道美丽的题

2、const

  1. 没有变量提升(与let类似)
  2. 同样存在块级作用域(与let类似)
  3. 不能重复定义(与let类似)
  4. 定义时候必须赋值
  5. 定义之后不能修改

    <script>
        var a;
        let b;
        // const C; //直接报错:Missing initializer in const declaration
        const C = 3.1415;
        //C = 4; //直接报错: Uncaught TypeError: Assignment to constant variable.
        // const C = 5;//直接报错: Uncaught SyntaxError: Identifier ‘C‘ has already been declared
        console.log(a, b, C) //输出结果:undefined undefined 3.1415
    </script>

    const

三、变量的解构赋值

解构(Destructuring):从数组和对象中提取值,对变量进行赋值

1:数组解构

<script>
    //--------数组解构------------
    var [x, y, z] = [1, 2, 3]
    let [x1, y1, z1] = [1, 2, 3]
    const [x11, y11, z11] = [1, 2, 3]
    console.log(x, y, z) //输出结果:1 2 3  一一对应解构
    console.log(x1, y1, z1) //输出结果:1 2 3  一一对应解构
    console.log(x11, y11, z11) //输出结果:1 2 3  一一对应解构
    var [, , a] = [1, 2, 3]
    console.log(a)//输出结果:3           可以选择性解构
    var [b, ...c] = [1, 2, 3]
    console.log(b, c)//输出结果:1 [2,3]        rest参数解构
    var [d,[[e,f]]] = [1, [[2, 3]]]
    console.log(d,e,f)//输出结果: 1 2 3       深层次解构
    var [g] = []
    console.log(g)//输出结果:undefined
     var [h=1] = []
    console.log(h)//输出结果:1        默认值解构
    // var [i]=undefined;  //直接报错:undefined is not iterable
    var m=1,n=2;
    [m,n]=[n,m]
    console.log(m,n)  //输出结果:2 1         可用于交换两个对象的值
</script>

数组解构

  1. 解构只能用于数组或对象。
  2. 其他原始类型的值(1,‘字符串‘,false,NaN)都可以转换成相应的对象,但是解析不会成功,结果为:undefined
  3. undefined和null不能转为对象,解构会报错。var[x]=null;报错
  4. 可以深层次解构数组
  5. 解构赋值允许指定默认值
  6. 解构赋值不仅适用于var,也适用于let和const
  7. 数组解构可用于交换两个变量值。[y,x]=[x,y]

2:扩展运算符

<script>

    Math.max(...[123, 222, 321, 5]) //等同于  Math.max(123,222,321,5)

    function add(x, y, z) {
        return x + y + z;
    }

    console.log(add(...[10, 20, 30])) //输出结果:60
</script>

扩展运算符

  1. 标识符是三个点(...)
  2. rest参数逆运算,将数组转换为逗号分隔的参数序列

3:对象解构

<script>
    var {x, h, y} = {x: 10, y: 20, z: 30}
    console.log(x, y, h) //输出结果:10 20 undefined
    var {x, h=0, y} = {x: 10, y: 20, z: 30}
    console.log(x, y, h) //输出结果:10 20 0
    var {x,y:[{z}]} = {x: 10, y:[{z: 30}] }
    console.log(x, z) //输出结果:10 30  //嵌套解构

    var x;
    // {x}={x:100} //直接报错 Unexpected token ‘=‘

    var x2;
    ({x2}={x2:100})
    console.log(x2) //输出结果:100
</script>

对象解构

  1. 变量必须与属性同名,等号两边次序可以不一致
  2. 解构同样可以用于嵌套对象
  3. 对象解构也可以指定默认值
  4. 将已经声明的变量用于解构赋值,需要格外小心。注意避免js将{}解释为代码块。

四、字符串

1:模板字符串

<script>
    var str1 = `可以当做普通字符串使用`
    var str2 = `
        第一行文本
        第二行文本
    `
    var x = 1;
    var y = 2;
    var str3 = `${x}+${y}=${x + y}`
    console.log(str1)   //输出结果:可以当做普通字符串使用
    console.log(str2)
    //输出结果:
    /*
           第一行文本
           第二行文本
       */
    console.log(str3) //输出结果:1+2=3
</script>

模板字符串

  1. 用反引号(`)表示
  2. 可以当做普通字符串使用
  3. 可以用来定义多行字符串
  4. 可以在字符串中嵌入标量,需要将变量名写在${}

五、函數

1:默认值函数

 //-----------默认值函数------------------
    function add(x = 0, y = 0) {
        return x + y;
    }

    ret = add(10, 20)
    ret2 = add(30)
    ret3 = add(0, 0)
    console.log(ret, ret2, ret3) //输出结果:30 30 0

默认值函数

 //----------利用参数默认值,可以指定某一个参数不得省略(一道面试题)------------------
    function throwIfMissing() {
        throw new Error("缺少参数!")
    }

    function foo(mustBeProvided = throwIfMissing()) {
        return mustBeProvided;
    }

    // foo() //直接报错: Uncaught Error: 缺少参数

利用参数默认值,可以指定某一个参数不得省略(一道面试题)

2:函数可以New

    //-----------函数可以new------------------
    function Point(x = 0, y = 0) {
        this.x = x;
        this.y = y;
    }

    var point = new Point(10)
    console.log(point) //输出结果:Point {x: 10, y: 0}

函数可以New

3:箭头函数

 //----------箭头函数(相当于简写了{ return })----------------------
    var f = v => v;  //等价于:var f = function(v){return v;}
    //不带参数,或者多个参数,就使用一对圆括号代表参数部分
    var f2 = () => "Hello,World!";//等价于:var f2 = function(){return "Hello,World!";}
    var f3 = (n1, n2) => n1 + n2;  //等价于:var f = function(n1,n2){return n1+n2;}
    //代码块部分多余一条语句,就要使用{ return }
    var f4 =  (n1, n2) =>{n1=n1+1;n2=n2+2;return n1+n2};
      //如果返回的是对象,必须在对象外面加()
    var f5=  (x, y) =>({"x":x,"y":y});
    console.log(f(5),f2(),f3(10,20),f4(10,20))  //输出结果:5 "Hello,World!" 30

箭头函数

  //-----------箭头函数  与    this---------------------
    function func() {
        console.log(this)
    }

    var gunc = () => console.log(this)

    var obj={
        func:func,
        gunc:gunc
    }
    func();  //输出结果:Window
    gunc(); //输出结果:Window

    obj.func() //输出结果:obj      使用时所在对象
    obj.gunc() //输出结果:Window   定义时所在对象

箭头函数与this

  1. 箭头函数体内的this对象,绑定定义时所在的对象,而不是使用定义时所在的对象
  2. 不可以当做构造函数,也就是说,不可以使用new命令
  3. 不可以使用arguments对象,该对象在函数体内不存在

4:单体函数

 //-----------单体函数  ---------------------
    let obje={
        name:‘单体函数‘,
        foo(){
            console.log(this.name)
        }
    }
    obje.foo()  //输出结果:单体函数

单体函数

5:rest参数(...变量名)

   // rest参数
    function add(...args) {
        let sum = 0;
        for (var i of args) {
            sum += i;
        }
        return sum;
    }

    console.log(add(1, 2, 3, 4))

    function add2(x = 0, y = 0, ...kwargs) {
        let sum = x + y;
        for (var z of kwargs) {
            sum += z;
        }
        return sum;
    }

    console.log(add2(x = 1, y = 2, m = 3, n = 4))

rest参数

  1. 类似Python中的*args
  2. rest参数后面不能再有其他参数

六、类

1:类

    class Point {
        //构造函数,
        //this关键字表示实例对象
        constructor(x, y) {
            this.x = x;
            this.y = y;
        }

        toString() {
            return ‘(‘ + this.x + ‘,‘ + this.y + ‘)‘;
        }
    }

    //必须使用new来实例化
    var point = new Point(3, 4)
    console.log(point.toString()) //输出结果:(3,4)

Point类

  1. constructor 构造函数
  2. 必须使用new来实例化

2:继承

<script>
    class Point {
        //构造函数,
        //this关键字表示实例对象
        constructor(x, y) {
            this.x = x;
            this.y = y;
        }

        toString() {
            return ‘(‘ + this.x + ‘,‘ + this.y + ‘)‘;
        }
    }

    //必须使用new来实例化
    var point = new Point(3, 4)
    console.log(point.toString()) //输出结果:(3,4)

    class ColorPoint extends Point {
        constructor(x, y, color) {
            super(x, y)
            this.color = color;
        }

        toString() {
            return this.color + "" + super.toString();
        }
    }

    var colorpoint = new ColorPoint(1, 2, ‘red‘)
    console.log(colorpoint.toString()) //输出结果:red(1,2)

</script>

继承

原文地址:https://www.cnblogs.com/YK2012/p/12207648.html

时间: 2024-10-05 09:37:34

饮冰三年-人工智能-Python-46 Python之 初识ECMAScript6的相关文章

饮冰三年-人工智能-Python-10之C#与Python关系

1:注释 C# 中 单行注释:// 多行注释:/**/ python 中 单行注释:# 多行注释:"""内容""" 2:字符串 C#中 "" 用双引号如("我是字符串") Python中 "我是字符串" '我是字符串' """我是字符串""" '''我是字符串''' 2.1 字符串支持乘法 (特有).表示输出多次 n1 = &q

饮冰三年-人工智能-Python-22 Python初始Django

1:一个简单的web框架 # 导包 from wsgiref.simple_server import make_server #自定义个处理函数 def application(environ,start_response): start_response("200 OK",[('Content-Type','text/html')]) return [b'<h1>Hello,web!</h1>'] httpd = make_server('',8091,ap

饮冰三年-人工智能-Python-20 Python线程

进程:最小的数据单元 线程:最小的执行单元 一: 1:线程1 import threading #线程 import time def Music(): print("Listen Music Begin %s" %time.ctime()) time.sleep(3) print("Listen Music End %s" %time.ctime()) def Game(): print("Play Game Begin %s" %time.c

饮冰三年-人工智能-linux-08 软件包管理

1:软件包存放的位置 media/CentOS_6.9_Final/Packages文件夹下 2.RPM就是Red Hat Package Manger(红帽软件包管理工具)的缩写. 2.1 常用的命令 -i:安装(Install)软件 -u:升级(update)更新 -e:删除(Erase) -v:显示详细的处理信息 -h:查看进度,卸载不能用 -q:查询(query) -qa:显示目前操作系统上安装的全部软件包 安装:rpm -ivh 软件包名1 软件包名2 查询:rpm –qa | gre

饮冰三年-人工智能-Python-11之HelloWor

1:安装不在介绍,下载软件下一步即可,配置环境变量(Python37会默认配置环境变量的) D:\Programs\Python\Python37\Scripts\;D:\Programs\Python\Python37\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\ 表示安装成功! 2:创建一个新的文件 通过解释器,输出 同样,在Linux系统中也可以运行 3:常见的语句

饮冰三年-人工智能-Python-12之利其器pycharm

1:下载.安装.与激活这里不再介绍了.需要注意的是激活时需要修改C:\Windows\System32\drivers\etc\hosts文件 2:工具使用 2.1 HelloWorld  File>>New>>Python File 2.2 模板 file>>Settings>>Editor>>Python Script 2.3 设置字体大小可以通过鼠标滚动快速调节 2.4 显示行号 "右击" 3 快捷键 3.1 print

饮冰三年-人工智能-linux-01通过VM虚拟机安装contes系统

先决条件:VM虚拟机的安装.contes系统的镜像文件 1:创建新的虚拟机 2:下一步,稍后安装操作系统 3:选择对应的系统 4:选择对应的路径 至此虚拟机已经创建完成(相当于买了一台新电脑) 5:编辑虚拟机设置,将准备好的镜像文件放置到虚拟机中 注意:启动虚拟机的时候会报一个错误:这是由于主机没有启用Intel VT-x,修改以后即可正常使用 5:开始安装 跳过检查==选择中文安装提示 选择英文键盘 选择基本存储设备 首次安装忽略所有数据 暂时不配置网络,后期通过命令行设置,直接下一步 选择时

饮冰三年-人工智能-linux-02 初始Linux

参考博客:https://www.cnblogs.com/linhaifeng/articles/6045600.html 1:初始Linux命令 右击,开启终端,或者ctrl+alt[F1-F6]的方式开启终端 普通用户登录后系统的提示符$;root登录后提示符为#: 退出终端:exit: 关闭系统:init 0: Linux命令的基本格式:命令 [选项] [参数] 命令:告诉系统做什么?选项:命令的运行方式.参数:命令操作的是什么 1.1 展示文件 ls -l /boot : ls -a 展

饮冰三年-人工智能-linux-04 vim编辑器

vim的三种模式:命令行模式.编辑模式.扩展模式 1:命令行模式下常见的操作 删除 a):dd 删除光标所在当前行 b):ndd   删除光标所在当前行后的n行 复制 c):yy 复制光标所在当前行 d):nyy 复制光标所在当前行后的n行 粘贴 e):p 粘贴光标所在下一行 f):np   把内容粘贴多次 剪切 g):ddp 先删除,再粘贴 撤销与反撤销 h):u 撤销 i):ctrl+r   反撤销 快速移动光标 j):gg 定位到文件的首行 k):nG   定位到文件的某一行 k):GG