前端JavaScripte二十五道面试题

1.介绍js的基本数据类型

undefined,null,boolean,number,string

2.js有哪些内置对象?

数据封装类对象:object,array,boolean,number,string
其他对象:function,Arguments,Math,Date,RegExp,Error

3.this的理解

this总是指向函数的直接调用者(而非简介调用者);
如果有new关键字,this指向new出来的那个对象;
在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window

4.eval是做什么的?

他的功能是把字符串解析成js代码并运行;
eval("alert(123)");

5.DOM怎样添加,移出,移动,复制,创建和查找节点?

createDocumentFragment() 创建一个DOM片段
createElement() 创建一个具体的元素
createTextNode()创建一个文本节点
appendChild() 添加
removeChild()移出
replaceChild()替换
insertBefore() 在已有的子节点前插入一个新的子节点
getElementsByTagName()通过标签名称查找
getElementsByName()通过元素的Name属性的值
getElementByid()通过元素id,查找

6.null和undefined的区别

null是表示无的对象,转为数值时是0
undefined是一个表示无的原始值,转为数值时为NaN
undefined
1.变量被声明了,但没有赋值时,就等于undefined
2.调用函数时,一个提供的参数没用提供,该参数等于undefined
3.对象没用赋值的属性,该属性的值为undefined
4.函数没用返回值,默认返回undefined
unll:
1.作为函数的参数,表示该函数的参数不是对象
2.作为对象原型链的终点

7.new操作符具干了什么?

1.创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型
2.属性和方法被加入道this引用的对象中
3.新创建的对象由this所引用,并且最后隐式的返回this

8.JSON的了解

JSON是一种轻量级的数据交换格式,它是基于javaScript的一个子集。数据格式简单,易于读写,占用带宽小
格式:采用键对值,例如:{“age”:“12”,”name“:“back”}

9.call() 和apply() 的区别

call, apply作用就是借用别人的方法来调用,就像调用自己的一样.

function add(a,b){
            alert(a+b);
        }
    function sub(a,b){
            alert(a-b);
        }
    add.call(sub,3,1);
    add.apply(sub,[3,1]);

他们的不同就在call的参数分别写出来apply的参数是一个数组

10.如何获取UA(User-Agent )
User-Agent是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。用较为普通的一点来说,是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识

function whatBrowser() {
//获取完整的浏览器名称
document.Browser.Name.value=navigator.appName; 
//获取浏览器的版本,一般不与实际的浏览器版本对应
document.Browser.Version.value=navigator.appVersion; 
//获取浏览器的名称。通常都是Mozilla,即使在非Mozilla的浏览器中也是如此
document.Browser.Code.value=navigator.appCodeName; 
//获取浏览器的用户代理字符串
document.Browser.Agent.value=navigator.userAgent;

11.那些常见操作会造成内存泄漏?

内存泄漏指任何对象在你不再拥有或需要它之后仍然存在
1.没有清理的DOM元素引用
2.闭包引起的内存泄露
3.setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏

12.线程与进程的区别

一个程序至少有一个进程,一个进程至少有一个线程
1.定义方面:进程是程序在某个数据集合上的一次运行活动;线程是进程中的一个执行路径(进程可以创建多个线程)
2.角色方面:在支持线程机制的系统中,进程是系统资源分配的单位,线程是CPU调度的单位
3.资源共享方面:进程之间不能共享资源,而线程共享所在进程的地址空间和其他资源,同时线程还有自己的栈和指针,程序计数器等寄存器
4.独立性方面:进程有自己独立的地址空间,而线程没用,线程必须依赖于进程而存在

13.如何解决跨域问题?

JSONP:
原理是动态插入script标签,通过script标签引入一个js文件,这个js文件载入成功之后会执行我们在url参数中指定的函数,并且会把我们需要的json数据据作为参数传入;
由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名,协议,端口)的资源,为了实现跨域请求,可以通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,从而解决了跨域的数据请求;
优点是兼容性好,简单易用,支持浏览器与服务器双向通信,缺点是只支持GET请求

14.javascript垃圾回收方法

标记回收:当变量进入执行环境的时候,垃圾回收器将其标记为进入环境,当变量离开环境的时候,将其标记为离开环境

