关于ES6扩展属性
ES6
- let和const
1. let命令- 只在代码块作用域内有效
- 不存在变量提升(不能在申明之前赋值)
- 暂时性死区(在区域内不受外部变量影响)
- 不允许重复申明(在相同代码块区域内)
2. 块级作用域
* let为es6新增了块级作用域 {let a = ...;}
* 函数可以在块级作用域申明,不受外界影响 if(...) { function(){}}
**注:**块级作用域处大括号不能省略。
3. const命令
* 立即初始化,不可改变。
* 类似let于的特性。
* 对于对象,const存储只保持地址不变,对象内属性可变,但是不可给对象重新赋值。**const a = []; a = ['1'];报错**
* Object.freeze方法冻结对象,使内容不可改变。
4. 全局对象
* let命令、const命令、class命令声明的全局变量,不属于全局对象的属性。
- 变量的解构赋值
数组解构
- 写法 var [v1,v2,v3] = [1,2,3];
- let const都支持解构赋值
- 支持“模式匹配” var [a,[b]] = [1,[2]]
- set结构支持 var [a,b] = new set([1,2])
默认值
- 允许默认值 var a[b=2] = [];
- 默认值生效:当赋值不严格等于undefined var a[b=1] = [null]; b//null
- 默认值的惰性, var a[b=function(){}] = [1]; //方法不执行
- 默认值可以引用解构赋值的其他变量,但该变量必须已经声明。var [x=2,y=x] = [1];
对象解构
- var {foo,bar} = {foo:"aa",bar:"bb"};
- 变量名与属性名不一致时 var {foo:l,bar:a} = {foo:"aa",bar:"bb"};
- 对于let和const来说,变量不能重新声明,所以一旦赋值的变量以前声明过,就会报错。let foo; let{foo}={foo:1} //err
({foo}={foo:1}) //成功 大括号不能省略 - 类似于数组可以依靠模式嵌套对象
- 可以指定默认值
- 两个神奇用法:let { log, sin, cos } = Math;
var {0 : first, [arr.length - 1] : last} = arr;
字符串解构
- const [a, b, c, d, e] = 'hello';
- let {length : len} = 'hello'; len //5;
数值和布尔值得解构
- let {toString: s} = 123;
s === Number.prototype.toString // true - null和undefined无法转化成对象,会报错
- let {toString: s} = 123;
函数参数解构
function move({x, y} = { x: 0, y: 0 }) {
return [x, y];
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, undefined]
move({}); // [undefined, undefined]
move(); // [0, 0]
圆括号问题
- 不使用圆括号情况
- 变量声明语句中,不能带有圆括号。
- 函数参数中,模式不能带有圆括号。
- 赋值语句中,不能将整个模式,或嵌套模式中的一层,放在圆括号之中。
- 使用圆括号情况
赋值语句的非模式部分,可以使用圆括号。
- 不使用圆括号情况
用途
- 交换变量的值
- 从函数返回多个值
- 函数参数的定义
- 提取JSON数据
- 函数参数的默认值
- 遍历Map结构
- 输入模块的指定方法
- 字符串的扩展
- 字符的Unicode表示法
'\z' === 'z' // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true - codePointAt()
codePointAt方法会正确返回32位的UTF-16字符的码点。 - String.fromCodePoint()
识别32位码点。 - 字符串的遍历器接口
for...of for(obj of map) - at()
- normalize()
- includes(), startsWith(), endsWith()
- repeat()
'hello'.repeat(2) // "hellohello" - padStart(),padEnd()
补全字符串长度 - 模板字符串
${name}
取变量值 - 实例:模板编译
- 标签模板
- tring.raw()
- 字符的Unicode表示法
- 正则的扩展
- RegExp构造函数
新增加写法:new RegExp(/abc/ig, 'i') 后面的参数会覆盖前面ig - 字符串的正则方法
- u修饰符
- 点子符 /^.$)/u.test('a') //true
- 识别Unicode字符 /\u{61}/u.test('a') //true
- 量词 /a{2}/.test('aa') //true
- y修饰符
粘连匹配,即必须从下一个字符处开始匹配。 - sticky属性
查看是否设置了y修饰符 - flags属性
返回正则表达式修饰符 - RegExp.escape()
转义生成正则模式 - 后行断言
只匹配美元符号之后的数字,要写成/(?<=$)\d+/
- RegExp构造函数
- 数组的扩展
- Array.from()
将对象转化为数组 - Array.of()
将一组值转换为数组 - 数组实例的copyWithin()
将指定位置的成员复制到其他位置 (target, start, end) - 数组实例的find()和findIndex()
//返回第一个找到的值的位置
[1, 5, 10, 15].find(function(value, index, arr) {
return value > 9;
}) // 10 - 数组实例的fill()
填充数组,可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。 - 数组实例的entries(),keys()和values()
遍历map,keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。 - 数组实例的includes()
数组是否包含给定的值。 - 数组的空位
var arr =new Array(3) //[,,]
空位处理不一致尽量不使用
- Array.from()
- 数值的扩展
- 二进制和八进制表示法
二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。 - Number.isFinite(), Number.isNaN()
Number.isFinite()用来检查一个数值是否为有限的(finite)。
Number.isNaN()用来检查一个值是否为NaN。 - Number.parseInt(), Number.parseFloat()
转换为整形和浮点型,成为Number的属性,减少全局性方法,是语言逐渐模块化。 - Number.isInteger()
判断是否为整数。 注: Number.isInteger(3.0) //true - Number.EPSILON
- 安全整数和Number.isSafeInteger()
ES6引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限,Number.isSafeInteger()是用来判断一个整数是否落在这个范围之内。 - Math对象的扩展
新增了17个与数学相关的方法,详细链接Math扩展 - 指数运算符
let a = 2;
a **= 2; // 等同于 a = a * a;
- 二进制和八进制表示法
- 函数的扩展
函数参数的默认值
function log(x, y = 'World')
可以与解构函数一起使用。
函数的length属性,返回没有指定默认值的数量。rest参数
rest参数(形式为“...变量名”),用于获取函数的多余参数扩展运算符
扩展运算符(spread)是三个点(...)。它好比rest参数的逆运算,将一 个数组转为用逗号分隔的参数序列。name属性
函数的name属性,返回该函数的函数名。箭头函数
=>
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作Generator函数。
函数绑定
foo::bar;
// 等同于
bar.bind(foo);
函数绑定运算符是并排的两个双冒号(::),双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。尾调用优化
即在return函数时,不需要对当前函数作用域的值进行保存或关联操作。function factorial(n, total) {
if (n === 1) return total;
return factorial(n - 1, n * total);
}
factorial(5, 1) // 120
function factorial(n) {
if (n === 1) return 1;
return n * factorial(n - 1);
}
factorial(5) // 120
函数参数的尾逗号
ES7有一个提案,允许函数的最后一个参数有尾逗号(trailing comma)。
目前,函数定义和调用时,都不允许有参数的尾逗号。
- 对象的扩展
属性的简洁表示法
var a={x} -> var a={a:a}
var obj = {
class () {}
};// 等同于
var obj = {
'class': function() {}
};属性名表达式
ES6允许字面量定义对象时,用方法二(表达式)作为对象的属性名,即把表达式放在方括号内。方法的name属性
函数的name属性,返回函数名。对象方法也是函数,因此也有name属性。Object.is()
判断两个对象严格相等,与===不同之处在于:一是+0不等于-0,二是NaN等于自身。Object.assign()
Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。属性的可枚举性
属性的遍历
for...in
Object.keys(obj)
...__proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf()
设置、返回原型对象Object.values(),Object.entries()
返回属性值,返回键值对。对象的扩展运算符
Rest解构赋值
扩展运算符Object.getOwnPropertyDescriptors()
返回指定对象所有自身属性(非继承属性)的描述对象。
文章关于扩展方面的总结就到这里,ES6还增加了许多新的特性,详细了解访问: ES6入门
关于ES6扩展属性的更多相关文章
- SQL SERVER中的扩展属性
以前在SQL SERVER建表时,总看到扩展属性,但一直未使用过.今天研究下: 增加扩展属性: 语法: sp_addextendedproperty [ @name = ] { 'property_n ...
- 【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样
申明: - 本文适用于WinForm开发 - 文中的“控件”一词是广义上的说法,泛指包括ToolStripItem.MenuItem在内单个界面元素,并不特指继承自Control类的狭义控件 用过To ...
- ADO.Net(四)——扩展属性和配置文件应用
一.扩展属性 处理:有外键关系时将代号化信息处理成原始文字,让用户可看懂的(粗略解释) 利用扩展属性 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展 ...
- WIN8系统安装软件时提示"扩展属性不一致"的解决方法
单位新添加了两台T440P笔记本电脑,需要安装五笔输入法,同事一直安装不上.开始以为是WIN8系统跟输入法不兼容的问题,怀疑是输入法下载有误.于是直接在输入法官网下载了输入法,问题依旧:扩展属性不一致 ...
- PowerDesigner 16.5对SQL Server 2012 生成数据库时"不支持扩展属性"问题
团队合作设计一套系统数据模型,创建了PDM后,Table.View.Store Procedure等都创建好了,且创建了多个Schema方便管理这些数据库对象,但Table.view.Column等对 ...
- FME中Cass扩展属性转Shp的方法
问题:真受不了CAD中的注记,只能方便显示,难于数据交互.好在Cass把属性信息基本写在扩展属性中,但显示又成问题了.此事难两全!我们通过查看实体属性,需要把宗地界线的扩展属性提取出来.即组码为-3, ...
- SQLServer错误:过程 sp_addextendedproperty,第 xxx 行对象无效。'dbo.xxx.xxx' 不允许有扩展属性,或对象不存在。
上传数据库到虚拟主机,在执行SQL脚本的时候出现以下的错误: 消息 15135,级别 16,状态 8,过程 sp_addextendedproperty,第 37 行 对象无效.'dbo.Messag ...
- 在bash shell中使用getfattr查看文件扩展属性
getfattr用法 用于获取文件扩展属性,返回一系列键值对,参考Linux Man Page. 常用OPTIONS -n name, --name=name Dump the value of th ...
- ADO.net 扩展属性
扩展属性 处理:有外键关系时将代号化信息处理成原始文字,让用户可看懂的(粗略解释) 利用扩展属性 如:users表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在users类里面扩展 ...
随机推荐
- 英语学习APP—百词斩
英语学习APP-百词斩 1.简介: 百词斩是由成都超有爱科技有限公司针对英语学习开发的一款"图背单词软件".软件为每一个单词提供了趣味的配图和例句,让记单词成为一种乐趣. 百词斩覆 ...
- PHP项目中composer和Git的组合使用
highlight: 在国内由于众所周知的原因,composer的package可能无法访问,解决办法是使用中国的全镜像: composer config -g repositories.packag ...
- iOS9 class dump header
获取系统私有API,网上有很多资料总结了一下就三种方式: 使用class-dump可以提取系统私有API列表 使用class-dump+DumpFrameworks.pl,这个可以一次性提取所有系统F ...
- SQL 数据库表标识列初始化 DBCC
把ArimaIndexForecastModel这张表的标识列重置为0,前提是这张表执行过删除操作 示例: dbcc checkident('ArimaIndexForecastModel',res ...
- 二分图带权匹配、最佳匹配与KM算法
---------------------以上转自ByVoid神牛博客,并有所省略. [二分图带权匹配与最佳匹配] 什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和 ...
- 20160206.CCPP体系详解(0016天)
代码片段(01):.指针.c+02.间接赋值.c 内容概要:内存 ///01.指针 #include <stdio.h> #include <stdlib.h> //01.取地 ...
- (转) Python Generators(生成器)——yield关键字
http://blog.csdn.net/scelong/article/details/6969276 生成器是这样一个函数,它记住上一次返回时在函数体中的位置.对生成器函数的第二次(或第 n 次) ...
- a标签包input引起的问题
最近公司中的一个项目中,有一个同事跟我说,他写的输入框不能选中输入内容了,并且光标也不能插入到已写好的文字其他位置. 简化了一下他的代码结构,如下: <a href="javascri ...
- 《Unix网络编程》卷2 读书笔记 第1章-简介
1. 概述 2. 进程.线程与信息共享 Unix进程间的信息共享有多种方式:注意下图中内核的位置 左边的两个进程共享存留于文件系统中某个文件上的某些信息.为访问这些信息,每个进程都得穿越内核. 中 ...
- 【转】这些编程语言程序员工资最高!Java才第四
原文网址:http://tech.hexun.com/2016-07-18/185009761.html 在众多行业中,程序员属于高薪职业.无论是在国外还是国内,程序员的薪金水平普遍高于其他行业的工作 ...