zoukankan      html  css  js  c++  java
  • let和const、var

    let和const、var

    一、var声明的变量会挂载在window上,而let和const声明的变量不会

    1. var a = 100;
    2. console.log(a,window.a); // 100 100
    3. let b = 10;
    4. console.log(b,window.b); // 10 undefined
    5. const c = 1;
    6. console.log(c,window.c); // 1 undefin

    二、let

    用来声明变量,但是所声明的变量只在let命令所在的代码块内有效

      {
        let a=12
        alert(a)//12
      }
      alert(a)//报错 找不到

    let不像var那样会发生变量提升,所以一定要先声明后使用。

      console.log(foo); //undefined
      console.log(bar); //报错
      var foo = 2;
      let bar = 3;

    let不允许在相同作用域内重复声明同一个变量。

       let a=12;   let a=5;//报错   console.log(a)

    
    

    三、const

    const同样可以创建块作用域变量,同样只在声明所在的块级作用域中有效。但其值是固定的,不可更改,只读。

        {
        const a=12;
          alert(a);//12
        }
        alert(a)//报错

    一旦声明变量,就必须立即初始化,不能留到以后赋值。

      //只声明不赋值就会报错,不能使用null占位
      const foo; //报错

    const和let一样没有变量提升,同样不能重复声明。

    如果声明的是复合类型数据,可以修改其属性

      const obj = {a:100};

    obj.name = 'apple';
      obj.a = 10000;
      console.log(obj);  // {a:10000,name:'apple'}
      var a = 100;
      if(1){

         a = 10;

        //在当前块作用域中存在a使用let/const声明的情况下,给a赋值10时,只会在当前作用域找变量a,
        // 而这时,还未到声明时候,所以控制台Error:a is not defined
        let a = 1;
      }

    五、三者之间的区别:

    1. var声明的变量会挂载在window上,而let和const声明的变量不会
    2. var声明变量存在变量提升,let和const不存在变量提升
    3. let和const声明形成块作用域,而var不存在此作用域
    4. 同一作用域下let和const不能声明同名变量,而var可以

    注意:在js解析的时候,优先解析const,因为它不能修改的是栈内存在的值和地址。然后解析let 因为没有块作用域可能底层有处理,最后解析var。

    标签模板

    本质不是模板 而是函数的另一种调用形式

    标签就是事先封好的函数 参数就是后面接的字符串

    alert`hello`

    //等同于

    alert(["hello"])

    ${}作为分隔符 固定的字符串 放进数组里面 ${}里面的变量依次作为后面的参数

    标记模板(函数)的参数:

    参数1 :被变量分割成的字符串数组

    参数2… :变量

    函数的扩展

    函数参数的默认值

    ES6里面可以给参数设置默认值

    1.为了防止报错 不用特地在函数内部处理参数

    2.设置了默认值 即使不传参数 程序也不会报错

    注意:参数是在函数的局部作用域内设置的局部变量 默认是函数内部声明过的 所以不要使用let在函数内部声明

    Symbol

    Symbol 是ES6新引入的一种基本数据类型 表示独一无二的值 是js中的第六种基本数据类型

    基本数据类型:string number boolean undefined null Symbol

    typeof的返回值 string number boolean undefined object function Symbol

    特性

    Symbol函数生成的数据 是唯一的  即便是参数也是不一样的

    • 引入的背景

      • 对象的属性名容易产生命名冲突,为保证键名的唯一性,所以es6引入Symbol数据类型,确保创建的每个变量都是独一无二的。
    • 特点

      • Symbol类型的数据是类似字符串的数据类型,由于Symbol函数返回的值是原始类型的数据,不是对象,所以Symbol函数前不能使用new命令,否则会报错。

      • 可选参数。由于控制台输出不同的Symbol变量时都是Symbol(),所以为了区分,在Symbol变量传入参数进行区分。

    let a1 = Symbol('a1')

    let a2 = Symbol('a2')
    • 用法
    • 定义对象的唯一属性名

    //在对象里用Symbol作为属性名的三种写法
    let name = Symbol()
    //第一种方式:借助数组读取name变量,此时不能用点运算符,点运算符默认后面的参数时字符串
    let a = {}
    a[name] = 'Nick'
    //第二种方式:构造时声明
    let a = {
        [name]:'Nick'
    }
    //第三种Object.defineProperty
    let a = {}
    Object.defineProperty(a,name,{value:'Nick'});
    • 定义常量
    //定义字符串常量
    const name = Symbol('Nick')
  • 相关阅读:
    常用正则表达式(数字、字符、固定格式)
    阿里云serverless使用笔记
    http的get请求与post请求区别
    HTTPS各版本安全策略HTTPS1_1_TLS1_0、HTTPS2_TLS1_0、HTTPS2_TLS1_2
    REST式的web服务
    JAVA Remote Object
    AJAX的核心XMLHttpRequest对象
    SQL中TOP,LIMIT,ROWNUM的用法
    半双工模式和全双工模式
    win7系统网卡驱动正常,网线连接设备正常,但电脑右下角网络图片显示一直在转圈或者显示一个黄色感叹号的解决办法
  • 原文地址:https://www.cnblogs.com/zycs/p/14053018.html
Copyright © 2011-2022 走看看