数值拓展与函数拓展
数值拓展
新的方法和安全数
console.log(window.parseInt("1.23"))
console.log(parseFloat("1.23"))
console.log(Number.parseInt("1.23"))
console.log(Number.parseFloat("1.23"))
console.log(Number.isNaN(NaN))
console.log(Number.isNaN(-NaN))
console.log(Number.isNaN(1))
console.log(Number.isNaN("a"))
console.log(Number.isNaN(undefined))
console.log(Number)
console.log(Number.isFinite(Infinity))
console.log(Number.isFinite(2 /0))
console.log(Number.isFinite(1234)) //有限数字为true
Number.MAX_SAFE_INTEGER
Number.MION_SAFE_INTEGER
console.log(Number.MAX_SAFE_INTEGER)
console.log(Number.MION_SAFE_INTEGER)
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER-1)) //true
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER+1))//false
乘方
let a = 2**2 //2的2次方
console.log(a)
let b = 2**2**0 // 等同于 let b = 2**(2**0) => 2**1
let c = (2**2)**0 //1
// 也就是乘方运算时右结合,从右往左结合
函数拓展
函数参数的默认值
function add(a,b=999) {
console.log(a,b)
}
add(1)
function add(a,b=999+a) {
console.log(a,b)
}
add(1) //可以使用前面的a
function add(a,b=999+b ,c=1) {
console.log(a,b)
} // 不可以直接使用b
function add(a,b=999+c ,c=1) {
console.log(a,b)
}
add(1) //c在后面不可以用于前面默认值的计算
对象的解构赋值和函数参数默认值的结合(容易混淆)
function People({name,age=38} = {name:1}) {
console.log(name,age)
}
People()// 1 38
前面的是对象的解构赋值和默认值得设置,后面的是函数参数的默认值设置,对于参数来说在没有得到实参时会优先使用后面的形参默认值来初始化,而形参没有默认值时就会使用对象解构赋值来初始化!!!
优先级: 实参 > 形参 > 对象解构赋值的默认值
将类数组对象转化为数组
let a = Array.prototype.slice.call(b)
let a = [...b]
let [...a] = b
剩余参数
function sum (...args) {
console.log(agrs)
}
sum(1,2,3,45,56,676,8)
// [1,2,3,45,56,676,8]
与拓展运算符的区别: 正好相反,拓展运算符let a = [1,23,3] let [b,c,d] =[a] let e = [3,4,...a]// b,c,d,e 均有值
,意为展开!剩余参数是将传入的参数合并到一个数组里!
剩余参数必须是参数的最后一位!
箭头函数
箭头函数
const pop = arr => arr.pop() //3
//and
const pop2 = arr => {arr.pop()} //undefined
const pop = arr => void arr.pop() //undefined
console.log(pop([1,2,3]))
因为不写大括号默认为return arr.pop()的值
, 写了后不显示写明return arr.pop()
的话不会返回值!
没有arguments
,this
是外层的this
!
(∩_∩)-----代码改变生活。