JS练习

JS练习

1.练习一

let a={},b='0',c=0;
a[b]="这是b";
a[c]="这是c";
console.log(a[b]) //“这是c”
console.log(a) //{0: "这是c"}

2.练习二

//Symbol创建唯一值
Symbol('1')===Symbol('1') //false
let a={},b=Symbol('1'),c=Symbol('1');
a[b]="这是b";
a[c]="这是c";
console.log(a[b]) //“这是b”
console.log(a) //{Symbol(1): "这是b", Symbol(1): "这是c"}

3.练习3

let a={},b={name:"nichen"},c={age:20};
a[b]="这是b";
a[c]="这是c";
console.log(a[b]) //"这是c"
console.log(a) //{"[Object Object]":"这是c"}

4练习4


     console.log('正常执行');
     async function async1(){
       console.log('async1 start')
       await async2()
       console.log('async2 end')
     }
     async function async2(){
       console.log("async2")
     }
     console.log("script start")
     setTimeout(function(){
       console.log("setTimeout")
     },0)
     async1();
     new Promise((resolve,reject)=>{
       console.log("promise1")
       resolve()
     }).then(res=>{
       console.log('promise2')
     })
     console.log("script end")

输出=>
“正常执行”
“script start”
“async1 start”
“async2”
“promise1”
“script end”
“async2 end”
“promise2”
“setTimeout”

5.练习5

var x=0,y=1;
     function fn(){
       x+=2;
       fn=function(y){
         console.log(y+(--x))
       }
       console.log(x,y)
     }
     fn(3)
     fn(4)
     console.log(x,y)

2 1
5
1 1

6.练习6

测量一个javascript脚本程序执行消耗的时间. console.time() 方法是作为计算器的起始方法。该方法一般用于测试程序执行的时长。console.timeEnd() 方法为计算器的结束方法,并将执行时长显示在控制台。如果一个页面有多个地方需要使用到计算器,可以添加标签参数来设置。
console.time(label)
console.timeEnd(label)
这两个方法均使用一个参数,参数值可以为任何字符串,但是这两个方法所使用的参数字符串必须相同,才能正确地统计出开始时间与结束时间之间所经过的毫秒数。
console.time(1);
setTimeout(function(){
console.timeEnd(1);
},16.7); // 1: 16.700927734375 ms

    setTimeout(()=>{
      console.log(1)
    },20)
    console.log(2)
    setTimeout(()=>{
      console.log(3)
    },10)
    console.log(4)
    console.time('AA')
    for(let i=0;i<1000;i++){
    }
    console.timeEnd('AA')
    console.log(5)
    setTimeout(()=>{
      console.log(6)
    },8)
    console.log(7)
    setTimeout(()=>{
      console.log(8)
    },15)
    console.log(9)

2
4
AA: 0.05224609375 ms
5
7
9
6
3
8

7.练习7

var a = ?;//设置a为多少让下面的等式成立
if(a==1 && a==2 && a==3){
   console.log(1)
}
// toString
a={
  i:0,
  //toSting可以换成valueOf
  toString(){
  return ++this.i
  }
}
// 数据劫持实现
var i=0;
Object.defineProperty(window,'a',{
  get(){
  return ++i;
  }
})
//
var a=[1,2,3]; 
a.toString=a.shift;

8.练习8

数组去重

let arr=[23,45,1,23,43,234,21,9,10,23,45]
// 一
    console.log([...new Set(arr)]) //[23, 45, 1, 43, 234, 21, 9, 10]
    let arr2=Array.from(new Set(arr)) //[23, 45, 1, 43, 234, 21, 9, 10]
// 二
 let arr2=[];
    arr.forEach((item,index)=>{
      if(!arr2.includes(item)){
          arr2.push(item)
      }
    })
    console.log(arr2) //[23, 45, 1, 43, 234, 21, 9, 10]
 // 三
     function unique(arr){
       return arr.filter((item,index)=>{
         console.log(arr.indexOf(item,0))
         return arr.indexOf(item,0)===index
       })
    }
    var arr=['dd',true,false,1,34,1,'dd',22,null,true];
    console.log(unique(arr)) //["dd", true, false, 1, 34, 22, null]

9.数组扁平化

 var arr=[12,[12,33],[23,45,67,24],[34,56,43,[34,56]],[23]]
//1
  var arr1 = arr.flat(Infinity);
  console.log(arr1) //[12, 12, 33, 23, 45, 67, 24, 34, 56, 43, 34, 56, 23]
//2
 var arr2=arr.toString().split(',').map(item=>parseFloat(item))
 console.log(arr2) //[12, 12, 33, 23, 45, 67, 24, 34, 56, 43, 34, 56, 23]
 //3
  var arr3=JSON.stringify(arr).replace(/(\[|\])/g,'').split(',').map(item=>parseFloat(item))
 console.log(arr3) //[12, 12, 33, 23, 45, 67, 24, 34, 56, 43, 34, 56, 23]
 //4
 while(arr.some(item=>Array.isArray(item))){
      arr = [].concat(...arr)
}
console.log(arr) //[12, 12, 33, 23, 45, 67, 24, 34, 56, 43, 34, 56, 23]

9.练习9

实现斐波那契数[1,1,2,3,5,8,13,21];fibonacci(0)=>1;fibonacci(4)=>5

//1

  function fibonacci(n){
    if(n<=1) return 1;
    let arr=[1,1];
    for(let i=n+1-2;i>0;i--){
      let a=arr[arr.length-2];
       let b=arr[arr.length-1]
       arr.push(a+b);
    }
    // let i=n+1-2;//创建多少个
    // 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 fibonacci(count){
    function fn(count,curr=1,next=1){
      if(count==0){
        return curr
     }else{
       return fn(count-1,next,curr+next);
     }
   }
   return fn(count)
 }
 //3
 function fibonacci (n) {
    if ( n <= 1 ) {return 1};
    return fibonacci(n - 1) + fibonacci(n - 2);
 }
 
 console.log(fibonacci(0)) //1
 console.log(fibonacci(5)) //8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值