关于Javascript遇到的一些面试题(回文数字,对称数)

1.输出字符串中所有的叠字

输入’晴川历历汉阳树,芳草萋萋鹦鹉洲’,输出 [‘历历’,‘萋萋’]

    function getSameCharacter(str) {
    
    
      var arr = [];
      for (let i = 0; i < str.length; i++) {
    
    
        if (str[i] == str[i + 1]) {
    
    
          let str1 = str[i] + str[i + 1];
          arr.push(str1);
        }
      }
      return arr
    }
    let str = '晴川历历汉阳树,芳草萋萋鹦鹉洲';
    console.log(getSameCharacter(str));//['历历','萋萋']

2.打印出 1-1000000 之间的对称数(回文数字),例如 121,131,141,1331

  function getSymmetryNum(number) {
    
    
      let arr = [];
      for (let i = 0; i < number; i++) {
    
    
        let str = i
          .toString()
          .split('')
          .reverse()
          .join('');
        if (i == str) {
    
    
          arr.push(str)
        }
      }
      return arr
    }

    console.log(getSymmetryNum(1000000))

3.获取页面中所有的checkbox属性的input框

  function getAllCheckoutBox(input) {
    
    
      var resultArr = [];
      for (var i = 0; i < input.length; i++) {
    
    
        if (input[i].type == 'checkbox') {
    
    
          resultArr.push(input[i]);
        }
      }
      return resultArr
    }
    var inputList = document.querySelectorAll('input');
    getAllCheckoutBox(inputList);//把数据传过去,调用函数,接收返回的数据

4.编写一个函数来判断x是不是整数

 function isInteger(x) {
    
    
      if (typeof x !== 'number') {
    
    
        return x + '不是一个数字'
      } else {
    
    
        x = x.toString();
        if (x.includes('.')) {
    
    
          return x + '是一个数字,但不是一个整数'
        } else {
    
    
          if (x == 0) {
    
    
            return x + '既不是正整数也不是负整数'
          } else if (x.includes('-')) {
    
    
            return x + '是一个负整数'
          } else {
    
    
            return x + '是一个正整数'
          }
        }
      }
    }
    var x = 0;
    console.log(isInteger(x))

5.下面语句的输出结果

typeof (5/0)//NaN
typeof(typeof(5/0))//number

6.写出下面代码块的输出结果

   var globalVar = 'xyz';
    (function outerFunc(outerArg) {
    
    
      var outerVar = 'a';
      (function innerFunc(innerArg) {
    
    
        var innerVar = 'b';
        console.log(
          'outerArg=' + outerArg + '\n' +
          'innerArg=' + innerArg + '\n' +
          'outerVar=' + outerVar + '\n' +
          'innerVar=' + innerVar + '\n' +
          'globalVar=' + globalVar
        )
      })(456)
    })(123)

上面的代码是一道原题,我没有改过,它的输出结果是
outerArg=123
innerArg=456
outerVar=a
innerVar=b
globalVar=xyz,

我在这里给大家解释一下,其实很简单,只是初始的代码太多了,所以看起来有点绕,考察的只不过是函数的作用域的问题,两个自调用的函数,函数的参数在函数的内部相当于是一个局部变量,它和下面的代码是一样的

 var globalVar = 'xyz';
    (function outerFunc(outerArg) {
    
    
       //此时outerArg在outerFunc内部相当于是一个局部变量,相对于innerFunc这个函数来说是一个全局的变量
      var outerArg = 123
      var outerVar = 'a';
      (function innerFunc(innerArg) {
    
    
      	//此时的innerArg在innerFunc内部是一个局部变量
        var innerArg = 456
        var innerVar = 'b';
        console.log(
          'outerArg=' + outerArg + '\n' +
          'innerArg=' + innerArg + '\n' +
          'outerVar=' + outerVar + '\n' +
          'innerVar=' + innerVar + '\n' +
          'globalVar=' + globalVar
        )
      })(456)
      // console.log(outerArg)
    })(123)

7.写出下面代码的输出结果

  let obj = {
    
     a: 1, b: 2, c: 3 };
    obj.__proto__ = {
    
     c: 4 };//记得是在obj这个对象的原型上面赋值的,不是在当前对象,是在当前对象的父级上面添加的
    let {
    
     a, b, c } = obj
    console.log(c)//c=3

8.写出下面代码的打印结果

function foo(argument) {
    
    
      console.log(this.a, argument);//2,3
      return this.a + argument
    }
    var obj = {
    
     a: 2 };
    var bar = foo.bind(obj);//这里只是改变了this指向,这时的this指向的是obj,没有执行函数,因此obj.a=2,argument是调用函数时传入的参数,所以是3,结果就是5了
    var b = bar(3);
    console.log(b)//5
    //主要是this的指向问题和bind改变this指向后不会调用方法,

9.输出下面代码的输出顺序

const a = 2;
    setTimeout(() => {
    
    
      console.log('a')//a
    });
    (function () {
    
    
      const a = 1;
      console.log('b');//b
      console.log(v);//undefined,声明提升的原因
      var v = 'z'
    })();
    console.log(a)//2
    //他们的输出结果是 b,undefined,2,a,这是因为js是单线程的,延时器是异步的,所以放在最后面执行。

10.写出下面代码的输出结果(这是一道经典的面试题,我在很多的地方见过)

 window.val = 1;
    var json = {
    
    
      val: 10,
      dbl: function () {
    
    
        this.val *= 2;
      }
    }
    json.dbl();//json调用的时候,函数执行的是json.val=json.val*2,没用关键字声明,所以是json.val变成了20
    var dbl = json.dbl;//变量赋值
    dbl();// 相当于是window调用,所以是window.val=window*2,所以window的值变成了2
    //               2      +      20    =     22
    console.log(window.val + json.val)

猛地一看,你会觉得结果是什么12,21,还是多少,其实真正的答案是22.这是为什么呢?请看注释文字

11.数组乱序

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    arr.sort(function () {
    
    
      return Math.random() - 0.5;
    });
    console.log(arr)

这是我的一个朋友遇到的面试题,感觉还是挺简单的,在这里分享给大家

猜你喜欢

转载自blog.csdn.net/weixin_45356397/article/details/103037436