JS的对象、数组等处理方法:解构
对象方法简写
你可以在定义方法时省略function和 ::
const obj = {
insteadOfThis: function() {
// do stuff
},
youCanDoThis() {
// do stuff
}
}
请注意,以上不是箭头函数,只是对象方法的简写语法。
解构对象
对象解构是获取对象并将其内部属性提取到对象外部变量的一种方法:
const obj = { x: 1, y: 2 }
// 不使用解构语法
const x = obj.x
const y = obj.y
// 使用解构语法
const { x, y } = obj
x // 1
y // 2
// 你也可以在函数参数中使用解构
// 注意这里函数的参数只有一个
function add({ x, y }) {
return x + y
}
add({ x: 3, y: 4 }) // 7
刚开始你可能会有点混乱,因为现在花括号不仅可以用来声明对象,也可以用来根据上下文对其进行解构。
// 如果花括号在等式的右边,那么你正在声明一个对象
const obj = { x: 1, y: 2 }
// 如果花括号在等式左边,那么你正在解构一个对象
const { x } = obj;
解构数组
数组解构的工作原理与对象解构几乎相同,但使用方括号而不是花括号:
const arr = ['michael', 'jackson']
const [first, last] = arr
first // michael
last // jackson
它们之间的另一个区别是对象具有属性名称,因此必须在解构的时候使用这些属性名称。由于数组值是按顺序排列的,并且没有名称,因此,解构的顺序与我们获得的值是相关联的。换句话说,first是解构中的第一个变量,因此它获取数组的第一个值。
对象属性简写
如果属性名称与对象中的变量名称相同,则可以使用属性简写:
// 这里需要写两遍 name
const name = 'Michael'
const person = { name: name }
// 对象属性简写
const person = { name }
...
展开语法
创建对象或数组时,一种从现有对象或数组的属性创建新属性的方法。
// 定义一个person数组
const person = ['Michael', 'Jackson']
// 如果要把 person 数组加到新的 profile 数组里,按下面这么写的话
const profile = [person, 'developer']
// 结果会是数组里包含着一个数组
profile // [['Michael', 'Jackson'], 'developer']
profile[0] // 这是个数组 ['Michael', 'Jackson']
profile[1] // 这是字符串 'developer'
// 现在 我们用 ...展开语法
const profile = [...person, 'developer']
// 结果就变成了
profile // ['Michael', 'Jackson', 'developer']
// 对象也可以用 ...展开语法
const person = { first: 'Michael', last: 'Jackson' }
const profile = { ...person, occupation: 'developer' }
profile // { first: 'Michael', last: 'Jackson', occupation: 'developer' }
...
剩余语法
剩余语法(Rest syntax) 看起来和展开语法完全相同,不同点在于, 剩余参数用于解构数组和对象。从某种意义上说,剩余语法与展开语法是相反的:展开语法将数组展开为其中的各个元素,而剩余语法则是将多个元素收集起来并“凝聚”为单个元素。
const profile = { first: 'Michael', last: 'Jackson', occupation: 'developer' }
const { occupation, ...rest } = profile
occupation // developer
rest // { first: 'Michael', last: 'Jackson' }
剩余语法用于函数参数
function myFunction(first, last, ...rest) {
return rest
}
console.log(myFunction('Michael', 'Jackson', 'Developer', 'California'))
// output: ['Developer', 'California']
JS的对象、数组等处理方法:解构的更多相关文章
- JS DOM对象控制HTML元素详解
JS DOM对象控制HTML元素详解 方法: getElementsByName() 获取name getElementsByTagName() 获取元素 getAttribute() 获取元素 ...
- js遍历对象的属性和方法
js遍历对象的属性和方法 一.总结 二.实例 练习1:具有默认值的构造函数 实例描述: 有时候在创建对象时候,我们希望某些属性具有默认值 案例思路: 在构造函数中判断参数值是否为undefined,如 ...
- (转)Silverlight调用的JS方法返回对象数组的处理方法
最近在做Silverlight应用,需要用Silverlight调用页面中Javascript方法.这 个JS方法返回一个对象数组给Silverlight.对于这个对象数组怎么在Silverlight ...
- JS对象 数组连接 concat() 方法用于连接两个或多个数组。此方法返回一个新数组,不改变原来的数组。 语法 arrayObject.concat(array1,array2,.arrayN)
concat() 方法用于连接两个或多个数组.此方法返回一个新数组,不改变原来的数组. 语法 arrayObject.concat(array1,array2,...,arrayN) 参数说明: 注意 ...
- 从js的repeat方法谈js字符串与数组的扩展方法
js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { ...
- ES6新增语法和内置对象(let,const, Array/String/Set 扩展方法(解构赋值,箭头函数,剩余参数))
1.let ES6中新增的用于声明变量的关键字. let 声明的变量只在所处于的块级有效. 注意:使用 let 关键字声明的变量才具有块级作用域,var 关键字是不具备这个特点的. 1. 防止循环变量 ...
- JS传递对象数组为参数给后端,后端获取
前端JS代码: var conditons = []; var test1 = new Object(); test1.name="1"; test1.id="2&quo ...
- js判断对象数组中是否存在某个对象
1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) arr.ind ...
- JS遍历对象的几种方法
几天前一个小伙伴问我 Object.getOwnPropertyNames() 是干什么用的 平时还真没有使用到这个方法,一时不知如何回答 从方法名称来分析,应该是返回的是对象自身属性名组成的数组 那 ...
- JS 开发中数组常用的方法
大家有没有想过,js数组为什么会有这么多的方法,没错,就是为了不同场景下处理数据的需要,就像设计模式一样,都是为了能更好的处理当前场景的需要. 首先怎么创建一个数组呢, // 两种方式 // 1,构造 ...
随机推荐
- jquery序列帧播放(支持视频自动播放和不是全屏播放)
jquery序列帧播放 这个弊端就是到时候需要升级下带宽 至少10MB 保证不卡.. ae导出序列真的时候 每秒10帧 就是代码每秒播放10张图片 尺寸适当的可以压小点<pre> < ...
- css的块级元素和行级元素
块级元素 概念: 每个块级元素都是独自占一行. 元素的高度.宽度.行高和边距都是可以设置的. 元素的宽度如果不设置的话,默认为父元素的宽度(父元素宽度100%) <address>/ ...
- Python字典 你必须知道的用法系列
本文Python版本为3.7.X,阅读本文之前需了解python字典的基本用法. 介绍 字典(dict)是Python中内置的一个数据结构,由多个键值对组成,键(key)和值(value)用冒号分隔, ...
- Nginx使用反向代理实现负载均衡
Nginx使用反向代理实现负载均衡 yls 2019-9-20 简介 基于docker容器以及docker-compose,所以需要自学docker在linux环境的基本使用 使用两个tomcat作为 ...
- webpack安装与核心概念
安装webpack webpack核心概念:入口.输出.加载器.插件.模块.模式 一.安装webpack 1.安装webpack之前需要安装nodejs环境,在使用nodejs环境自带的包管理工具np ...
- linux与Windows进程控制
进程管理控制 这里实现的是一个自定义timer用于统计子进程运行的时间.使用方式主要是 timer [-t seconds] command arguments 例如要统计ls的运行时间可以直接输入t ...
- Vue2.x与bootsrap-table动态添加元素和绑定事件无效
一.问题: 最近在使用vue与bootstrap-table结合生成表格时,按以前的经验----每列数据可用formatter:function(value,row,index){}进行一些其 ...
- bash:加减乘除(bc、let)
bc *. echo "$2 * $2" | bc > file let 如果只是 let a=1 和 a=1,它们没有区别,但是 let 还可以用于带赋值的运算,例如 le ...
- 11.13的C++##不想写结构,更不爱指针
//2019.11.13 卑微的Loving-Q瞎写的程序 报错请更改VS中的SDL检查// 我要去嗨了,在线卑微 1 #include<iostream> #include<std ...
- sql注入基本原理
SQL注入基本原理 WEB技术发展日新月异,但是徒手拼SQL的传统手艺还是受相当多的开发者亲睐.毕竟相比于再去学习一套复杂的ORM规则,手拼更说方便,直观.通常自己拼SQL的人,应该是有听说过SQL注 ...