zoukankan      html  css  js  c++  java
  • 有意思的面试题汇总----持续更新

    1 .考验基本功,基本数据的运算

        console.log([]== ![])  //输出true
    
        !的运算优先级比=  高;
    
        => console.log([]==false)
        
        [] 转化成数字 是  0
    
        false  转化成数字也是 0;
    
        至于为什么要转化成数字在进行比较,这个我只能说你es运算规则是这样的
    

    2 . 1000个苹果分别状态10个箱子里面,如何分配才能取任意数字的苹果

        1, 2,4,8,16........
    
        这题考的是二进制
    

    3.js中所有的变量都可以当作对象使用,除了两个列外null和undefined

                            var  d = 2.toString();
    			
    			console.log(d)  //报错      这里报错了,是因为js解析器的问题,试图将  点操作符 解析成 浮点数的一部分
    			
    			var  s = 2..toString();
    			
    			console.log(s)    //2
    			
    			var a = 2 .toString();
    			
    			console.log(a);   //2
    			
    			var b = (2).toString();
    			
    			console.log(b)   //2
    
    1. 对象的应用,当对象被赋值另一个对象时,对象原来的引用断开
            function setname(obj){
                obj.name = "js";
                obj = { name : "node"}
            }
            var newobj = {name : 'jq'}
            setname(newobj);
            console.log(newobj.name)    //js
    
    
    
    1. 构造函数里面 显示的return 基本数据和引用数据类型的坑爹处
        function Bar() {
        return 2;
        }
         new Bar(); // 返回新创建的对象
    
        function Test() {
        this.value = 2;
    
            return {
               foo: 1
            };
        }
    new Test(); // 返回的对象                 //   当构造函数中显示的return 一个值得时候;这个是数字,则返回新创建的对象
                                                                                          这个值是对象,则覆盖新创建的对象
    
    

    6.考验基本功,基本数据的运算 和1是类似

        console.log({}==!{})   //false            // 这里是不解释了   还是运算的规则
    
    • 基本遵循以下规则

    1

    1. 如何访问以下数组的值
        var obj = [];
    
        obj[{}] = "博主"     //   怎么访问到博主
    

    8.原生js实现深拷贝

                function deepClone(obj){
       	 	var obj1 = {};
       	 	
       	 	for (var attr in obj) {
       	 		if(typeof obj[attr] != 'object'){
       	 			obj1[attr] = obj[attr]
       	 		}else{
       	 			var temp = obj[attr];
       	 			obj1[attr] = deepClone(obj[attr])    //主要这里巧妙 利用递归
       	 		}
       	 	}
       	 	
       	 	return obj1;
       	 }
    

    9.原型与参数的障碍

                            //创建一个构造函数
    			 function Person(name,age){
    			 	this.name = name ;
    			 	this.age = age || 18;
    			 }
    			 //给构造函数的原型添加方法和属性
    			 Person.prototype.sex = "你叫什么名字"
    			 
    			 var p1 = new Person('网吧')
    			 var p2 = new Person();
    			 
    			 console.log(p1.name) //网吧
    			 //undefine   //name是参数,参数被声明,却未传递参数,所以是undefine
    			 console.log(p2.name) 
    			
    			 console.log(p2.sex)  //  实例化对象自身世没有的;就去原型链上寻找
    
    1. {}.toString() 为什么会报错,console.log({}.toSting())是正常的
       在解析的时候{},有两种意义,===代码块  ===对象
    	{}单独出现时,默认被理解为 代码块
    	如果想 {} 作为对象被解释,需要将 {} 转换成表达式
    

    11 . console.log(3==ture) 和 if(3){console.log(true)
    }

       //上述两种情况为什么会输出结果不同
    
        ==================================
    
        很遗憾,如果你纠结这个问题,你只能去布兰登艾奇了,这货创造了这样的js
    

    12.return 返回至的问题

          //构造函数的作用
         约定, 构造函数默认是初始化对象的, 因此返回的就是对象本身, 不用写 return.
    
          但是如果在构造函数中写了 return, 那么 return 后如果是 值类型或 空 则无效, 
          如果是引用类型则返回该引用类型. 那么由 new 创建的这个对象就被丢弃.==========================注意这里是返回,而不是覆盖,this是不能被赋值的
    
          当构造函数非常复杂的时候, 需要根据传入的参数创建不同结构的对象的时候, 
          可以考虑将代码的逻辑分组, 然后每一组都单独返回数据 则使用 return this. 
          其目的是为了更好的维护代码
    

    13.es5中新增数组遍历方法forEach

        forEach(function(){  //this  })   //这里面的this指向谁
    
        $.each 中回掉函数this 又是指向 谁
    

    14.运算优先级的问题

        function Foo() {
    			    getName = function () { alert (1); };  //当函数被调用的时候,会产生一个隐式全局变量
    			    console.log(this)
    			    return this;
    			}
    			Foo.getName = function () { alert (2);};
    			Foo.prototype.getName = function () { alert (3);};
    			var getName = function () { alert (4);};
    			function getName() { alert (5);}
    			
    			//请写出以下输出结果:
    			Foo.getName();   //2  
    			getName();		//4
    			Foo().getName();  //1
    			getName();     //1
    			new Foo.getName();  //2   
    			new Foo().getName(); // 3
    			new new Foo().getName(); //3      //这最后几个完全是运算优先级的问题
    
    
    1. 当函数名和参数名重名的时候,参数传值值无效
        function a(b){
            alert(b);     //函数体
            function b(){
            alert(b)
            b()   //函数体
        }
        }
        a(1)    
    
    1. 闭包的引用问题
    
        var f1 = (function(){
    				var i =0;
    				return function(){
    					console.log(i++)
    				}
    			})();
    			
    			var f2 = (function(){
    				var i =0;
    				return function(){
    					console.log(i++)
    				}
    			})()
    			
    			f1();
    			f1 = null;   //断开引用
    			f1();    //报错
    			f2();
    

    17 . 有点意思,这个靠大家都没注意过的问题---arguments的类型

        (function(){ 
    	  return typeof arguments; 
    	})();
    
    1. 答案是,到目前为止我还不知道 为什么
        100['toString']['length']
    

    19,表示式对函数的影响

    
        var x = 10;
    	var foo = {
    	    x: 20,
    	    bar: function () {
    	        var x = 30;
    	        return this.x;
    	    }
    	};
    	console.log(
    	    foo.bar(),    //20
    	    (foo.bar)(),   //20  
    	    (foo.bar = foo.bar)(), 	//10	
    	    (foo.bar, foo.bar)()    //10
    	);
    
    欢迎各位大虾指正
  • 相关阅读:
    关于代码手写UI,xib和StoryBoard
    封装自己的framework静态库
    AsyncDisplayKit
    RunLoop
    AFNetworking2.0源码解析<三>
    AFNetworking2.0源码解析<四>
    AFNetworking2.0源码解析<二>
    AFNetworking2.0源码解析<一>
    多线程
    Mac svn 命令
  • 原文地址:https://www.cnblogs.com/he-zhi/p/6954306.html
Copyright © 2011-2022 走看看