ES6总结--(2)

1.数值拓展

    Number.isFinite(), Number.isNaN()

      与isFinite、isNaN不同,这两个新⽅法只对数值有效, Number.isFinite() 对于⾮数值⼀
律返回 false , Number.isNaN() 只有对于 NaN 才返回 true ,⾮ NaN ⼀律返回
false
Number.isFinite(0.8); // true 
Number.isFinite(NaN); // false 
Number.isFinite(Infinity); // false 
Number.isNaN(NaN) // true 
Number.isNaN(15) // false

    Number.parseInt(), Number.parseFloat()

      ES6 将全局⽅法 parseInt() parseFloat() ,移植到 Number 对象上⾯,⾏为完全
保持不变。
Number.parseInt('12.34') // 12 
Number.parseFloat('123.45#') // 123.45

    Number.isInteger()

     Number.isInteger() ⽤来判断⼀个数值是否为整数。
Number.isInteger(25) // true 
Number.isInteger(25.1) // false

2.对象拓展

    2.1 对象简写

    ES6 允许在⼤括号⾥⾯,直接写⼊变量和函数,作为对象的属性和⽅法。这样的书写更加
简洁。
let name = "terry"
let age = 12; 
let sayHello = function(){ 
  console.log('hello world'); 
} 
let obj = { 
 name,age,sayName,foo(){
 } 
}

    2.2 对象的扩展运算符

    对象中也可以使⽤扩展运算符

    解构赋值

let {name,...other} = { name: 'terry', age: 12, gender: 'male' };
name // 'terry' 
other // {age: 12, gender: 'male'}

   扩展运算符

    对象的扩展运算符( ... )⽤于取出参数对象的所有可遍历属性,拷⻉到当前对象之
中。 对象的扩展运算符等同于使⽤ Object.assign() ⽅法。
let obj = {name: 'terry', age: 12, gender: 'male'} 
let o = {...obj}
o // {name: 'terry', age: 12, gender: 'male'}

   2.3 Object静态方法扩展

     Object.is()
     ⽤于⽐较两个值是否相等,与严格⽐较运算符(===)的⾏为基本⼀致。不同之处只有两个:⼀是+0 不等于 -0 ,⼆是 NaN 等于⾃身。
+0 === -0 //true 
NaN === NaN // false 
Object.is(+0, -0) // false 
Object.is(NaN, NaN) // true
     Object.assign()
    ⽤于对象的合并,将源对象(source)的所有可枚举属性,复制到⽬标对象(target)。
let obj1 = { name: 'terry', age: 13, gender: 'male' }
let obj2 = Object.assign({},obj1) 
obj1 === obj2 // false 
obj1.age = obj.age + 1; 
obj1.age // 14 6 obj2.age // 13
    如果源对象中的对象存在嵌套关系,进⾏浅拷⻉
let o1 = {a:{age:1}}
let o2 = Object.assign({},o1) 
o1 === o2 // false 
o1.a.age = 2 
o2.a.age // 2
    Object.setPrototypeOf()
    为某个对象设置原型
let prototype = { 
 foo(){console.log('foo')}, 
 bar(){console.log('bar')} 
} 
let obj = {} 
Object.setPrototypeOf(obj,prototype)
    Object.getPrototypeOf()
    获取某个对象的原型
Object.getPrototype(obj)
    Object.getOwnPropertySymbols()
    获取指定对象的所有 Symbol 属性名。该⽅法返回⼀个数组,成员是当前对象的所有⽤作
属性名的 Symbol 值。
    Object.keys()
    该⽅法返回⼀个数组,成员是参数对象⾃身的(不含继承的)所有可遍历(enumerable)属性的键名。
let obj = { name: 'terry', age: 14, gender: 'male' }; 
Object.keys(obj) //[ 'name', 'age', 'gender' ]
   Object.values()
    该⽅法返回⼀个数组,成员是参数对象⾃身的(不含继承的)所有可遍历(enumerable)属性的键值。
let obj = { name: 'terry', age: 14, gender: 'male' }; 
Object.values(obj) //[ 'terry', 14, 'male' ]
   Object.entries()
    该⽅法返回⼀个数组,成员是参数对象⾃身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
let obj = { name: 'terry', age: 14, gender: 'male' }; 
Object.entries(obj) //[ [ 'name', 'terry' ], [ 'age', 14 ], [ 'gender', 'male'] ]
   Object.fromEntries()
    该⽅法是entries的逆操作,⽤于将⼀个键值对数组转为对象。
let entries = [[ 'name', 'terry'], ['age', 14], ['gender', 'male']]; 
let obj = Object.fromEntries(entries)

