1 对象==字符串
对象.toString()变成字符串
2 null == undefined 相等,但与其他值比较不相等
3 NaN == NaN 不相登
4 其他类型都是先转换成数字
对象转数字,先toString,再转化成数字 先调valueof,在调tostring
//输出1
var a =?
if (a ==1 && a==2 && a ==3){
console.log(1)
}
解法1:
var a = {
i:0,
toString:function(){
return ++this.i
}
}
if (a==1 && a==2 && a==3){
console.log(1)
}
解法2:
var i = 0
Object.defineProperty(window,'a',{
get(){
return ++i
}
})
if (a==1 && a==2 && a==3){
console.log(1)
}
解法3
var a=[1,2,3]
a.toString = a.shift
if (a==1 && a==2 && a==3){
console.log(1)
}
数组扁平化
let arr = [1, 2, 3, 4, [1, 2, 3, [1, 2, 3, [1, 2, 3]]], 5, "string", { name: "弹铁蛋同学" }]
arr = arr.flat(Infinity)
arr = arr.toString().split(',').map(item=>parseFloat(item))
arr = JSON.stringify(arr).replace('/(\[|\])/g','').split(',').map(item=>parseInt(item))
while(arr.some=>(item=>Array.isArray(item)){
arr=[].concat(...arr)
})
斐波那契数列
解法1
function fi(n) {
if(n<=1) return 1
let arr = [1,1]
let i=n+1-2 // +1是,创建比传入的多一个,比如传5,创建6个,
//-2是指前面已经创建了[1,1]
while(i>0){
let a = arr[arr.length-2]
let b = arr[arr.length-1]
arr.push(a+b)
i--;//加一次,减少一次循环
}
return arr[arr.length-1]
}
解法2
function fi(count){
function fn(count, curr=1,next=1){
if(count==0){
return curr
} else {
return fn(count-1,next, curr+next)
}
}
return fn(count)
}
输出所有和N的连续正数序列
function fn(count){
let result = []
let middle = Math.ceil(count/2)//求出中间值
for(let i=1;i<=middle;i++){//从1开始累加
for(let j=2;;j++){
let total = (i+(i+j-1))*(j/2)
if (total>count){
break
} else if (total === count){
result.push(createArr(i,j))
break
}
}
}
return result
}
function createArr(n,len) {
let arr = new Array(len).fill(null)
temp=[]
arr[0]=n
arr = arr.map((item,index)=>{
if(item===null){
item = temp[index-1]+1
}
temp.push(item)
return item
})
return arr
}
console.log(fn(5))