正则、数值、数组、对象
一、正则扩展
- 提供了 u 修饰符,对占两个字符特殊字进行正则识别;
1 let result=/𠮷{2}/u.test('𠮷𠮷');
2 console.log(result);
1 let text='xxx_xx_xx_',
2 patt=/x+_/y;
3 console.log(patt.exec(text));
4 console.log(patt.exec(text));
5 console.log(patt.exec(text));
- y 修饰符的 stikcy 属性,用来检测是否存在 y 修饰符
1 console.log(patt.sticky);
1 console.log(patt.flags);
1 let text='x\nyz',
2 patt=/x.+yz/s;
3 console.log(patt.test(text));
1 // ES6 支持修饰符替换,之前的这种写法会直接报错;
2 let regex=new RegExp(/xyz/iu,'g')
3 console.log(regex.flags);
二、数值的扩展
1 console.log(number(value('0b00')));
2 console.log(number(value('0o00')));
3 console.log(number(value('0x00')));
1 非数值为false 数值为true
2 console.log(Number.isFinite(100));
3 NaN为true,其余为false
4 console.log(Number.isNaN(100));
1 console.log(Number.parseInt('5.555a'));
2 console.log(Number.parseFloat('5.555b'));
1 console.log(Number.isInteger('10'));
1 console.log((0.1+0.2+0.3).toFixed(20));
2 console.log(Number.EPSILON);
3 console.log(Number.EPSILON.toFixed(30));
4 console.log((0.1+0.2+0.3)<Number.EPSILON);
1 console.log(2**3); //16 三个2相乘
2 let num=2;
3 num **=5;
4 console.log(num); //32 五个2相乘
三、数组的扩展
-
运算符扩展
1 function add(x,y){
2 return x+y;
3 }
4 console.log(add(...[10,20]));
1 console.log(Math.max(...[1,2,3]));
1 console.log([...[1,2],...[3,4]]);
2.方法的扩展
1 ES6声明数组
2 let items=Array.of(3,2,1);
3 console.log(items);
1 let obj={
2 0:'name',
3 1:'age',
4 2:'gender',
5 length:3
6 };
7 console.log(Array.from(obj));
8 PS:对象转换成数组要求比较严格:
9 (1).key 必须是数值或字符串数字;
10 (2).length 设置长度,而且 key 在范围内;
11 (1).DOM 的 NodeList 集合;
12 let nl=document.querySelectorAll('p');
1 let items=[10,20,30,40,50];
2 console.log(items.find(value=>value>19));
1 let items=[10,20,30,40,50];
2 console.log(items.fill('a',2,3)); //索引2开始 索引3结束
1 let items=[10,20,30,40,50];
2 //从索引 0 开始复制值
3 //然后把值从索引 2 开始粘贴
4 //参数 3 设置结束粘贴索引值
5 console.log(items.copyWithin(2,0));
四、对象的简写
1 function fn(name,age){
2 return{
3 name,age
4 }
5 }
6 console.log(fn('Mr.Lee',100));
1 let obj={
2 fn(){
3 return 'fn'
4 }
5 };
6 console.log(obj.fn());
1 拼装组合属性
2 let obj={
3 // 拼装组合属性
4 ['user'+'Name']:'Mr.Lee',
5 //有空格的情况下
6 ['user' + ' Age'] : 100,
7 //字符串属性
8 'user Gender' : '男'
9 };
10 console.log(obj.userName);
11 console.log(obj['userName']);
12 console.log(obj['user Age']);
13 console.log(obj['user Gender']);
1 //通过变量 myName 动态更改 obj 属性名
2 //问题是当变量值更改了,属性名就失效了
3 let myName = 'name';
4 let obj = {
5 name : 'Mr.Lee'
6 };
7 console.log(obj[myName]);
8 //使用[myName]可计算属性名
9 //实现了真正的动态计算
10 let myName = 'name';
11 let obj = {
12 [myName] : 'Mr.Lee'
13 };
14 console.log(obj[myName]);
1 let obj = {
2 ['f' + 'n']() {
3 return 'fn';
4 }
5 };
6 console.log(obj.fn());
五、对象的新增方法
1 console.log(Object.is(100, '100')); //false,必须恒等
2 console.log(Object.is({}, {})); //false,指向不同
3 console.log(Object.is(+0, -0)); //false
4 console.log(Object.is(NaN, NaN)); //true
5 console.log(NaN === NaN); //false
6 console.log(+0 === -0); //true
1 /...传参,合并所有对象,返回给参数一的目标对象
2 console.log(Object.assign(obj1, obj2, obj3));
3 //第一个对象得到合并后的结果;
4 console.log(obj1);
5
6 // PS: (1).如果属性有相同,后面的源对象内容会覆盖之前的属性值;
7 // (2).如果直接传非对象内容,会转换为对象;
8 // (3).如果传入的是 undefined 和 null 会报错;
1 let obj = {
2 fn() {
3 return 'fn';
4 }
5 };
6 let obj2 = {
7 fn() {
8 return 'fn2';
9 }
10 };
11 //以 obj 对象为原型
12 let f = Object.create(obj)
13 //检测是 obj 是否 f 的原型对象
14 console.log(Object.getPrototypeOf(f) === obj);
15 //输出原型对象的 fn console.log(f.fn());
16 //设置 f 的原型对象为 obj2
17 Object.setPrototypeOf(f, obj2);
18 console.log(Object.getPrototypeOf(f) === obj2);
19 console.log(f.fn());
1 let obj = {
2 fn() {
3 return 'fn';
4 }
5 };
6 let f = {
7 fn() {
8 return super.fn() + ', extend!';
9 }
10 };
11 //设置 obj 是 f 的原型
12 Object.setPrototypeOf(f, obj);
13 console.log(f.fn());
14 //可以再设置以 f 为原型
15 let h = Object.create(f);
16 console.log(h.fn());