JS的100道经典面试题(二)只看这四篇就够了,收藏起来以后偷偷看

年轻人你不讲武德,耗子尾汁~~~
在这里插入图片描述

总结就是为了形成自己的js知识网,提升自己,加油!

开始干

26、javascript继承的6种方法
(1)原型链继承
(2)借用构造函数继承
(3)组合继承(原型+借用构造)
(4)原型式继承
(5)寄生式继承
(6)寄生组合式继承

27、创建ajax的过程
(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象.
(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.
(3)设置响应HTTP请求状态变化的函数.
(4)发送HTTP请求.
(5)获取异步调用返回的数据.
(6)使用JavaScript和DOM实现局部刷新.

    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open('GET','demo.php','true');
    xmlHttp.send()
    xmlHttp.onreadystatechange = function(){
    
    
        if(xmlHttp.readyState === 4 & xmlHttp.status === 200){
    
    
        }
    }

28、异步加载和延迟加载
(1)异步加载的方案: 动态插入script标签
(2)通过ajax去获取js代码,然后通过eval执行
(3)script标签上添加defer或者async属性
(4)创建并插入iframe,让它异步执行js
(5)延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。

29、Flash、Ajax各自的优缺点,在使用中如何取舍?
Flash适合处理多媒体、矢量图形、访问机器;对CSS、处理文本上不足,不容易被搜索。
-Ajax对CSS、文本支持很好,支持搜索;多媒体、矢量图形、机器访问不足。
共同点:与服务器的无刷新传递消息、用户离线和在线状态、操作DOM
请解释一下 JavaScript 的同源策略
概念:同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。
这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议
指一段脚本只能读取来自同一来源的窗口和文档的属性。

30、为什么要有同源限制?
我们举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。
缺点:
现在网站的JS 都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被 merge 后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节。

31、事件、IE与火狐的事件机制有什么区别? 如何阻止冒泡?
(1)我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。
(2)事件处理机制:IE是事件冒泡、firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件。;
(3) ev.stopPropagation();注意旧ie的方法 ev.cancelBubble = true;

32、ajax的缺点
(1)ajax不支持浏览器back按钮。
(2)安全问题 AJAX暴露了与服务器交互的细节。
(3)对搜索引擎的支持比较弱。
(4)破坏了程序的异常机制。
(5)不容易调试。

33、IE缓存问题
在IE浏览器下,如果请求的方法是GET,并且请求的URL不变,那么这个请求的结果就会被缓存。解决这个问题的办法可以通过实时改变请求的URL,只要URL改变,就不会被缓存,可以通过在URL末尾添加上随机的时间戳参数(‘t’= + new Date().getTime())
或者:

open('GET','demo.php?rand=+Math.random()',true);//

Ajax请求的页面历史记录状态问题
可以通过锚点来记录状态,location.hash。让浏览器记录Ajax请求时页面状态的变化。
还可以通过HTML5的history.pushState,来实现浏览器地址栏的无刷新改变

34、说说你对Promise的理解
依照 Promise/A+ 的定义,Promise 有四种状态:
pending: 初始状态, 非 fulfilled 或 rejected.
fulfilled: 成功的操作.
rejected: 失败的操作.
settled: Promise已被fulfilled或rejected,且不是pending
另外, fulfilled 与 rejected 一起合称 settled。
Promise 对象用来进行延迟(deferred) 和异步(asynchronous ) 计算。
Promise 的构造函数
构造一个 Promise,最基本的用法如下:

    var promise = new Promise(function(resolve, reject) {
    
    
        if (...) {
    
      // succeed
            resolve(result);
        } else {
    
       // fails
            reject(Error(errMessage));
        }
    });

Promise 实例拥有 then 方法(具有 then 方法的对象,通常被称为 thenable)。它的使用方法如下:
promise.then(onFulfilled, onRejected)
接收两个函数作为参数,一个在 fulfilled 的时候被调用,一个在 rejected 的时候被调用,接收参数就是 future,onFulfilled对应 resolve, onRejected 对应 reject。

35、实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

    Object.prototype.clone = function(){
    
    
            var o = this.constructor === Array ? [] : {
    
    };
            for(var e in this){
    
    
                    o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];
            }
            return o;
    }

36、说说严格模式的限制
严格模式主要有以下限制:
变量必须声明后再使用
函数的参数不能有同名属性,否则报错
不能使用with语句
不能对只读属性赋值,否则报错
不能使用前缀0表示八进制数,否则报错
不能删除不可删除的属性,否则报错
不能删除变量delete prop,会报错,只能删除属性delete global[prop]
eval不会在它的外层作用域引入变量
eval和arguments不能被重新赋值
arguments不会自动反映函数参数的变化
不能使用arguments.callee
不能使用arguments.caller
禁止this指向全局对象
不能使用fn.caller和fn.arguments获取函数调用的堆栈
增加了保留字(比如protected、static和interface)

设立”严格模式”的目的,主要有以下几个:
消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
消除代码运行的一些不安全之处,保证代码运行的安全;
提高编译器效率,增加运行速度;
为未来新版本的Javascript做好铺垫。
注:经过测试IE6,7,8,9均不支持严格模式。

37、如何删除一个cookie
(1)将时间设为当前时间往前一点。

var date = new Date();
date.setDate(date.getDate() - 1);//真正的删除
setDate()方法用于设置一个月的某一天。

(2)expires的设置

  document.cookie = 'user='+ encodeURIComponent('name')  + ';expires = ' + new Date(0)

<strong><em><b><i>标签
<strong> 标签和 <em> 标签一样,用于强调文本,但它强调的程度更强一些。em 是 斜体强调标签,更强烈强调,表示内容的强调点。相当于html元素中的 <i>...</i>;
< b > < i >是视觉要素,分别表示无意义的加粗,无意义的斜体。

em 和 strong 是表达要素(phrase elements)。

38、编写一个方法 求一个字符串的字节长度
假设:一个英文字符占用一个字节,一个中文字符占用两个字节

 function GetBytes(str){
    
    
        var len = str.length;
        var bytes = len;
        for(var i=0; i<len; i++){
    
    
            if (str.charCodeAt(i) > 255) bytes++;
        }
        return bytes;
    }
alert(GetBytes("你好,as"));

39、说说你对MVC和MVVM的理解
MVC
View 传送指令到 Controller
Controller 完成业务逻辑后,要求 Model 改变状态
Model 将新的数据发送到 View,用户得到反馈
所有通信都是单向的。

Angular它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。
组成部分Model、View、ViewModel

View:UI界面
ViewModel:它是View的抽象,负责View与Model之间信息转换,将View的Command传送到Model;
Model:数据访问层

请解释什么是事件代理
事件代理(Event Delegation),又称之为事件委托。是 JavaScript 中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能。
attribute和property的区别是什么?
attribute是dom元素在文档中作为html标签拥有的属性;
property就是dom元素在js中作为对象拥有的属性。
所以:
对于html的标准属性来说,attribute和property是同步的,是会自动更新的,
但是对于自定义的属性来说,他们是不同步的

40、请描述一下 cookies,sessionStorage 和 localStorage 的区别?
(1)cookie:存储在用户本地终端上的数据。有时也用cookies,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密。一般应用最典型的案列就是判断注册用户是否已经登过该网站。
(2)HTML5 提供了两种在客户端存储数据的新方法:(http://www.w3school.com.cn/html5/html_5_webstorage.asp)…两者都是仅在客户端(即浏览器)中保存,不参与和服务器的通信;
localStorage - 没有时间限制的数据存储,第二天、第二周或下一年之后,数据依然可用。
如何创建和访问 localStorage:

<script type="text/javascript">
localStorage.lastname="Smith";
document.write(localStorage.lastname);
</script>

下面的例子对用户访问页面的次数进行计数:

<script type="text/javascript">
if (localStorage.pagecount){
    
    
  localStorage.pagecount=Number(localStorage.pagecount) +1;
  }else{
    
    
  localStorage.pagecount=1;
  }
document.write("Visits "+ localStorage.pagecount + " time(s).");
</script>

sessionStorage - 针对一个 session 的数据存储,当用户关闭浏览器窗口后,数据会被删除。
创建并访问一个 sessionStorage:

<script type="text/javascript">
  sessionStorage.lastname="Smith";
  document.write(sessionStorage.lastname);
  </script>

下面的例子对用户在当前 session 中访问页面的次数进行计数:

<script type="text/javascript">
if (sessionStorage.pagecount){
    
    
  sessionStorage.pagecount=Number(sessionStorage.pagecount) +1;
  }else{
    
    
  sessionStorage.pagecount=1;
  }
document.write("Visits "+sessionStorage.pagecount+" time(s) this session.");
</script>

sessionStorage 、localStorage 和 cookie 之间的区别
共同点:都是保存在浏览器端,且同源的。
区别:cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递;cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。

而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。

作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便。

41、例举3种强制类型转换和2种隐式类型转换?
强制(parseInt,parseFloat,number)
隐式(== – ===)

42、split() join() 的区别
前者是切割成数组的形式,后者是将数组转换成字符串。

43、数组方法pop() push() unshift() shift()
Push()尾部添加,pop()尾部删除;Unshift()头部添加,shift()头部删除。

44、事件绑定和普通事件有什么区别
普通添加事件的方法:

var btn = document.getElementById("hello");
btn.onclick = function(){
    
    
	alert(1);
}
btn.onclick = function(){
    
    
	alert(2);
}

执行上面的代码只会alert 2
事件绑定方式添加事件:

var btn = document.getElementById("hello");
btn.addEventListener("click",function(){
    
    
	alert(1);
},false);
btn.addEventListener("click",function(){
    
    
	alert(2);
},false);

执行上面的代码会先alert 1 再 alert 2
普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的,而事件绑定(addEventListener)方式添加事件可以添加多个。
IE和DOM事件流的区别
①执行顺序不一样;②参数不一样;③事件加不加on;④this指向问题。

45、IE和标准下有哪些兼容性的写法
Var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target。

46、ajax请求的时候get 和post方式的区别
①一个在url后面,一个放在虚拟载体里面;
②有大小限制;
③安全问题;
④应用不同:一个是论坛等只需要请求的,一个是类似修改密码的。
47、ajax请求时,如何解释json数据
使用eval parse,鉴于安全性考虑,使用parse更靠谱。

48、写一个获取非行间样式的函数

function getStyle(obj,attr,value)
{
    
    
if(!value){
    
    
if(obj.currentStyle){
    
    
return obj.currentStyle(attr)
}else{
    
    
obj.getComputedStyle(attr,false)
}}
else{
    
    
obj.style[attr]=value
}}

49、事件委托是什么
让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!

50、如何阻止事件冒泡和默认事件
event.cancelBubble = true
event.stopPropagation()
return false

后续还在陆续更新~~~

猜你喜欢

转载自blog.csdn.net/qq_43291759/article/details/109763626