ES6——对象、数组、字符串、数值新增API

34 篇文章 0 订阅
9 篇文章 1 订阅

目录

一、对象API扩展

1、Object.is()

2、Object.assign()

3、获取原型对象的方法

4、设置原型对象的方法

5、keys、values、entries、fromEntries

二、数组API扩展

1、Array.from()

2、Array.of()

3、Array.prototype.find()

4、Array.prototype.findIndex

5、Array.prototype.includes()

6、Array.prototype.fill() 

7、keys、values、entries

8、Array.prototype.flat() 

9、Array.prototype.flatMap()

三、字符串API扩展

1、String.prototype.trimStart()和String.prototype.trimEnd()

2、String.prototype.padStart() / String.prototype.padEnd()

3、Function.prototype.toString()

4、String.prototype.replaceAll()

四、数值API扩展

1、Number.isFinite()和Number.isNaN()

2、Number.parseInt()和Number.parseFloat()

3、Number.isInteger()


一、对象API扩展

1、Object.is()

判断两个值是否相等

返回值:true或false

不仅比较值,还比较符号

console.log(Object.is(+1,-1)); //false
console.log(Object.is(+0,-0)); //false
console.log(+0===-0); //true
console.log(NaN===NaN); //false
console.log(Object.is(NaN,NaN)); //true

2、Object.assign()

(1)两个参数时,实现的是对象的复制、拷贝

返回值:返回第一个参数

let obj = {}
let obj1 = {
  name:"zhangsan",
  age:19
}

let res = Object.assign(obj,obj1) 
console.log(res,obj); //{ name: 'zhangsan', age: 19 } { name: 'zhangsan', age: 19 }
console.log(res===obj); //true

Object.assign()方法实现的是半深拷贝,半深拷贝指的是被复制的对象里面有引用数据类型,实现的就是半深拷贝;而深拷贝指的是被复制的对象里是基本数据类型,实现的就是深拷贝。

let obj = {}
let obj1 = {
  name:"zhangsan",
  age:19,
  class:{
    number:'2022'
  }
}

let res = Object.assign(obj,obj1)
obj.name = 'lisi'
obj.class.number = '12345'
console.log(obj,obj1); //{ name: 'lisi', age: 19, class: { number: '12345' } } { name: 'zhangsan', age: 19, class: { number: '12345' } }

(2)三个参数时,表示合并对象,把后两个对象合并到第一个对象,并返回第一个对象

let obj = {}
let obj1 = {name:"zhangsan",age:10}
let obj2 = {gender:'male'}
let res = Object.assign(obj,obj1,obj2)
console.log(res,obj); //{ name: 'zhangsan', age: 10, gender: 'male' } { name: 'zhangsan', age: 10, gender: 'male' }
console.log(res===obj); //true

3、获取原型对象的方法

(1)obj.__proto__

(2)obj.constructor.prototype

(3)Object.getPrototypeOf(obj)

let obj = {
  name:"zhangsan"
}
console.log(obj.__proto__); //[Object: null prototype] {}
console.log(obj.constructor.prototype); //[Object: null prototype] {}
console.log(Object.getPrototypeOf(obj)); //[Object: null prototype] {}

4、设置原型对象的方法

Object.setPrototypeOf(obj,obj1) 表示将obj的原型对象设置为obj1

let obj = {}
let obj1 = {
  name:"lisi"
}
Object.setPrototypeOf(obj,obj1) //将obj的原型对象设置为obj1
console.log(obj.__proto__); //{ name: 'lisi' }
console.log(obj.constructor.prototype); //[Object: null prototype] {}
console.log(Object.getPrototypeOf(obj)); //{ name: 'lisi' }

注意:将obj的原型对象设置为obj1,obj的构造函数的prototype仍然指向obj原来的原型对象。

5、keys、values、entries、fromEntries

keys 返回所有属性名组成的数组

values 返回所有属性值组成的数组

entries 返回键值对组成的数组

fromEntries 将二维数组转换成对象

let obj = {
  name:"zhangsan",
  age:10
}
console.log(Object.keys(obj)); //[ 'name', 'age' ]
console.log(Object.values(obj)); //[ 'zhangsan', 10 ]
console.log(Object.entries(obj)); //[ [ 'name', 'zhangsan' ], [ 'age', 10 ] ]
// fromEntries 将二维数组转换成对象
let res = Object.entries(obj)
console.log(Object.fromEntries(res)); //{ name: 'zhangsan', age: 10 }

二、数组API扩展

1、Array.from()

从类数组对象或者可迭代对象中创建一个新的数组实例

console.log(Array.from("hello")); //[ 'h', 'e', 'l', 'l', 'o' ]
function foo(){
  console.log(arguments); //{ '0': 1, '1': 3, '2': 5, '3': 7 }
  console.log(Array.from(arguments)); //[ 1, 3, 5, 7 ]
}
foo(1, 3, 5, 7)

