js基础面试题

一、数据类型

  1. 什么是引用类型,值类型?
        值类型key与value存储在栈中(量小)
    引用类型在栈存储的引用地址,在堆中存储是数据(量大)
    把引用类型赋值给一个变量,是吧变量的引用地址指向引用类型堆中地址
  2. 值类型
        String字符,Number数字,Boolean布尔,undefined未定义  null空(特殊) Symbol符号
  3. 引用类型
        Object对象 Array数字 Function 函数 Map图  Set集合
  4. 判断数据类型
        typeof 类型  instanceof  实例 constructor 构造函数
        Array.isArray() 是否为数组  Object.prototype.toString.call(obj) 原型
  5. typeof判断
        typeof  “abc”      string
    typeof   123       number
    typeof   true      boolean
    typeof   undefined  undefined
    typeof  null        object
    typeof  Symbol()  symbol
    typeof   {}    object
    typeof   []     object
    typeof   function(){}    function
    typeof new Map()     object
    typeof  new Set()      object

        适合判断 值了与引用类型 不能判断具体引用类型
  6. construtor
        判断实例对象构造函数
    [].constructor === Array     true
  7. Object.prototype.toString.call(obj).slice(8,-1)
    返回数据的精确类型

二、深拷贝

  1. js 拷贝一个对象

  2. 深拷贝,目标对象与源对象相互之间切断联系

  3. JSON.parse(JSON.stringify(数据))
        json数据类只支持 布尔,字符串,数字 null,undefined  array object
    会忽略函数 等其他类型数据
  4. 通过判断类型 递归深拷贝
        递归就是函数调用自己
    一定要有结束条件
    <script>
    			// js 拷贝一个对象 
    			// 深拷贝,目标对象与源对象相互之间切断联系
    			var  obj1 = {name:"mumu",age:18,friend:["小红","小绿",{name:"小蓝",job:"teacher"}],say(){alert("你好我是"+this.name)}};
    			// 01 JSON转字符,字符串转对象 			
    			var obj2 = JSON.parse(JSON.stringify(obj1))
    			// json字符串的值只会保留 数组,对象,字符串 ,数字,null,undefined
    			// 对象中的函数会被过滤掉(一般数据也是不带函数的
    			// 02 通过递归拷贝
    			// 从前有座山
    		 
    			
    		</script>

三、隐士转换

  1. + 字符串连接符号  会尝试把其他类型转换为 字符串
    /* var a = "100";
    			var b = 10;
    			var c = a + b; // 10010 
    			alert(c); */
    			// 01 字符串和任意数据+连接都会转换为字符串
  2. + - * /  == 会尝试把其他类型转换为数字
        转换失败 NaN
        false 转换为 0
        true 转换 1
    var a = "10";
    			 var a = "abc10";
    			 var a = true;
    			
    			var a = false;
    			var b = 2;
    			var c = a*b; //20;
    			// 02 数学运算符号会会尝试隐是转换数据为数字
    			// 如果数据没有转换数字成功 结果就是 NaN (not a num的检测)
    			// true转换为数字默认转换为1  false 默认会转换为0 
    			alert(c)
  3. ><>= <=  ! !=  ==  判断与逻辑返回会尝试把其他类型转换布尔值
        falsely变量转换为false
    “” null NaN undefined 0 转换为false
    var a = "";
    			var b = true;
    			// alert(!!a);//false
    			// 03 逻辑与比较运算符号会把 变量转换为布尔值
    			// 空字符串,0,null,undefined NaN false 才会被转换为false,其他都会被转换为true
    			// 把以上的变量值称为flasely变量值,其他的变量都称为truely变量值
    			// alert(!!-1);//true
    			alert(!!NaN)

四、严格等于

  1. // == 判断隐是转换后值是否相等

     // === 判断类型与值是否相对

    // === 严格等于 判断类型与值是否相对
    			// alert(0 === ""); // false
    			// alert([] === []);//false
    			// alert({} === {}); //false
    			// alert(null === undefined) //false
    			alert(null === null) // true
  2. ==
    判断隐式转换后的值
    “100” == 100  // true
    null == undefined  //true
    0 == false  //true
    特例:NaN === null  // false
  3. 什么时候用=== 什么用 ==

    应该都用=== 严格等于判断是为null还是undefined 可以用===

