云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

ES6 新增了哪些新特性 (二)(es6新增了什么)

jxf315 2025-05-02 11:11:27 教程文章 8 ℃

关于 ES6规范及新特性

对象字面量申明增强

ES6 之前,申明对象字面量方式其实就是直接定义一个json对象.存在的仅仅是对象的属性和值.

ES6 之后,对象字面量被扩展支持直接设置原型,简洁属性赋值和方法,超类调用,这也让对象字面量和类声明的关系更密切,并让基于对象的设计更便利

ES6之前:

var obj = {

__proto__: theProtoObj,

// 下面的写法不会设置内部原型

'__proto__': theProtoObj,

// 方法

toString() {

// 调用父对象的方法

return "d " + super.toString();

},

// 属性名是一个表达式

[ "prop_" + (() => 42)() ]: 42

};

proto: theProtoObjproto属性需要原生支持,这一属性在ECMAScript前一个版本中一度被废弃,目前 ES6 再度使用起来.

'proto': theProtoObj上面这种设置内部原型的方法不会被支持, proto 并不是一个字符串,所以这种字符串设置方式不会被支持.

对象字面量支持方法调用:toString(){//调用父级对象的方法return "d " + super.toString();}

//属性名支持表达式[ “prop_” + (() => 42)() ]

模版字符串

允许对字符串构建的定制化,避免注入攻击或其他需求

// 普通字符串

`This is a string.`

// 多行字符串

`This is

a string.`

// 字符串中嵌入变量

var name = "world", time = "today";

`Hello ${name}, how are you ${time}?`

// 模版标签

String.raw`In ES5 "\n" is a line-feed.`

// 下面构造一个HTTP请求头,来解释差值替换和构造

GET`http://foo.org/bar?a=${a}&b=${b}

Content-Type: application/json

X-Credentials: ${credentials}

{ "foo": ${foo},

"bar": ${bar}}`(myOnReadyStateChangeHandler);

函数默认参数

ES6 终于支持参数默认值了

function f(x, y=12) {

// 如果不传递y或传递undefined,y的值为12

return x + y;

}

f(3) == 15

Let

它的功能是定义变量,当时和 var 有很大区别.let 定义的变量只有在它所在的代码块内有效.它解决了一个问题,javascript 存在很大的缺陷就是没有作用域,所以定义的变量互相覆盖.

Let 的出现成功解决了这个问题.

function test() {

{

let m{

m=100;

}

// let变量可以再次赋值

m=200;

// 在块作用域中重复声明将会报错,如下

let x = 300;

}

}

Const

const也用来声明变量的关键字,但是它声明的是常量.在 let 代码块中不能使用 Const 申明常量

如下代码是不允许的:

function test() {

{

let x;

{

// 块作用域

const x = "test"; //不允许这样代码块中的常量定义

}

}

}

支持换行

如果没有模板字符串,对于一个长字符串,你大概要写成这样的:

var sql =

"SELECT * FROM Users " +

"WHERE FirstName='Mike' " +

"LIMIT 5;"

当然也可以这样通过数组的形式实现:

var sql = [

"SELECT * FROM Users",

"WHERE FirstName='Mike'",

"LIMIT 5;"

].join(' ')

现在 ES6 支持这样的方式实现换行:

let sql = `

SELECT * FROM Users

WHERE FirstName='Mike'

LIMIT 5;

`

出自:一介布衣博客

最近发表
标签列表