15.快速 排序的思想并实现一个快排

“快速排序”的思想很简单,整个排序过程只需要三步:
  (1)在数据集之中,找一个基准点
  (2)建立两个数组,分别存储左边和右边的数组
  (3)利用递归进行下次比较
  
注意:只能是数值类型的数据,不能是字符数值类型

<script type="text/javascript">
        function quickSort(arr){
            if(arr.length<=1){
                return arr;//如果数组只有一个数,就直接返回;
            }
            var num = Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整
            var numValue = arr.splice(num,1);//找到中间数的值
            var left = [];
            var right = [];
            for(var i=0;i<arr.length;i++){
                if(arr[i]<numValue){
                    left.push(arr[i]);//基准点的左边的数传到左边数组
                }
                else{
                   right.push(arr[i]);//基准点的右边的数传到右边数组
                }
            }

            return quickSort(left).concat(numValue,quickSort(right));//递归不断重复比较
        }

        alert(quickSort([32,45,37,16,2,87]));//弹出“2,16,32,37,45,87”
    </script>

16.ES6的了解

新增模板字符串(为JavaScript提供了简单的字符串插值功能)
箭头函数(操作符左边为输入的参数,右边是进行的操作以及返回的值lnputs=>outputs)
for-of(用来遍历数据-例如数组中的值)
ES6将promise对象纳入规范,提供了原生的Promise对象,增加了let和const命令,用来声明变量
增加了块级作用域
引入module模块的概念

17.用过那些设计模式?

1.工厂模式:主要好处就是可以消除对象间的耦合,通过使用工厂方法而不是new关键字。将所有实例化的代码集中在一个位置防止代码重复
2.工厂模式解决了重复实例化的问题,但是还出现一个问题,就是识别问题,因为根本无法搞清楚它们到底是那个对象的实例
3.构造函数模式:使用构造函数的方法,即解决了重复实例化的问题,又解决了对象识别的问题,与工厂模式的不同之处是,构造函数方法没用显示的创建对象(new Object()),直接将属性和方法赋值给this对象;没用renturn语句
4.原型链模式
5.构造和原型链的组合模式

18.说说你对闭包的理解

使用闭包主要是为了设计私有的方法和变量。闭包的优点是避免全局变量的污染,缺点是闭包会常驻内存,增大内存的使用量,使用不当很容易造成内存泄漏,在js中,函数即闭包,只有函数才会产生闭包的概念
闭包有三个特性:
(1)函数嵌套函数
(2)函数内部可以引用外部的参数和变量
(3)参数和变量不会被垃圾回收机制回收

19.请谈谈cookie的弊端

cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的
第一:每个特定的域名下最多生成20个cookie
(1)IE6或更低版本最多20个cookie
(2)IE7和之后的版本最后可以有50个cookie。
(3)Firefox最多50个cookie
(4)chrome和Safari没有做硬性限制
IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie。
cookie的最大大约为4096字节,为了兼容性,一般不能超过4095字节。
优点:极高的扩展性和可用性
通过良好的编程,控制保存在cookie中的session对象的大小。
通过加密和安全传输技术(SSL),减少cookie被破解的可能性。
只在cookie中存放不敏感数据,即使被盗也不会有重大损失。
控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。
缺点:
Cookie数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉.
安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。
有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

20.浏览器本地存储

HTML5中提供了localStorage
html5中的Web Storage包括了两种存储方式:sessionStoragelocalStorage。
sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。
localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

21.cookie 和session 的区别

(1)cookie数据存放在客户的浏览器上,session数据放在服务器上。
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
(4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
(5)所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中

22.如何实现浏览器内多个标签页之间的通信?

调用localstorge,cookies等本地存储方式

23.js延迟加载的方式有哪些?

defer和async,动态创建DOM方式(创建script,插入道DOM中,加载完毕后callBack),按需异步载入js

24.举例IE与其他浏览器不一样的特性

CSS圆角:ie7以下不支持

25.javascript对象的几种创建方式

(1)工厂模式
(2)构造函数模式
(3)原型模式
(4)混合构造函数和原型模式
(5)动态原型模式
(6)寄生构造函数模式
(7)稳妥构造函数模式

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值