五、if语句

  1. if()中判断的是否为truely变量
      var a = 10;
    		 if(a){
    			 alert("条件通过")
    		 } 
  2. falsely变量:false  “”   0 NaN undefined null
    两次取反 !!a得到结果为false
    /* var b = "";
    		 if(b){
    			 alert("通过")
    		 }else{
    			 alert("不通过")
    		 }
    			 */
  3. 除了falsely变量其他都为truely变量

六、逻辑且与逻辑或

  1. A||B  或
        A为真(truely) 结果为A ,否则结果为B
  2. A&&B  或
        A为假(falsely) 结果为A,否则结果为B
    <script>		 
    		// || 或 如果前面的变量为truely 最终的结果为第一个,如果为falely结果为第二个;
    		var a  = 15 ||0; //15 转换结果为true  a的值就是15
    		var b = false || 50; //false转换的结果为false b的值是50;
    		var c = false ||undefined;
    		var d = 0 || false;
    		// alert(a);
    		// alert(b);
    		// alert(c);
    		alert(d);
    			
    		</script>
  3. 逻辑且判断对象
        if(a&&a.b&&a.b.c){}
        if(a?.b?.c){}
        如果有a并且有a.b并且有a.b.c
        if(a.b.c){}
  4. 在逻辑判断中 &&前面的值为falsely后面的不执行,前面位truly则看&&后面的值

    var obj = {age:15,leg:{len:70,width:30}};
    		// if(obj.abc.len){
    		// if(obj&&obj.abc&&obj.abc.len){
    		if(obj?.abc?.len){ //es6的语法
    			alert("通过")
    		}else{
    			alert("不通过");
    		}
    // 在 Uncaught TypeError: Cannot read properties of undefined (reading 'len') 
    		// 在undefined上面读取len读取不到

七、原型与原型链

  1. 原型与原型链有什么作用?

    01 在js中实现继承 02 实现类的实例方法扩展

  2. 怎么样让所有的数组求最大最小值通用方法

    数组数组Array的实例都拥有最大最小值方  把自定义方法挂载到类的原型上

  3. 显示原型
        类/构造函数都一个显示显示原型protype
    (本质是就是个对象)
  4. 隐式原型
        每个实例都有一个隐私原型__proto__
  5. 显与隐关系
        类显示原型protype等于其创建的实例的隐式原型__proto__
  6. 原型链
        查找对象实例的方法和属性时,先在自身找,找不到则沿着__proto__向上查找,__proto__形成的链条关系我们称为原型链(实现了js继承)
  7. 原型与原型链的作用
        实现了js的继承
        实现了实例的公用属性和方法
  8. 显与隐关系
        var arr = [];
    arr.__proto__ === Array.prototype
        类显示原型protype等于其创建的实例的隐式原型__proto__
    // 创建3个类解释原型与原型链 People  Student 
    			// People  eat方法  age属性  name属性
    			// Student 继承People类  study方法  age属性 name属性 no学号
    			// 01 创建People类
    			function People(name,age){
    				this.name = name;
    				this.age = age;
    			}
    			// 02 给pepole显示原型添加 eat方法
    			People.prototype.eat = function(){
    				console.log(this.name+"正在吃饭")
    			}
  9. 原型链图标演示
  10. js实现继承 class 的 extends方法
      
      class Student extends People{
        constructor(name,age,no){
         //类中继承构造函数
         super(name,age)
         ....
       }
    }
  11. js实现继承 1使用原型链
       
     Stuent构造函数中继承People
    function Student(name,age,no){
      People.call(this,name,age)
      ....
    }

        2. 继承原型链
    Student.prototype = Object.create(People.prototype)

        3. 修正Student构造函数
    Stuent.prototype.constructor = Student

    实例公用方法
    扩展
        Array.prototype.max = function(){return Math.max(...this))}
    所有数组将拥有max方法
        String.prototype.reverse = function(){ return this.split("").reverse().join("")}
    所有字符串将拥有 reverse  方法
        注意:一般不要修改默认对象上的方法,扩展也谨慎

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值