es6对象字面量增强
相对于ES5,ES6的对象字面量得到了很大程度的增强。这些改进我们可以输入更少的代码同时语法更易于理解。那就一起来看看对象增强的功能。对象字面量简写(Object Literal Shorthand)、对象方法简写(Object Method Shorthand)、计算对象键(Object key)、对象解构(Object Destructuring)。
ES6对象字面量简写
javascript中的对象使用对象字面量很容易创建,现在来使用ES5来创建一个对象,在music中两个对象属性 type和heat,他们的分别也是来之于type和heat。代码如下:
ES5对象字面量
var type = 'rock';
var heat = '50%';
var music = {
type: type,
heat: heat
};
console.log(music); // Object {type: "rock", heat: "50%"}
ES6对象字面量
然而我们现在可以使用ES6的对象重新写这个例子。在ES6中如何你的对象属性名和当然作用域中的变量名相同,那么现在必须要在把这个type或heat书写两次。ES6的对象会自动的帮你完成键到值的赋值。这样看起来代码更优雅也能节省一半的字符输入量。代码如下:
var type = 'rock';
var heat = '50%';
var music = {
type,
heat
};
console.log(music); // Object {type: "rock", heat: "50%"}
ES5返回一个对象
假如我们创建一个函数他做了一些运算然后要返回这个函数中某些完成运算的变量为一个对象(函数返回多个值),比如:type或heat。在ES5中我们是这样写的。
function getMusic() {
var type = 'rock';
var heat = '50%';
// 一些运算
return { type: type, heat: heat };
}
console.log(getMusic().type); // rock
console.log(getMusic().heat); // 50%
ES6返回一个对象
现在使用ES6简洁优雅的重写这个函数返回一个对象,这里还是使用上面的函数,只是在返回对象的时候使用ES6的语法
function getMusic() {
var type = 'rock';
var heat = '50%';
// 一些运算
return { type, heat };
}
console.log(getMusic().type); // rock
console.log(getMusic().heat); // 50%
ES6对象方法简写
对象不仅仅是用来保存数据,他还可以用来保存函数。在ES5中我们也是通过给定一个键然后再给定一个匿名函数或命名函数。代码如下:
ES5对象方法
var type = 'rock';
var heat = '50%';
var music = {
type: type,
heat: heat,
description: function() {
return '当前音乐风格为' + this.type + ',' + this.heat + '都喜欢';
}
}
console.log(music.description()); // 当前音乐风格为rock,50%都喜欢
ES6对象方法
使用ES6语法重写上面的music对象,必须要在写上对象键然后还要写上function关键字。只需要方法名和圆括号再跟上花括号即可。代码如下:
var type = 'rock';
var heat = '50%';
var music = {
type,
heat,
description() {
return '当前音乐风格为' + this.type + ',' + this.heat + '都喜欢';
}
}
console.log(music.description()); // 当前音乐风格为rock,50%都喜欢
ES6对象方法简写和字符串模板
还是使用上面的对象music,我们有一个方法description他返回的是一个字符串,但是字符串的拼接过程可以说是相当吃力的,如果稍微不注意很容易出错。使用ES6的字符串模将完美解决这个问题。字符串模板使用``将字符串包裹起来里面的变量使用${}包裹起来。代码如下:
var type = 'rock';
var heat = '50%';
var music = {
type,
heat,
description() {
return `当前音乐风格为${this.type},${this.heat}都喜欢'`;
}
}
console.log(music.description()); // 当前音乐风格为rock,50%都喜欢'
ES6计算对象键(Keys)
在ES5中对象可以理解为一个关联数组或一个hashmaps。在ES5中创建对象的键就三种object.xx、object['xx']、Object.defineProperty可以用来构建对象的键。在ES6中可以使用更多的方法来创建。
ES6计算对象键
在这次的music对象中,我们要使用一个变量field作为我们对象的键,heat作为这个键的值。代码如下:
var heat = '50%';
var field = 'rock';
var music = {
[field]: heat
}
console.log(music); // Object {rock: "50%"}
在ES5中也可以使用如下代码定义,但是~~额。
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {value: value, enumerable: true, configurable: true, writable: true});
} else {
obj[key] = value;
}
return obj;
}
var heat = '50%';
var field = 'rock';
var music = _defineProperty({}, field, heat);
console.log(music)
ES6对象键计算表达式
可以在对象键的变量上调用方法 wow!
var heat = '50%';
var field = 'Rock and Roll';
var music = {
[field.toLowerCase()]: heat
}
console.log(music); // Object {rock and roll: "50%"}
ES5同样也是可以实现,只是~~
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {value: value, enumerable: true, configurable: true, writable: true});
} else {
obj[key] = value;
}
return obj;
}
var heat = '50%';
var field = 'Rock and Roll';
var music = _defineProperty({}, field.toLowerCase(), heat);
console.log(music); // Object {rock and roll: "50%"}
还可以使用不同的数组方法为我们的对象键赋值,使用[]将会计算对象的键值。代码如下:
let people = [20, 25, 30];
let music = {
people,
[people]: 'They all love rock and roll',
[people.length]: 'object key is 3',
[{}]: 'empty object'
}
console.log(music);
console.log(music.people);
console.log(music['people']);
console.log(music[people]);
console.log(music[people.length]);
console.log(music['[object Object]']);
console.log(music[music]);
/*
Object {3: "object key is 3", people: Array[3], 20,25,30: "They all love rock and roll", [object Object]: "empty object"}
[20, 25, 30]
[20, 25, 30]
They all love rock and roll
object key is 3
empty object
empty object
*/
ES6对象解构
把对象或者数组中的数据取出使用是我们经常要使用的功能,ES6有新的功能让我们快捷拆分对象和数组中的值。在=号右边是要解构的对象或数组,=号左边是要接收创建的变量。代码如下:
对象解构1
=号左边的类型要和右边对应,比如右边是一个对象类型则左边也需要使用对象字面量包裹。右边是数组则左边也需要使用数组包裹。
let music = {
type: 'rock',
heat: '50%'
};
let { type, heat } = music;
console.log(type, heat); // rock 50%
数组解构
let people = [20, 25, 30]
let [young, oldYoung] = people;
console.log(young, oldYoung) // 20 25
ES6对象解构重命名
有时候我们不想使用解构对象中的键来新创建变量,需要解构后重命名为新的变量名。这是可以使用重命名解构语法
let music = {
type: 'rock',
heat: '50%'
}
let { type: newType, heat: newHeat } = music;
console.log(newType, newHeat); // rock 50%
ES6对象解构其他类型
如果在一个对象中的值包含其他的数据类型同样是可以解构出来的。代码如下:
let music = {
type: ['rock', 'pop', 'jazz'],
heat: '50%',
}
let { type, heat } = music;
console.log(type, heat); // ["rock", "pop", "jazz"] "50%"
ES6解构函数参数
这是一个非常实用的功能,可以将传递进来的函数对象参数直接解构为变量,在函数中可以方便调用。这只需要简单的对象解构函数即可完成。代码如下:
function getMusic({ type, heat }) {
console.log(type, heat);
}
getMusic({ type: 'rock', heat: '80%'}); // rock 80%
ES6对象字面量增强总结:
在ES6中新增了很多功能(方便书写理解和避免代码问题)。这里学习了对象字面量简写,不用再书写两次代码。还有对象方法简写也是同样道理。接着是字符串模板,一种更优雅的字符串拼接方式。还有对象键运算,他使用了[]可以为对象键赋值时进行一些运算。最后是ES6的解构语法。利用这些新特性我们的代码将会写的更优雅和易于理解。
参考连接
es6对象字面量增强的更多相关文章
- es6 中增强的对象字面量
http://www.cnblogs.com/Wayou/p/es6_new_features.html 对象字面量被增强了,写法更加简洁与灵活,同时在定义对象的时候能够做的事情更多了.具体表现在: ...
- ES6 - 对象扩展(增强字面量)
/** * 对象的扩展 * * 增强对象字面量 * * 解决问题:缩减代码 */ { /** * 1.属性简表示法 * 变量foo直接写在大括号里面.这时,属性名就是变量名, 属性值就是变量值 */ ...
- ES6入门四:对象字面量扩展与字符串模板字面量
简洁属性与简洁方法 计算属性名与[[prototype]] super对象(暂时保留解析) 模板字面量(模板字符串) 一.简洁属性与简洁方法 ES6中为了不断优化代码,减低代码的耦合度在语法上下了很大 ...
- ES6:字面量的增强写法
以前对象字面量的写法: 属性的增强写法: ES6中可以写成: 方法的增强写法 ES6中可以写成: ~~~~~ END ~~~~~
- ES6躬行记(5)——对象字面量的扩展
一.简洁属性和方法 当创建对象字面量时,如果属性值是与属性同名的已定义的标识符(例如变量.常量等),那么ES6允许省略冒号和属性值,这样就能避免冗余的初始化.下面分别用传统的键值对和最新的简写方式创建 ...
- ES6模板字面量
前面的话 JS 的字符串相对其他语言来说功能总是有限的,事实上,ES5中一直缺乏许多特性,如多行字符串.字符串格式化.HTML转义等.ES6通过模板字面量的方式进行了填补,模板字面量试着跳出自己JS已 ...
- js学习日记-对象字面量
一.对象字面量语法 var person={ name:'小王', age:18, _pri:233 } 成员名称的单引号不是必须的 最后一个成员结尾不要用逗号,不然在某些浏览器中会抛出错误 成员名相 ...
- js中对象字面量
一.对象字面量语法 var person={ name:'小王', age:18, _pri:233 } 成员名称的单引号不是必须的 最后一个成员结尾不要用逗号,不然在某些浏览器中会抛出错误 成员名相 ...
- javascript中对象字面量的理解
javascript中对象字面量与数组字面量 第一部分 我们知道JavaScript中的数据类型有基本数据类型和引用类型,其中Object类型就是非常常用的类型.那么如果创建一个Object类型的实例 ...
随机推荐
- 【Luogu3807】【模板】卢卡斯定理(数论)
题目描述 给定\(n,m,p(1≤n,m,p≤10^5)\) 求 \(C_{n+m}^m mod p\) 保证\(P\)为\(prime\) \(C\)表示组合数. 一个测试点内包含多组数据. 输入输 ...
- [SDOI2015]约数个数和
Sol 首先有个结论 \(\sum_{i=1}^{m}\sum_{j=1}^{n}d(i*j)=\sum_{i=1}^{m}\sum_{j=1}^{n}\sum_{x|i}\sum_{y|i}[gcd ...
- C#程序入门学习
前言: C# (C sharp) 是微软对这一问题的解决方案.C#是一种最新的.面向对象的编程语言.它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft . ...
- WCF使用纯代码的方式进行服务寄宿
服务寄宿的目的是为了开启一个进程,为WCF服务提供一个运行的环境.通过为服务添加一个或者多个终结点,使之暴露给潜在的服务消费,服务消费者通过匹配的终结点对该服务进行调用,除去上面的两种寄宿方式,还可以 ...
- java正则匹配并提取字串
Pattern p = Pattern.compile("\\(.*\\)"); Matcher m = p.matcher("1.2.0(23)"); if( ...
- 关于Android SDK Manager更新速度慢的解决方法
因为我的C盘比较小,android sdk安装在c盘那么他下载的东西也会默认在c盘.所以我选择安装在其他的盘.而且我发现android sdk manager可以开多个窗口,这样的话如果每个窗口都很慢 ...
- 如何为开发项目编写规范的README文件(windows),此文详解
为什么要写这篇博客? 其实我是一个入坑已经半年的程序员,因为不是计算机专业,只能自己摸索,所以我深知博客的重要性.每次我的学习笔记啊,项目的,面试题啊,有的,只要有时间,我肯定上传上来,一方面自己可以 ...
- ASP.NET Core Web 支付功能接入 微信-扫码支付篇
这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET Core SDK ...
- JSP中动态include和静态include区别
静态include(<%@ include file=""%>): 静态include(静态导入)是指将一个其他文件(一个jsp/html)嵌入到本页面 jsp的inc ...
- Spark Kudu 结合
Kudu的背景 Hadoop中有很多组件,为了实现复杂的功能通常都是使用混合架构, Hbase:实现快速插入和修改,对大量的小规模查询也很迅速 HDFS/Parquet + Impala/Hive:对 ...