您的位置: 翼速应用 > 业内知识 > web前端 > 正文

关于es6中的常见变量定义方法分享

在es5中只给大家提供了两种声明变量的方法,var和function,而ES6 除了添加了let和const命令,还有两种声明变量的方法:import命令和class命令。下面一起来看一下这些常见的声明变量方法,即var / function / let / const / import / class。


关于es6中的常见变量定义方法分享


关于es6中的常见变量定义方法分享


var命令


var a ;  //undefined
var b = 1;


●  var 声明的变量作用域是全局的或者是函数级的。


●  var定义的变量可以修改,如果不初始化会输出undefined,不会报错。


●  var声明的变量在window上,用let或者const去声明变量,这个变量不会被放到window上。


●  很多语言中都有块级作用域,但JS没有,它使用var声明变量,以function(也可以说用大括号‘{ }’)来划分作用域,但大括号“{ }”却限定不了var的作用域,因此用var声明的变量具有变量提升的效果。


function命令


function add(a) {
  var sum = a + 1;
  return sum;
}


●  声明了一个名为 add的新变量,并为其分配了一个函数定义。


●  { }之间的内容被分配给了 add。


●  函数内部的代码在声明是不会被立即执行,只是存储在变量中以备将来使用。


cosnt命令


const a;     //报错,必须初始化
const b = 1; 
b = 2;      //报错,TypeError: Assignment to constant variable.


●  const定义一个常量,且必须初始化。const关键字声明的常量的指针不能发生改变。这里说的是常量的指针不能发生改变,但指针所指向的内存空间的值是可以发生变化的,例如:


const obj = {};
obj.n = 123;
obj; // { n: 123 }
obj = { x: 1 }; // TypeError: Assignment to constant variable.


  ○  const声明了一个名为obj的对象,obj指针指向一个对象,在对象中添加属性,是在该对象的数据里添加数据,而没有改变obj中存放的指向该对象的地址,所以是可以执行成功的,而对obj重新赋值的操作则改变了obj的指针指向,故而操作失败,抛出错误。


  ○  对于基本类型也是同样,因为基本类型的数据直接就存放在栈中,常量名直接指向这个地址上的数据,一旦改变值,就会导致指针地址发生改变,所以造成了无法改变值的假象。


●  该变量是个全局变量,或者是模块内的全局变量,拥有块级作用域。


●  如果一个变量只有在声明时才被赋值一次,永远不会在其它的代码行里被重新赋值,那么应该使用const,但是该变量的初始值有可能在未来会被调整(常变量)。


●  const定义的变量,一般在require一个模块的时候用或者定义一些全局常量。


●  常量不能和它所在作用域内其它变量或者函数拥有相同名称。


let命令


需要”javascript 严格模式”:‘use strict’;


不存在变量提升:


console.log(a);  //ReferenceError: a is not defined
let a = "apple";
  
console.log(b);  //undefined
var b = "banana";


  ○  变量 b 用 var 声明存在变量提升,所以当脚本开始运行的时候,b 已经存在了,但是还没有赋值,所以会输出 undefined。


  ○  变量 a用 let 声明不存在变量提升,在声明变量 a 之前,a 不存在,所以会报错。


不允许重复声明:


let a = 1;
let a = 2;
var b = 3;
var b = 4;
a  // Identifier 'a' has already been declared
b  // 4


  ○  let只能声明一次,var可以声明多次。


块级作用域(即只在一个{ }中有效):


{
  let a = 0;
  a   // 0
}
a   // 报错 ReferenceError: a is not defined


  ○  函数内部使用let定义后,对函数外部无影响。


可以在声明变量时为变量赋值,默认值为undefined,也可以稍后在脚本中给变量赋值,在声明前无法使用(暂时死区):


let a;
console.log(a);    //  undefined
console.log(b);   // ReferenceError: b is not defined
let b = 1;
a = 2;
console.log(a);     // 2


※注意:在ES6 中明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 PI 之前使用它会报错。


var PI = "a";
if(true){
  console.log(PI);  // ReferenceError: PI is not defined
  const PI = "3.1415926";
}


import命令


import用于加载文件,在大括号接收的是一个或多个变量名,这些变量名需要与你想要导入的变量名相同。


举个栗子:如果想要导入action.js文件中的某一个变量,这个变量里保存了一段代码块,所以要写成:import { Button } from 'action',这个时候,你就从action.js中获取到了一个叫 Button 的变量,既然获取到了,你就可以对Button里的代码猥琐欲为了


如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名,比如:


import { NewButton as Button } from 'action.js';


上面的代码表示从action.js文件中,获取一个变量名称叫做Button的代码段,然后你又声明了一个变量 NewButton ,将 Button 保存在 NewButton


class命令


在es5中我们是使用构造函数实例化出来一个对象,那么构造函数与普通的函数有什么区别呢?其实没有区别,无非就是函数名称用首字母大写来加以区分,这个不用对说对es5有了解的朋友都应该知道。


但是es5的这种方式给人的感觉还是不够严谨,于是在es6中就换成了class,就是把es5中的function换成了class,有这个单词就代表是个构造函数,然后呢对象还是new出来的,这一点并没有变化。


类的使用


从里面的代码我们可以看到除了function变成了class以外,其它的跟es5一样:


class Coder{
    name(val){
        console.log(val);
    }}
 let shuang= new Coder;shuang.name('shuang');


类的传参


在es6中的对象的属性都是写在constructor里面,方法都是在原型身上。在这里面的代码用constructor约定了两个参数,然后用add()方法把参数相加,这个地方跟以前不太一样,所以需要多注意一下。


class Coder{
    name(val){
        console.log(val);
        return val;
    }
 
    constructor(a,b){
        this.a=a;
        this.b=b;
    }
  
    add(){
        return this.a+this.b;
    }}
 let shuang=new Coder(1,2);console.log(shuang.add());


class的继承用extends:


class shuang extends Coder{
 }
 let shuang=new shuang;shuang.name('Angel爽');


以上就是关于es6中的常见变量定义方法之分享,翼速应用平台内有更多关于es6的相关资讯,欢迎查阅!


我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题