3.数组拓展

    3.1 扩展运算符

     可以看做是rest的逆运算,⽤于将数组中的元素拆分出来

console.log(...[1, 2, 3]) // 1,2,3

    3.2 静态⽅法扩展

      Array.from()
        ⽤于将两类对象转为真正的数组:类似数组的对象和可遍历的对象
let arrayLike = { 
    '0': 'a', 
    '1': 'b', 
    '2': 'c', 
    length: 3 
};
// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c'] 
// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
      Array.of()
       ⽤于将⼀组值,转换为数组。
Array.of(3, 11, 8) // [3,11,8] 
// 模拟实现
function ArrayOf(){ 
 return [].slice.call(arguments);
 }

4.实例方法拓展

      find() 和 findIndex()

       与filter类似,属于数组类型⽅法, find ⽅法⽤于找出第⼀个符合条件的数组成员。它的参数是⼀个回调函数,所有数组成员依次执⾏该回调函数,直到找出第⼀个返回值为 true 的成员,然后返回该成员。如果没有符合条件的成员,则返回 undefined
       findIndex ⽅法的⽤法与 find ⽅法⾮常类似,返回第⼀个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回 -1
[1, 4, -5, 10].find((n) => n < 0) //-5 
[1, 5, 10, 15].findIndex(value => value>9) //2
      fill()
     使⽤给定值,填充⼀个数组。
new Array(3).fill(7) 
// [7, 7, 7]
      entries(),keys() 和 values()
      它们都返回⼀个遍历器对象,可以⽤ for...of 循环进⾏遍历,唯⼀的区别是 keys() 是对键名的遍历、 values() 是对键值的遍历, entries() 是对键值对的遍历。
let arr = ["jacky","vicky","tom"] 
let keys = arr.keys() 
let values = arr.values(); 
let entries = arr.entries();
      includes()
       返回⼀个布尔值,表示某个数组是否包含给定的值,与字符串的 includes ⽅法类似。
['jacky','tom','vicky'].includes('tom') //true
      flat()
       该⽅法⽤于将嵌套的数组“拉平”,变成⼀维的数组。该⽅法返回⼀个新数组,对原数据没有影响。 flat() 默认只会“拉平”⼀层,如果想要“拉平”多层的嵌套数组,可以将 flat() ⽅法的参数写成⼀个整数,表示想要拉平的层数,默认为1。 如果不管有多少层嵌套,都要转成⼀维数组,可以用Infinity 关键字作为参数。
[1, 2, [3, 4]].flat() // [1, 2, 3, 4] 
[1, 2, [3, [4, 5]]].flat() // [1, 2, 3, [4, 5]] 
[1, 2, [3, [4, 5]]].flat(2) // [1, 2, 3, 4, 5] 
[1, [2, [3]]].flat(Infinity) // [1, 2, 3]
      flatMap()
       该⽅法对原数组的每个成员执⾏⼀个函数(相当于执⾏ Array.prototype.map() ),然后对返回值组成的数组执⾏ flat() ⽅法。该⽅法返回⼀个新数组,不改变原数组。 该⽅法只能展开⼀层数组。
// 相当于 [[2, 4], [3, 6], [4, 8]].flat() 
[2, 3, 4].flatMap((x) => [x, x * 2]) // [2, 4, 3, 6, 4, 8]

5.函数拓展

    5.1 函数默认值

       声明参数的时候,可以通过'='为参数设置⼀个默认值
function log(x, y = 'World') { 
 console.log(x, y); 
 } 
log('Hello') // Hello World

    5.2 参数解构

function foo({x, y = 5}) { 
 console.log(x, y); 
 } 
foo({}) // undefined 
foo({x: 1}) // 1 5 
foo({x: 1, y: 2}) // 1 2 
foo() // TypeError: Cannot read property 'x' of undefined

    5.3 rest参数

      ⽤于将所有的参数整合到⼀个数组中
function add(...values) { 
 let sum = 0; 
 for (var val of values) { 
   sum += val; 
   } 
 return sum; 
} 
add(2, 5, 3) // 10

    5.4 箭头函数

      更简便的函数写法。如果箭头函数不需要参数或需要多个参数,就使⽤⼀个圆括号代表参数部分;如果箭头函数的代码块部分多于⼀条语句,就要使⽤⼤括号将它们括起来,并且使⽤return语句返回。
      箭头函数中的this指向包含该箭头函数的外部函数的this
var f = v => v; 
// 等同于
var f = function (v) {
 return v; 
 }; 
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
return num1 + num2;
};
var sum = (num1, num2) => { return num1 + num2; }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值