2、Array.of()

创建数组实例,参数是数组元素,解决了new Array(10)传递一个整数值,创建的是length为该整数值的数组。

var arr = new Array(10)
var arr1 = Array.of(10)
console.log(arr,arr1); //[ <10 empty items> ] [ 10 ]

3、Array.prototype.find()

查找满足条件数组元素

参数:回调函数(item,index,arr)

返回值:返回第一个符合条件的数组元素或者undefiend(没有符合条件的就返回undefiend)

var arr = [1,2,3,4,5]
let res = arr.find((item,index,arr)=>{
  return item > 3
})
console.log(res); //4

4、Array.prototype.findIndex

查找满足条件数组元素

参数:回调函数 (item,index,arr)

返回值:返回符合条件得第一个数组元素索引或者-1(没有符合条件的就返回-1)

var arr = [1,2,3,4,5]
let res = arr.findIndex((item,index,arr)=>{
  return item > 3
})
console.log(res); //3

5、Array.prototype.includes()

查找是否包含某个元素,返回true/false

let arr = [1,2,3,4]
console.log(arr.includes(1)); //true

6、Array.prototype.fill() 

用来填充数组

修改原数组

返回修改后的数组

语法:

fill(value)
fill(value, start)
fill(value, start, end)
let arr = [1,2,3,4]
let res = arr.fill(5,2)
console.log(res); //[ 1, 2, 5, 5 ]
console.log(arr); //[ 1, 2, 5, 5 ]

7、keys、values、entries

返回值:返回一个迭代器对象

var arr = [1,2,3,4,5]
console.log(arr.keys()); //Object [Array Iterator] {}
console.log(arr.values()); //Object [Array Iterator] {}
console.log(arr.entries()); //Object [Array Iterator] {}

8、Array.prototype.flat() 

用于把数组展平,通过传入层级深度参数(默认为1),来为下层数组提升层级。如果想提升所有层级可以写一个比较大的数字甚至是Infinity,当然不推荐这么做。

var arr = [1,2,3,[4,5,6,[7,8,9]]]
console.log(arr.flat(1)); //[ 1, 2, 3, 4, 5, 6, [ 7, 8, 9 ] ]
console.log(arr.flat(2)); //[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
console.log(arr.flat(Infinity)); //[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

9、Array.prototype.flatMap()

它是 Array.prototype.map() 和Array.prototype.flat()的组合,通过对map调整后的数据尝试展平操作。

将数组展开,并让数组每一项都乘2

var arr = [1,2,3,[4,5]]
let res = arr.flatMap((item)=>{
  if(typeof item === 'number'){
    return item * 2
  }
  else{
    return item.map(item=>{
      return item * 2
    })
  }
})
console.log(res); //[ 2, 4, 6, 8, 10 ]

三、字符串API扩展

1、String.prototype.trimStart()和String.prototype.trimEnd()

String.prototype.trim() 被用于去除头尾上的空格、换行符等,现在通过 trimStart()trimEnd() 来头和尾进行单独控制。trimLeft()trimRight() 是他们的别名。

let str = " hello world "
console.log(str);
console.log(str.trimStart());
console.log(str.trimEnd()+'222');

2、String.prototype.padStart() / String.prototype.padEnd()

这两个函数的作用是在头尾添加字符串,它们接收两个参数 str.padStart(targetLength [, padString]),其中 targetLength 表示填充完的字符串长度,padString 表示填充的字符串,默认填充空格。

let str = 'es8'
console.log(str);
console.log(str.padStart(4));
console.log(str.padStart(6,'abc'));
console.log(str.padStart(5,'abc'));//对abc进行截取
console.log(str.padStart(7,'abc'));//对abc进行重复
console.log(str.padEnd(5,'abc'));
console.log(str.padEnd(7,'abc'));

3、Function.prototype.toString()

Function.prototype.toString()将从头到尾返回源代码中的实际文本片段。这意味着还将返回注释、空格和语法详细信息。

function foo(){
  // 这是一个注释

  console.log('我是一个函数');
}
console.log(foo.toString());

4、String.prototype.replaceAll()

提供对字符串的全局替换。

let str = '11112323'
console.log(str.replace('1','x')); //x1112323
console.log(str.replace(/1/g,'x')); //xxxx2323
console.log(str.replaceAll('1','x')); //xxxx2323

四、数值API扩展

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

2、Number.parseInt()和Number.parseFloat()

ES6 将全局方法parseInt()parseFloat(),移植到Number对象上面,行为完全保持不变。

Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45

3、Number.isInteger()

Number.isInteger()用来判断一个数值是否为整数。

Number.isInteger(25) // true
Number.isInteger(25.1) // false

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值