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
    	);
    
    欢迎各位大虾指正
  • 相关阅读:
    模拟登陆江西理工大学教务系统
    python3爬虫 -----华东交大校园新闻爬取与数据分析
    以selenium模拟登陆12306
    PAT (Basic Level) Practice (中文)1076 Wifi密码 (15 分)
    PAT (Basic Level) Practice (中文)1047 编程团体赛 (20 分)
    PAT (Basic Level) Practice (中文)1029 旧键盘 (20 分)
    PAT (Basic Level) Practice (中文)1016 部分A+B (15 分)
    PAT (Basic Level) Practice (中文)1031 查验身份证 (15 分)
    PAT (Basic Level) Practice (中文)1041 考试座位号 (15 分)
    PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)
  • 原文地址:https://www.cnblogs.com/he-zhi/p/6954306.html
Copyright © 2011-2022 走看看