ES6对Number数字以及Object对象类型做的升级优化

1.ES6对Number数字做的升级优化

优化部分

ES6在Number原型上新增了isFinite()、isNaN()方法,用来取代ES5中的isFinite()、isNaN()方法检测数值是否有限,是否是NaN。

//ES5
console.log(isNaN('NaN'))//true
console.log(isNaN(NaN))//true

//ES6
console.log(Number.isNaN("NaN"))//false
console.log(Number.isNaN(NaN))//true

  

升级部分

ES6在Math对象上新增了Math.cbrt()、Math.trunc()、Math.hypot()等运算方法,求立方根,求和立方根等。

console.log(Math.cbrt(27))//3 开立方

console.log(Math.trunc('27.4567890px'))//取整
console.log(Math.trunc('27.4567890'))
console.log(Math.trunc(27.4567890))
console.log(Math.trunc(0.4567890))
console.log(Math.trunc(-27.4567890))
console.log(Math.trunc(NaN))

console.log(Math.hupot(3,4))//平方和开方

  

2.ES6对Object对象类型升级优化(重要)

优化部分

对象属性变量式声明

ES6可以直接以变量形式声明对象属性或方法,比传统的键值对形式声明更加简洁,更方便,语义更清晰。

let[a,b]=[1,2]

let obj1={a,b}
//等同于
let obj2={
   a:a,
   b:b
}
console.log(obj1,obj2)

  对象中的方法也可以使用上述简洁写法:

//ES5
var obj1={
    fun1=function(){
           //语句
    }
}

//ES6
let obj2={
    fun2()
    //语句
    }
}

  对象的解构赋值

//ES6
let{a,b}={a:1,b:2}
//a==1,b==2

//ES5
var obj={a:1,b:2}
var a=obj.a,
  b=obj.b

  

对象的扩展运算符

ES6对象的扩展运算符跟数组扩展运算符区别不大,毕竟数组也是一种特殊的对象。对象的扩展运算符一个最好用也是最常用的方法是可以轻松的去除木匾对象内部全部或部分可遍历属性,从而进行对象的合并和分解。

const person={
	name:'小明',
	age:18,
	gender:'男',
	number:13312341234,
	hobbies:['唱','跳','rap']
}

const {name,gender,...others}=person

console.log(name,gender,others)

  

升级部分

ES6在Object原型上新增了is()方法,用来做两个对象的相等比较。而且完善了NaN!=NaN的不合理。

const obj1={
	a:1,
	b:2
}

const obj2={
	a:1,
	b:2
}

const obj3=obj2

// console.log(obj1==obj2)
// console.log(![img](file:///C:\Users\TX\AppData\Roaming\Tencent\QQTempSys\%W@GJ$ACOF(TYDYECOKVDYB.png)Object.is(obj2,obj3))
// console.log(![img](file:///C:\Users\TX\AppData\Roaming\Tencent\QQTempSys\%W@GJ$ACOF(TYDYECOKVDYB.png)Object.is(obj1,obj2))

console.log(NaN===NaN)
console.log(![img](file:///C:\Users\TX\AppData\Roaming\Tencent\QQTempSys\%W@GJ$ACOF(TYDYECOKVDYB.png)Object.is(NaN,NaN))

  如何判断两个对象属性和属性值是否完全相同(以下非完整写法,不足以完全判断两个对象是否完全一致)?

function isobjectSame(obj1,obj2){
    //判断是否是Object
    //console.log(Object.prototype.toString.call(obj1))
    if(Object.prototype.toString.call(obj1)!=='[object Object]'
        ||lobject.prototype.toString.call(obj2)!=='[object Object]'){
        return console.Log('不是对象')
    }
    //判断二者是否原本就是同一指针
    if(obj1===obj2){
    return true
    }
    const arr1=Object.get0wnPropertyNames(obj1)//[a,b]可以获取obj1的所有键名key组成的数组
    const arr2=Object.getownPropertyNames(obj2)//[b,a]
    if(arr1.length!==arr2.length){
        return false
    }
    let count=0
    for (key of arr1){//把obj1.a===obj2.a  obj1.b===obj2.b
        count=obj1[key]===obj2[key]?count+1:NaN
    }
    if(count!==arr1.length){
       return false 
    }
    return true
}   
console.log(isObjectSame([],{}))

  

posted @ 2022-09-21 08:14  宋072  阅读(79)  评论(0)    收藏  举报