美文网首页让前端飞Web前端之路
最近遇到的一些前端面试题汇总

最近遇到的一些前端面试题汇总

作者: 这麻雀 | 来源:发表于2019-07-26 17:54 被阅读6次

    1.JavaScript的本地对象,内置对象和宿主对象?

    1.本地对象
    
    ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。
    包含内容:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError。
    本地对象就是 ECMA-262 定义的类(引用类型)。
    
    2.内置对象
    
    ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。而ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。
    
    Global(全局对象):
    isNaN()、parseInt()、parseFloat()、eval()方法等。
    Math: 
    Math.PI
    Math.random() 随机数
    Math.random() 区域+起始值// 30-100整数console.log(Math.floor(Math.random()*71)+30)
    Math.round() 四舍五入
    Math.ceil() 进一法
    Math.floor() 去尾法
    Math.max() 最大值
    Math.min() 最小值
    Math.sqrt() 平方
    Math.pow() m的n次方
    Math.sin() 对比斜,括号里面只能输入弧度
    Math.cos() 邻比斜
    Math.tan() 对比邻
    nub.toFixed(保留小位点后的数几位)保留的位数之后的四舍五入
    
    3.宿主对象
    
    由ECMAScript实现的宿主环境提供的对象,可以理解为:浏览器提供的对象。所有的BOM和DOM都是宿主对象。
    
    

    2.从数组[1,'a', 'd',12,56]删除1,'a'?

    let arr=[1,'a', 'd',12,56];
    arr.splice(0,2);
    console.log(arr);//["d", 12, 56]
    

    console.log(0.1+0.2);
    console.log('3'+4);
    console.log('3'+'1');
    console.log('5'-1);
    console.log('3'+1);
    console.log([]+{});
    console.log([]==null);
    console.log({} =={});
    输出什么?原因?

    console.log(0.1+0.2);  
        - 0.30000000000000004
        - 浮点数值
    console.log('3'+4);
        - '34'
        - 隐式转换string,toString()
    console.log('3'+'1');
        - '31'
    console.log('5'-1);
        - 4
        - 隐式转换number,valueOf()
    console.log('3'+1);
        - 31
        - 当加号运算符时,String和其他类型时,其他类型都会转为 String;其他情况,都转化为Number类型 , 注: undefined 转化为Number是 为’NaN‘, 任何Number与NaN相加都为NaN。其他运算符时, 基本类型都转换为 Number,String类型的带有字符的比如: '1a' ,'a1' 转化为 NaN 与undefined 一样。 
    console.log([]+{});
        - "[object object]"
        - ({}).toString()   ->   "[object Object]"
          ([]).toString() ->  ""
          "[object Object]"+  "" -> "[object object]"
    console.log([]==null)
        - false
        - [] -> ''  ''!==null ''!==undefined
    console.log({} =={});
        - false 
        - 对象存在堆区,在栈区存着两个对象的不同的指针,两个指针不同
    

    关于隐式转换点击具体查看文章

    4.垃圾回收机制,管理内存,如何优化?
    答案参考我另一篇文章

    5.比较typeof和instanceof区别?

    1.typeof能够检测出了null之外的基础类型(String、Number、Boolean、Undefined)。
    对于引用类型能判断出function、其他的都为Object。
    
    2.instanceof是用来判断 A 是否为 B 的实例。
    表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。
    在这里需要特别注意的是:instanceof 检测的是原型。 
     instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。之后增加了Array.isArray()方法判断这个值是不是数组的。
    如[1,2] instanceof Array
    

    function fun(n,o) {
    console.log(o)
    return {
    fun:function(m){
    return fun(m,n);
    }
    };
    }
    var a = fun(0); a.fun(1); a.fun(2); a.fun(3);//undefined,?,?,?
    var b = fun(0).fun(1).fun(2).fun(3);//undefined,?,?,?
    var c = fun(0).fun(1); c.fun(2); c.fun(3);//undefined,?,?,?
    //问:三行a,b,c的输出分别是什么?
    6,7,8题的具体答案点击分析查看文章

    a: undefined,0,0,0
    b: undefined,0,1,2
    c: undefined,0,1,1
    

    var o={
    fn:function (){
    console.log(fn);
    }
    };
    o.fn();

    ERROR报错
    

    8.var fn=function (){
    console.log(fn);
    };
    fn();

    function (){console.log(fn);};正确
    使用var或是非对象内部的函数表达式内,可以访问到存放当前函数的变量;在对象内部的不能访问到。
    
    因为函数作用域链的问题,采用var的是在外部创建了一个fn变量,函数内部当然可以在内部寻找不到fn后向上册作用域查找fn;
    而在创建对象内部时,因为没有在函数作用域内创建fn,所以无法访问。
    

    相关文章

      网友评论

        本文标题:最近遇到的一些前端面试题汇总

        本文链接:https://www.haomeiwen.com/subject/hlydrctx.html