js面试常问知识点

   //typeof bar==="object"潜在危险
   var bar=null;
   console.log((bar !== null)&&(bar === 'object'));


   //判断是否是回文
   function huiwen(str){
     str=str.replace(/\W/g,'').toLowerCase();
     return (str==str.split('').reverse().join(''));
   }
   console.log(huiwen(" levvdfsdfel "));

  

   var a={},b={key:'b'},c={key:'c'};a[b]=123;a[c]=456;
   console.log(a);

   //一个变量不是全局变量,并每次访问+1
   function demo(){
     var a=1;
     return function (){
       console.log(a++);
     }
   }
   var fun=demo();
   var c=fun();
   fun();
   fun();
   function Counter(start){
    var count=start;
    return {
      increment:function(){
        count++;
      },
      get:function(){
        return count;
      }
    }
   }


   var foo=Counter(4);
   foo.increment();
   foo.get();//5


   foo.increment();
   var a=foo.get();//6


   var abc = (function(){      //abc为外部匿名函数的返回值
        var a = 1;
        return function(){
                a++;
                //alert(a);
        }
    })();
    console.log(abc());    //2 ;调用一次abc函数,其实是调用里面内部函数的返回值    
    abc();    //3


   var arr=[1,2,3,4];//创建一个二维数组
   //[[1],[2],[3],[4]]
   // function er(arr){
   //   var newArr=[];
   //   for (var i = 0; i < arr.length; i++) {
   //     newArr.push(arr[i]);
   //     for (var j = 0; j < arr.length; j++) {
   //     newArr[i][j]=i;
   //     }
   //   }
   //   return newArr;
   // }
   // console.log(er(arr))
   var myarr=new Array();
   for(var i=0;i<4;i++){
       myarr[i]=new Array();
       for(var j=0;j<4;j++){
        myarr[i][j]=j+1; 
       }
   }
   console.log(myarr)

   // 1,1,2,3,5,8,13  
   //求地n个数
   function fibonacci(n) {
    return n < 2? n : fibonacci(n - 2) + fibonacci(n - 1);
   }
   for(var i=1; i<=15; i++)
   {
   console.log(fibonacci(i));
   }

   //写一段代码找出最大的数
   function maxNumber(a,b,c){
     var max;
     if(a>b){
      max=a;
       if(a<c){
          max=c;
       }
     }else{
      max=b;
       if(b<c){
          max=c;
       }
     }
     return max;
   }
   console.log(maxNumber(1,2,3))
   console.log(maxNumber(9,8,7))
   console.log(maxNumber(6,7,5))

   var str="abcdsfg";//写两种方法截取字符串cd
   var res=str.substr(2,2);
   var res1=str.substring(2,4);
   var res3=str.slice(2,4);
   //三者都不会改变原字符串
   console.log(res3)

   //消除数组重复项,并从小到大排序
   var arr=[1,3,2,4,2,22,1];
   function unique(arr){
     var newarr=[];
     for (var i = 0; i < arr.length; i++) {
       
       if(newarr.indexOf(arr[i])===-1){
          newarr.push(arr[i]);
       }
     }

     return newarr;
     
   }

   function compare(a,b){

     if(a<b){

       return -1;

     }else if(a>b){

      return 1;

     }else{

      return 0;

     }
   }
   
   var newarr=unique(arr);
   console.log(newarr.sort(compare))

   //字符串原型上扩展一个myReset方法,实现目标字符串倒置
   String.prototype.myReset=function(){
     return this.split("").reverse().join("");
   }
   'abc'.myReset();
   
   //1秒之后输出3次3
   for (var i = 0; i < 3; i++) {
     setTimeout(function(){
      console.log(i);
     },1000);
   }

   //箭头函数的this
   //箭头函数的特点
   //1.不绑定this,arguments  用...代替arguments
   // let arrowfunc = (...theArgs) => console.log(theArgs.length)
   // arrowfunc(1,2)
   // //output
   // 2
   //2.更简化的代码语法
   var name="window";
   var object={
    name:"object",
    getNameFunc:function(){
      console.log(this.name) //object
      return ()=>console.log(this.name)  //object

      // return function(){
      //   console.log(this.name) //window
      // }
      
    }
   }
   
   object.getNameFunc()();


    const Person = {
        'name': 'little bear',
        'age': 18,
        'sayHello': () => {
          setTimeout(() => {
            console.log('我叫' + this.Person + '我今年' + this.age + '岁!')
          }, 1000)
        }
    }
    //我叫undefined我今年undefined岁!
    Person.sayHello();//通过以上的错误可以提醒我们,最好不要用箭头函数作为对象的方法。
    
    // function Person () {
    //   this.name = 'little bear',
    //   this.age = 18
    //   setTimeout(() => {
    //     console.log('我叫' + this.name + '我今年' + this.age + '岁')
    //    },1000)
    // }

    //什么时候不使用箭头函数
    // 1.作为对象的方法
    // 2.不能作为构造函数
    // 3.不能定义原型方法
    function Person1 (name){
    this.name = name;
    }
    Person1.prototype.sayHello1=()=>{
        console.log(this)
    }
    var p1 = new Person1('lisi');

    p1.sayHello1()
    //output 
   // window对象


   //箭头函数由于其代码的简洁性和不绑定this的特点,在非方法函数中使用是最合适的,而在方法函数中使用,需要特别注意它的this绑定问题,如果需要动态的修改this,最好还是不要使用箭头函数了。所以永远没有一个解决方案能解决所有事情,只有合适的应用场景。


   //编写一个方法mySum,当调用mySum(1,2)跟mySum(1)(2)都返回3
   function mySum(x,r){
      if(arguments.length == 1){                                        
          return function(y) { return x + y; };
      }else{
          return x+r;
      }
   }

  //console.log(mySum(2,3))
  console.log(mySum(2)(3)(3));

  //变量的提升
   console.log(ppx);
   var ppx="x";
   function f1(){
     console.log(ppx);
     var ppx="y";
     function ppx1(){console.log(ppx)};
     console.log(ppx);
     ppx1();
   }
   f1()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值