【WEB】JS面试题涉及基础知识总结(一)

一.变量类型

1.变量类型:undefined,string,number,boolean,function,object
变量类型分为值类型与引用类型。

  • 值类型:
  • 引用类型:对象,数组,函数

注:object类型包括:对象,数组以及NULL.
2.值类型强制类型转换的几种场景:

  • 字符串拼接:var a=100+’10’;//10010
  • ‘= =’运算符:100 ==‘100’0==‘’null==undefined
  • 逻辑运算:100&&0//0
  • if语句:var b=100; if(b){}

3.JS内置函数(数据封装类对象)
Object,String,Array,Boolean,Number,Function,Date,RegExp,Error

4.如何理解JSON
是个JS对象,有两个API。

  • JSON.parse();//对象转字符
  • JSON.stringify()//字符转对象

经典面试题解答:
1.JS中使用typeof能得到哪些类型?
6中基本类型:undefined,boolean,number,string,object,function

2.何时使用===何时使用==?
使用==的情况:
if(obj.a==null){}//相当于obj.a===undefined//obj.a===null
除此之外,均使用===

二.原型和原型链

1.构造函数

function Foo(){}//默认自动返回this

2.构造函数扩展:

var a={}
var a=[]
function Foo(){... } //均是构造函数的省略写法

3.原型链的规则和示例:(重要!!!)

  • 所有的引用类型,都具有对象特性,即可自由扩展属性。(除了null)
  • 所有的引用类型,都具有一个proto属性,属性值是一个普通的对象。
  • 所有的函数,都有一个prototype属性,属性值是一个普通对象。
  • 所有的引用类型,proto属性指向它的构造函数的prototype属性obj.proto==Object.prototype
  • 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么就回去它的proto中寻找。

这里写图片描述

经典面试题解答:
1.如何判断一个变量是数组
arr instanceof Array
2.描述一个对象new的过程:
创建一个对象,this指向这个对象;执行代码,并对this赋值,返回this
3.写一个原型链继承的例子(如下)
4.zepto源码中如何使用原型链

function Ele(id){
    this.element=document.getElementById(id);
    }
Ele.prototype.html=fucntion(val){
    var elem=this.element;
    if(val){
    elem.innerHTML=val;
    return this;}//返回了this,就可以链式调用
    else{
    return elem.innerHTML;}
}
Ele.prototype.on=fucntion(type,fn){
    var elem=this.elem
    elem.addEventListener(type,fn);
    return this;
}

var element=new Elem("btn");
element.html().on("click",fn);//链式调用

三.作用域与闭包

1.执行上下文

  • 范围:一个script或是一个函数。
  • 全局:变量定义,函数声明
  • 函数:变量定义,函数声明,this.arguments.

注:注意函数声明和函数表达式的区别。

2.this:

在执行时才能确认值,定义时无法确认。
以下this的应用场景。

  • 作为构造函数执行
  • 作为对象属性执行:a.fn//对象指向该对象
  • 作为普通函数执行:function(){this}//this===window
  • call,bind,apply: function fn(name){console.log(this) alert(name)} fn.call({x:100},’zhangsan’)//{x:100}

3.作用域
JS没有块级作用域,只有函数和全局作用域
4.作用域链

  • 自由变量:当前作用域没有定义的变量,即自由变量。
  • 去父级的作用域寻找:哪个函数定义了该函数,那么就是该函数的父级作用域。

5、闭包
使用场景:

  • 函数作为返回值
  • 函数作为参数传递

经典面试题

1.对变量提升的理解:变量定义&函数声明
2.创建10个< a>。点击的时候弹出来对应的序号。

for(i=0;i<10;i++){
(function(i){
     var a=document.createElement("a");
      a.addEventListener("click",function(e){
      e.preventDefault();
      alert(i);
      })
})(i);

}

3.如何理解作用域?

自由变量。
作用域链,即自由变量的查找。
闭包的两个场景。

4.实际开发中闭包的使用?

//闭包实际应用与封装变量,收敛权限。
function isFirstLoad(id){
    var _list=[]
    return function(id){
        if(_list.indexof(id)==0){
            return false;
        }else{
            _list.push(id)
            return true
        }
    }
}
var firstload=isFirstLoad(10);//true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值