你不知道的js面试题

1.编写一个方法,去掉数组的重复元素

var arr=["a","c","c","a","a","a","a","a","a","a"]

var arr2=[];

for(var i=0;i<arr.length;i++){

if(arr2.indexOf(arr[i])<0){

arr2.push(arr[i]);

}

}

console.log(arr2);

这里还是要推荐下小编的web前端学习 群 : 569146385,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括 小编自己整理的一份最新的web前端资料和0基础入门教程,欢迎初学和进 阶中的小伙伴。在不忙的时间我会给大家解惑。

2.判断一个字符串中出现次数最多的字符,统计这个次数

扫描二维码关注公众号,回复: 5992313 查看本文章

var str="fdsffdsgtfdhgdfgdffd";

var obj={};

var arr=[];

for(var i=0;i<str.length;i++){

var num=str[i];

if(!obj[num]){

obj[num]=1;

}else{

obj[num]++;

}

}

var a=0;

var b=0;

for(key in obj){

if(b<obj[key]){

b=obj[key];

a=key;

}

}

console.log("字母:"+a+"次数"+b);

3.Javascript多人开发函数重名问题

(1) 可以开发前规定命名规范,根据不同开发人员开发的功能在函数前加前缀
(2) 将每个开发人员的函数封装到类中,调用的时候就调用类的函数,即使函数重名只要类名不重复就ok

4.编写一个方法,去掉数组的重复元素

var arr=["a","c","c","a","a","a","a","a","a","a"]

var arr2=[];

for(var i=0;i<arr.length;i++){

if(arr2.indexOf(arr[i])<0){

arr2.push(arr[i]);

}

}

console.log(arr2);

5.怎样添加、移除、移动、复制、创建和查找节点?

1)创建新节点

createDocumentFragment() //创建一个DOM片段

createElement() //创建一个具体的元素

createTextNode() //创建一个文本节点

2)添加、移除、替换、插入

appendChild() //添加

removeChild() //移除

replaceChild() //替换

insertBefore() //插入

3)查找

getElementsByTagName() //通过标签名称

getElementsByName() //通过元素的Name属性的值

getElementById() //通过元素Id,唯一性

6.javascript的typeof返回哪些数据类型

Object number function boolean underfind;

7.例举3种强制类型转换和2种隐式类型转换?

强制(parseInt,parseFloat,number)隐式(== – ===)

8.编写一个b继承a的方法

function A(name){

    this.name = name;

    this.sayHello = function(){alert(this.name+” say Hello!”);};

}

function B(name,id){

    this.temp = A;

    this.temp(name);        //相当于new A();

    delete this.temp;      

     this.id = id;  

    this.checkId = function(ID){alert(this.id==ID)};

}

9.如何阻止事件冒泡和默认事件

function stopBubble(e)

{

    if (e && e.stopPropagation)

        e.stopPropagation()

    else

        window.event.cancelBubble=true

}

return false

10.谈谈This对象的理解。

this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。
但是有一个总原则,那就是this指的是调用函数的那个对象。
this一般情况下:是全局对象Global。 作为方法调用,那么this就是指这个对象

11.javaScript中如何检测一个变量是一个String类型,请写出函数实现

var a=”dsds”;

console.log(typeof a);

12.Ajax是什么?Ajax的交互模型?同步和异步的区别

 Ajax包含技术JavaScript - ECMA、BOM、DOM、 Xml、XMLHttpRequest。

 Ajax交互模型:

  1.创建XMLHttpRequest对象

  2.客户端与服务器端建立连接

  3.客户端向服务器端发送数据

  4.客户端接收服务器端发送的数据

  同步交互

    之前所有的客户端与服务器端的交互

    客户端向服务器端发送请求,直到服务器端响应结果,这个过程中,用户不能做任何其他事情

  异步交互

    目前实现的客户端与服务器端的交互

客户端向服务器端发送请求,直到服务器端响应结果,这个过程中,用户可以做任何其他事情

13.jQuery中的raedy()与 window.onload事件的区别?

ready具有简写写法的

一个HTML页面允许编写多个ready

(速度快)只需等待DOM数结构加载完毕

window.onload

没有任何简写形式

一个HTML页面只许编写一个onload

(速度慢)必须等待HTML所有内容加载完毕

14.谈一谈你对闭包的理解

闭包:保护一个可重用的局部变量的词法结构

    为什么: 全局变量: 可重用,但易被污染

            局部变量: 不可重用,

    何时使用: 即可重用,又不会被污染

    如何创建闭包:

     1. 外层函数封装受保护的变量以及专门操作变量的内层函数

     2. 外层函数将操作变量的内层函数返回到外部

     3. 调用外层函数,获得内层函数的对象。

闭包实际操作时

    1. 找受保护的变量

    2. 同一次外层函数调用返回的内层函数,始终使用同一个受保护的局部变量

3. 每调用一次外层函数,就会多创建一个受保护的变量的副本。

15.javascript中的设计模式有哪些?请尝试说几种,并谈谈你对他的理解。(对js的理解考察的比较深)

