js基础,需要思考,同时也有点难度的面试题

137 阅读1分钟

第一题

console.log(a + a.a + a.a.a + a.a.a.a + a.a.a.a.a + a.a.a.a.a.a); // 要求打印出 -> "abcdef" console.log(a + a.a + a.a.a); // 要求输出 "abc"

主要考察String

//reduce版本
var a = ((arr)=>{
    var _o ={};
    arr.reduce((obj,node,idx)=>{
        obj.a ={
            toString:function(){
                return arr[idx +1];
            }
        };
        return obj.a;
    },_o);
    _o.toString = function(){
        return arr[0];
    }
    return _o;
})(['a','b','c','d','e','f'])

// 遍历版本
var a =((values)=>{
    const o = {};
    let node = o;
    for(let i=0,l=values.length;i<l;i++){
        node.toString=()=>{
            return values[i]
        }
        node.a = {}
        node = node.a;
    }
    return o
})(['a','b','c','d','e','f'])

第二题

console.log(add(1)(2)(3)(4)); // 要求输出: 10

// 无脑实现业务版本
   function add(a){
      return (b)=>{
               return (c)=>{
                  return (d)=>{
                       console.log(a+b+c+d)
                   }
               }
       }
   }
//正常迭代版本  主要用到柯里化
function curry( fn, oArgs ) {
    oArgs = oArgs || [];
  
    return function () {
      var len = fn.length,
          args = oArgs.concat( [].slice.call(arguments) ),
          argLen = args.length;
  
      if(argLen < len) {
        return curry( fn, args);
      }else {
        return fn.apply(this, args);
      }
    }
  }
  
  function add (a, b, c, d) {
    return a + b + c + d;
  }
  
  add = curry(add);   
   

题目三:

实现一个plus方法,实现修复精度功能 0.1 + 0.2 -> 返回 0.3

function plus (a, b) {
    var alen = (a.toString().split('.')[1]).length;
    var blen = (b.toString().split('.')[1]).length;
    var powerC = Math.power(10,Math.max(alen,blen));
    return (a * powerC + b * baseNum) / powerC;
  }
  console.log(plus(0.1, 0.2)); // 打印0.3
  console.log(plus(0.1, 0.7)); // 打印0.8

题目四:

console.log(obj + 10); // 打印20

console.log(JSON.stringify(obj)); // 打印100

var obj = {
    toString(){
        return 10;
    },
    toJSON(){
        return 100;
    }
}