es6新特性

本文介绍了ES6中新增的Symbol数据类型,强调其唯一性和创建方式。同时,对比了let和const在变量作用域和声明规则上的差异,以及暂时性死区的概念。最后指出const的真正含义是原始值不可变而非引用值不可变。
摘要由CSDN通过智能技术生成

1,symbol

在ES6之前,我们知道JavaScript支持8种数据类型:Object,String,Boolean,Number,Null,Undefined、Array、Function。现在,ES6新增了一种原始数据类型:symbol,表示独一无二的值,即每个symbol类型的值都不相同。这让我想起了另一个特殊的值:NaN,想一想,他们是不是有一点类似呢!

var sy = Symbol('test');
var sy1 = Symbol('test');
console.log(tepeof sy);   //'symbol'
sy == sy1;   //false
var sy2 = new Symbol('test');   //error : Symbol is not a constructor
创建symbol数据类型的值时,需要给Symbol函数传递一个字符串,并且有一点特殊的是:不能使用new关键字调用它。另外,每个symbol类型值都是独一无二的,即使传递的是相同的字符串。

2,let和const

ES6新增了两个声明变量的关键字:let和const。

他们声明的变量仅在let和const关键字所在的代码块内起作用,即在使用let和const的那一对大括号{}内起作用,也称块级作用域(ES6之前只有函数作用域和全局作用域)。

let和const声明变量不会在预编译过程中有提升行为(在全局声明也不会变成window的属性),且同一变量不能重复声明。所以要使用这类变量,只能在let和const关键字之后使用它们。

let和const关键字还有一个特性:“暂时性死区”,即在使用了该关键字的块级作用域中,其内部使用let和const关键字声明的变量与外部作用域中的变量相互隔绝,互不影响。即使是同名变量。

var a = 1;
{
   console.log(a);   //error Cannot access 'a' before initialization
   let a = 0;
   console.log(a);   //0
}
console.log(a);   //1

const用来声明一个常量,声明时必须赋值,且一旦声明就不能改变。

其实说const变量不能更改是不准确的,请看下面的例子:

const obj = {
    name:'ren',
    age:12
};
obj = {};   //error
obj.sex = male;
consol.log(obj);   //{name:'ren',age:12;sex:'male'}

const声明的如果是一个原始值,那么上面的说法是准确的,如果const声明的是一个引用值,那么更准确的说法应该是一个不能被重新赋值的变量。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值