js|ES6部分新增
简单介绍一点es6的新增内容。
ES6
新增变量和声明方式:
- let
- const
- class 类
- import 引入模块
- export 暴露接口
不存在变量提升const:
不允许重复声明
let具有块级作用域:花括号就是作用域
暂时性死区
const保存的固定的内容不是值,而是地址对字符串的新增
const的变量,不允许地址被修改
str.codePointAt();
String.fromCodePoint(20013);
//字符的拼接:
console.log(`今天天气"${a+"哈哈哈"}"`);
//重复功能重复字符串;
'x'.repeat(3)//xxx;
//判断字符串中是否存在某个字符串
var s = 'Hello world!';
s.startsWith('Hello')// true以参数开头
s.endsWith('!')// true以参数结尾
s.includes('o')// true包括参数;
for-of 遍历值
对正则的新增
ES6对正则表达式添加了u修饰符,含义为“Unicode模式”,用来正确处理大于\uFFFF的Unicode字符。也就是说,会正确处理四个字节的UTF-16编码。
ES6添加了y修饰符和g类似,不过y 修饰符在下次匹配的时候需要紧跟上次匹配成功之后的结果匹配,而g则是全局匹配;
exec() 方法在匹配全局对象的时候, 多次匹配会在上一次结束的地方继续匹配;
var str = "123hfgh789hgf";
// ↑
var reg = /\d+/g;
console.log(reg.exec(str));
reg.lastIndex = 0;
console.log(reg.exec(str));
reg.lastIndex = 0;
console.log(reg.exec(str));
console.log(reg.exec(str));
console.log(reg.exec(str));
箭头函数 ()=>{}
类似于无名函数
- 不允许直接存在,值存在
- 值存在,赋值式
- 实参,回调函数
- 事件处理函数
- 匿名函数的函数体
所有函数都可以被new执行,但是,除了箭头函数
箭头函数没有自己的执行上下文
需要使用上层函数的执行上下文
箭头函数会自动绑定外层this
var fn = a=>({a:10,b:20});
function fn(){
setTimeout(()=>{
console.log(this)
}, 1000);
}
var obj = {
a:10,
fn:fn
}
obj.fn()
缺点:
第一: 箭头函数是不能new的,它的设计初衷就跟构造函数不太一样
第二: 箭头函数如果要返回一个JSON对象,必须用小括号包起来 var test = ()=>({id:3, val=20})
第三: 对代码的可读性伤害太大
总结:
在回调函数的时候,偶尔用用箭头函数,还是不错的 [2,3,9,14,8,29,93,30].sort( (a,b) => a-b );
新增赋值方式 – 解构赋值
数组的解构:按照顺序一一对应,没有对应,为undefined
var arr = ["hello",3.1415,true];
var [c,b,a,d,e,f] = arr;
console.log(a)
console.log(b)
console.log(c)
console.log(d)
console.log(e)
console.log(f)
字符的解构:按照顺序一一对应,没有对应,为undefined
var str = "hi";
var [a,b,c,d] = str;
console.log(a)
console.log(b)
console.log(c)
console.log(d)
对象的解构:按照键值一一对应,没有对应,为undefined
var obj = {
name:"admin",
age:18,
sex:1
}
var {sex,age,name,like} = obj;
console.log(name)
console.log(age)
console.log(sex)
console.log(like)
参数的解构:
function fn({name,age}){
// name
// age
}
fn({name:"admin",age:19})function fn(){
return ["hello","world"]
}
var [a,b] = fn();
var a = 10;
var b = 20;
var [b,a] = [a,b];
console.log(a,b)
新增数据类型 --symbol
标志、标记、标识、记号
做一个状态记号
类似于字符,但是不是字符
拥有字符的特点:具体的值,值类型
自身稳定,不会于任何其他值混淆
语义化
字典量
var s1 = Symbol("a");
console.log(s1);
console.log(typeof s1);
var s1 = Symbol("a");
var s2 = Symbol("a");
console.log(s1 == s2) //false
console.log(s1 == s1) //true
新增的数据结构–set和map
set:数组和对象的映射或抽象
特点:没有重复值
set集合没有提供下标方式的访问,因此只能使用for-of来遍历。
var s = new Set(["hello",7,"world",7,"world",7,"world"]);
console.log(s);
console.log(typeof s);
console.log(s[0])
console.log(s[1])
console.log(s[2])
console.log(s.length)
for(var i of s){
console.log(i)
}
var s = new Set();
s.add(3)
s.add(4)
s.add(5)
s.add("3")
console.log(s)
for(var i of s.keys()){
console.log(i)
}
for(var i of s.values()){
console.log(i)
}
for(var i of s.entries()){
console.log(i)
}
【js|ES6部分新增】map
var m = new Map();
m.set("name","admin")
m.set("age",18)
console.log(m);
//Map(2) {"name" => "admin", "age" => 18}
console.log(typeof m);
//objectconsole.log(m.get("name"))//admin
console.log(m.get("age"))//18console.log(m.name)//undefined
console.log(m.age)//undefinedfor(var i of m){
console.log(i)
}
for(var i of m.keys()){
console.log(i)
}
for(var i of m.values()){
console.log(i)
}
for(var i of m.entries()){
console.log(i)
}
推荐阅读
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- (二)ES6第一节变量(let|(二)ES6第一节变量(let,const)
- 六步搭建ES6语法环境
- 生命中最迷人的部分轻拿轻放
- 生活中的遇见
- 如何选择营期时长
- Excel|Excel 2013 新增功能之瞬间填充整列数据!
- 每日PDCA
- 在失去中,看见得到的部分!
- 恐龙是他梦的一部分