第一种模式:js工厂模式

    var lev=function(){  

       return "啊打";  

    };  

    function Parent(){  

           var  Child = new Object();  

           Child.name="李小龙";  

           Child.age="30";  

           Child.lev=lev;  

         return Child;  

    };  

      

    var  x = Parent();  

    alert(x.name);  

    alert(x.lev());

说明:

1.在函数中定义对象,并定义对象的各种属性,,虽然属性可以为方法,但是建议将属性为方法的属性定义到函数之外,这样可以避免重复创建该方法

2.引用该对象的时候,这里使用的是 var x = Parent()而不是 var x = new Parent();因为后者会可能出现很多问题(前者也成为工厂经典方式,后者称之为混合工厂方式),不推荐使用new的方式使用该对象

3.在函数的最后返回该对象

4.不推荐使用这种方式创建对象,但应该了解

第二种模式:js构造函数模式

    var lev=function(){  

       return "啊打";  

    };  

    function Parent(){    

           this.name="李小龙";  

           this.age="30";  

           this.lev=lev;  

    };  

      

    var  x =new  Parent();  

    alert(x.name);  

    alert(x.lev());  

说明:

1.与工厂方式相比,使用构造函数方式创建对象,无需再函数内部重建创建对象,而使用this指代,并而函数无需明确return

2.同工厂模式一样,虽然属性的值可以为方法,扔建议将该方法定义在函数之外

3..同样的,不推荐使用这种方式创建对象,但仍需要了解

第三种模式:js原型模式

    var lev=function(){  

       return "啊打";  

    };  

    function Parent(){   };  

      Parent.prototype.name="李小龙";  

      Parent.prototype.age="30";  

      Parent.prototype.lev=lev;  

      

    var  x =new  Parent();  

    alert(x.name);  

    alert(x.lev());  

说明:

1.函数中不对属性进行定义

2.利用prototype属性对属性进行定义

3.同样的,不推荐使用这样方式创建对象

第四种模式:构造函数+原型的js混合的模式(推荐)

    function Parent(){  

      this.name="李小龙";  

      this.age=32;  

    };

    Parent.prototype.lev=function(){  

       return this.name;  

    };   

    var  x =new  Parent();

    alert(x.lev());

说明:

1.该模式是指混合搭配使用构造函数方式和原型方式

2.将所有属性不是方法的属性定义在函数中(构造函数方式)

将所有属性值为方法的属性利用prototype在函数之外定义(原型方式)

3.推荐使用这样方式创建对象,这样做有好处和为什么不单独使用构造函数方式和原型方式,由于篇幅问题这里不予讨论

第五种模式:构造函数+原型的动态原型模式(推荐)

    function Parent(){  

      this.name="李小龙";  

     this.age=32;  

     if(typeof Parent._lev=="undefined"){     

         Parent.prototype.lev=function(){  

                   return this.name;  

         }  

         Parent._lev=true;  

     }  

         

    };    

    var  x =new  Parent();  

    alert(x.lev());  

说明:

1.动态原型方式可以理解为混合构造函数,原型方式的一个特例

2.该模式中,属性为方法的属性直接在函数中进行了定义,但是因为

if(typeof Parent._lev=="undefined"){                  

           Parent._lev=true;

    }  

从而保证创建该对象的实例时,属性的方法不会被重复创建

16.js面向对象中有几大特点?

面向对象三大特点: 封装,继承,多态

   封装:将一个事物的属性和方法集中定义在一个对象中

     为什么: 单独的数据没有意义,不许附着在一个具体对象

             代码重用,便于维护;

   继承:父对象的属性和方法,子对象可直接使用

     为什么: 节约内存空间;代码重用

   多态:同一个事物,在不同情况下表现出不同状态。

     为什么: 体现子对象与父对象的差异!

     重载: 同一个函数,根据传入参数的不同,执行不同的逻辑

     重写: 子对象觉得父对象的成员不好用,可自己定义同名成员,覆盖父对象的成员。

17.document.write和innerHTML的区别

document.wite只能重绘整个页面

innerHTML可以重绘页面的一部分

18.call和apply的区别是什么?

  替换this的对象

  何时使用: 如果当前this的对象不是想要的,就要替换

  相同点: 不向函数中传递参数时,完全相同

  不同点: call,要求函数的参数值必须单独传入

         apply,要求函数的参数值可用数组传入

19.AngularJs的四大特性

1.采用MVC模式

2.双向数据绑定

3.依赖注入

4.模块化设计

20.谈一谈你对冒泡的理解。

优化: 如果多个子元素,绑定了相同的事件

      应该仅在父元素定义绑定一次事件处理函数即可

为什么: 网页中,绑定的事件处理函数的个数越少,页面运行效率就越高!

如何利用冒泡:

   1. 获取目标对象:

      DOM: e.target

      IE8: e.srcElement

     兼容模式: var target=e.target||e.srcElement

   2. 根据目标对象的不同,执行不同操作

猜你喜欢

转载自blog.csdn.net/moondaim/article/details/89479718