关于JS数组的栈和队列操作

1、js支持重载吗?

虽然js 本身并没有函数重载,但是可以用arguments来模拟重载,函数名相同,参数不同,arguments的length属性,获取参数个数,索引属性获取参数值
2、什么是作用域链对象?
专门保存了函数对象可用变量的位置的对象(栈)都有默认指向window对象地址。
3、什么是闭包?
即反复使用局部变量,又避免全局污染,就要用闭包。
闭包三特点:
1. 定义外层函数,封装被保护的局部变量
2. 定义内层函数,执行对外层函数局部变量的操作
3. 外层函数返回内层函数的对象
4、实现开发很少使用,

区别:

jquery--clone(boolean)是否复制事件
DOM---cloneNode(boolean)是否复制后代节点,文本内容

5、HTML DOM 与核心DOM?

W3C DOM 标准被分为 3 个不同的部分:核心 DOM、XML DOM、HTML DOM
HTML DOM:
HTML DOM 是:标准对象模型、标准编程接口、W3C 标准
HTML DOM 定义了所有 HTML 元素的对象和属性,访问和操作 HTML 文档的标准方法。
换言之,HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。
对象:image,Table,Form,Input,Select...HTML标签对象化
HTML DOM提供了封装好的各种对象:Image、Select、Option
给元素添加属性:
img.src=''; img.id=''; imd.title=''; img.className='' img.style.display='';
适用场合:
HTML DOM适合操作属性,如读取或修改属性的值

核心DOM :
对象:Document,Node, ElementNode,TextNode,AttributeNode,CommentNode,NodeList
核心DOM提供了统一的操作接口:createElement、appendChild、setAttribute、removeAttribute、nodeName

核心DOM创建新元素:
var newNode=document.createElement("img")
给元素添加属性:
e.setAttribure(‘’,‘’)
e.setAttribureNode(attr)
适用场合:
核心DOM适合操作节点,如创建,删除,查找等
HTML DOM不能实现所有功能,需要核心DOM补充,但是核心DOM可以做一切,只是API巨长

6、jQuery中attr()与prop()区别介绍

对于HTML元素本身就带有的固有属性,,如ID,CLASS在处理时,使用prop方法。
对于HTML元素我们自己自定义的DOM属性,如data-index在处理时,使用attr方法。

7、***事件周期:从浏览器捕获到事件后,一直到最后一个事件触发完,经历的过程。

js事件(DOM标准)的三个阶段分别为:捕获、目标、冒泡

--01. (由外向内)捕获:(父级元素先触发,子元素后触发)从最外层html元素开始,向内逐层记录每层元素绑定的事件处理函数。到目标元素为止
--02. 目标触发:自动执行目标元素上绑定的事件处理函数
--03. (由内向外)事件冒泡:(子级元素先触发,父元素后触发)从目标元素的父元素开始,逐层向上执行每层的事件处理函数,到最外层html结束。【目标元素是实际触发的元素】

标准浏览器:addEventListener("click","doSomething","true")方法,若第三参数为true则采用事件捕获,若为false,则采用事件冒泡
IE8的事件周期:2个阶段:没有捕获

所以它不支持addEventListener("click","doSomething","true")方法,所以ie浏览器使用ele.attachEvent("onclick",doSomething)
8、JS有几种数据类型

两种,基本数据类型(5种),引用类型(不确定)

基本数据类型包含:number、 string、boolean、null 、undefined

引用类型:ObjectArrayFunction

9、用原生JS在两个div之间插入一个div【.insertBefore(newItem,existingItem);】
html:<div class="div1"></div><div class="div3"></div>
var newdiv = document.createElement('div');
var div3 = document.querySelector('.div3');
div3.parentNode.insertBefore(newdiv,div3);

附加:B/S和C/S结构的区别
C/S结构,即Client/Server(客户端/服务器)结构,熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端
B/S结构,即Browser/Server(浏览器/服务器)结构,用户界面通过WWW浏览器实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构(三层结构)

10、Ajax实现的是B/S架构下的异步交互
11、AJAX与服务器端建立连接open(method,url,async)方法
async - 设置是否异步(Boolean类型)、默认值为true,表示异步、官方已经不推荐使用
12、AJAX创建XMLHttpRequest对象的方法
function getXhr(){
  var xhr = null;
  if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
  }else{
  xhr = new ActiveXObject('Microsoft.XMLHttp');
}
return xhr;
}
var xhr = getXhr();

13、实现Ajax的六步是什么?(不标准写法)
面试时问四步,就答前四个,问六步就答这六个
* 创建XMLHttpRequest对象
* 建立连接
* 发送请求
* 注册监听 - onreadystatechange事件
* 获取服务器端的通信状态 - readyState
* 获取服务器端的状态码
最后答一下,最后两步和注册监听应该放一起,不应该分开
官方规范给AJAX实现步骤就四步

14、HTML、XHTML、DHTML和XML的区别
--01:HTML就是网页 - 元素定义大小写
--02:XHTML就是严格意义的HTML - 元素定义小写
--03:DHTML - BOM|DOM
--04:XML作用:配置文件|数据格式

15、HTML(文本格式)、XML格式及JSON格式的优缺点
--01:HTML格式
--优点 - 简单
--缺点 - 解析复杂
--02:XML格式
--优点 - 易于构建复杂数据
--缺点 - 构建、解析复杂
--03:JSON格式
-- 优点 - 轻量级
--缺点 - 可能转换失败

16:跨域有两种:
(1)完全跨域 - IP不同【可理解成不同电脑】
--http://www.baidu.com
--http://www.tedu.cn
(2)跨子域 - IP相同,但端口号不同
--http://127.0.0.1:8888
--http://127.0.0.1:9999
02:域名
(1)顶级域名:如、http://www.baidu.com
(2)二级域名
--http://wenku.baidu.com
--http://www.baidu.com/kongjian

17、如何实现跨域请求【面试题】
通过 HTTP GET 请求载入 JSON 数据。
使用JSONP形式的回调函数来加载其他网域的JSON数据
JSONP - JSON Padding(JSON的一种使用模式)
核心内容 - HTML的<script>元素具有开放策略
实现方式
$.getJSON()方法的url后增加请求数据: url?callback=?

扩展内容:
null空实际不存在,为了安全,不出漏洞,为逻辑的完整性
如:判断value值是否为空
value==""||value==null
如:validity.tooLong,不会出现大于maxLength问题,代码中也要排除

什么是逻辑的完整性?【面试题】
我的代码适合你各种情况,要考虑清楚,代码中能不能出现的问题 ,都考虑进去,代码中都有写


18、Get与Post的主要区别

get相对于post更不安全,虽然都可以加密
get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中;
使用post提交的页面在点击【刷新】按钮的时候浏览器一般会提示“是否重新提交”,而get则不会;
用get的页面可以被搜索引擎抓取,而用post的则不可以;
用post可以提交的数据量非常大,而用get可以提交的数据量则非常小(2k),受限于网页地址的长度。
用post可以进行文件的提交,而用get则不可以。

19、JS中的typeof方法可以查看数据的类型

console.log(typeof 2); // number
console.log(typeof "2"); // string
console.log(typeof true); // boolean
console.log(typeof [2]); // object
console.log(typeof {name:2});// object
console.log(typeof function(){return 2});// function
console.log(typeof new Date());// object
console.log(typeof null); // object
console.log(typeof undefined);// undefined

20、数组的基本操作
push() 在数组末尾添加一个元素
pop() 在数组末尾删除一个元素
shift() 删除数组第一个元素
unshift 在数组开头添加一个元素
concat() 方法用于连接两个或多个数组
splice() 删除、插入、替换
1、删除功能,第一个参数为第一项位置,第二个参数为要删除几个。array.splice(index,num),返回值为删除内容,array为结果值。
2、插入功能,第一个参数(插入位置),第二个参数(0),第三个参数(插入的项)。array.splice(index,0,insertValue),返回值为空数组,array值为最终结果值。
3、替换功能,第一个参数(起始位置),第二个参数(删除的项数),第三个参数(插入任意数量的项)。array.splice(index,num,insertValue),返回值为删除内容,array为结果值。

slice() 方法可从已有的数组中返回选定的元素。

arrayObject.slice(start,end)

返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。 

21、正则表达式-基础知识Review
https://www.cnblogs.com/lalalagq/p/9750510.html

22、H5的Worker对象?
总结一句话,多线程解决方案,优势,如本课讲的售票系统例子
Web Workers 是 HTML5 提供的一个javascript多线程解决方案,
Web Worker的基本原理就是在当前javascript的主线程中,使用Worker类加载一个javascript文件来开辟一个新的线程,起到互不阻塞执行的效果,并且提供主线程和新线程之间数据交换的接口:postMessage()方法,onmessage事件。

总结:
HTML5中提供最好的内容---Web存储系统:
23、cookie存在的弊端:
1、cookie存储以键值对的形式保存,即key=value的格式、各个cookie之间一般是以";" 分隔。且value不能写“中文”。必须英文
2、cookie存储大小有限制:--一个浏览器最多只能存200个cookie文件,每个cookie文件大小有限制,不能存太多
3、Cookie存储在用户电脑硬盘中,


24、sessionStorage与localStorage
(1)sessionStorage存储系统存储数据的特点
* 当浏览器窗口关闭时,数据全部丢失
* 当再次打开浏览器窗口时,数据不能使用
(2)localStorage存储系统存储数据的特点
* 当浏览器窗口关闭时,数据依旧存储
* 当再次打开浏览器窗口时,数据继续使用
* 数据只能由用户删除

25、跨域请求:
同源策略--位于不同的域之间不能相互访问
实现跨域:
使用JSONP(JSON With Padding-JSON的一种使用模式)实现跨越
什么是JSONP:在html页面中的<script>元素具有开放策略,通过该元素实现跨域请求
实际上是使用$.getJSON()方法实现跨域:$.getJSON("url?callback=?",function(data){})

26、***按值传递(对于原始类型、对于引用类型):
两变量间赋值,或将变量作为参数传入函数时,其实仅将原变量中值,复制一个副本给对方变量:
对(原始类型)基础类型: 修改新变量的值,不影响原变量;
按值传递的差别:
原始类型:
//考点:按值传递!原始类型:修改新变量的值,不影响原变量;

var card=10;//全局
function pay(card){//局部
  card-=3;//局部
  console.log('余额'+card);////局部局部
}
pay(card);//7 //全局
console.log('余额'+card);//10

对引用类型: 仅复制对象的地址给对方,不创建新对象
通过新变量修改对象,等效于修改原对象
//考点:按地址传递!引用类型:地址给对方,当于修改原对象
var dong=["包","包","包","包","包"];
//0x1234
var xu=dong;
xu.length--;
console.log(dong)//["包","包","包","包"];
引用类型,
var my=["包","包","包","包","包"];
function eat(my){
my.length--;
console.log(my);
}
eat(my);//["包", "包", "包", "包"]
console.log(my)//["包", "包", "包", "包"]

27、null 和 undefined

null:是javascript关键字,描述“空值”,执行typeof,返回“object”,特殊对象值;可表示“数字”,“字符串”,“对象”是 “无值”的。

undefined:预定义的全局变量,值为“未定义”,是变量的一种取值,表示未初始化。

     当查询对象属性、数组元素的值时,如返回undefined表示属性或元素不存在;如函数没有任何返回值,也返回undefined。
只能从用法:
undefined:,专门由javaScript语言自己使用,为变量自动赋初值。
null,专门给程序员使用,手动清除一个变量的内容。

PS:虽然null和undefined是不同的,但都表示"值的空缺"二都可互换。null == undefined 结果为true ,===时为false 来区别,

何时需要清空一个变量:
只要一个变量引用的大对象不再被使用时,都要主动清空变量。
(面试,谈谈理解) 垃圾回收: js引擎会自动释放不再被任何变量引用的对象
垃圾回收器: 专门回收不再使用的对象的小程序,在内存中自动执行的小程序
1、记录每个对象,被几个变量引用着
每多一个变量引用对象,计数器就+1
当一个变量赋值为null时,表示不再引用对象,计数器-1
2、回收不再被任何变量引用的对象
当计数器减到0时,对象就被垃圾回收器回收
好的习惯: 只要一个对象不再使用,都要主动将变量置为null
null==undefined --》true

28、hash数组方法去重面试中写这种:【优点,这段代码速度很快,hash快,不需要遍历,直接找】

unction unique1(arr){
  for(var i=0,hash=[],result=[];i<arr.length;i++){  //如果hash中以arr当前元素为key的元素是undefined
    if(hash[arr[i]]===undefined){
      result[result.length]=arr[i];  //将arr当前元素追加到result结尾
      //为hash添加新元素,key为arr当前元素值,value都赋值为true
      hash[arr[i]]=true;  //写true等什么都可以,就是告诉有了,只要不是"undefined"就行
    }
  }  
  return result;
}
console.log(String(unique1([2,3,2,1,3,4,1,5])))

面试题 :注意:平时不用,但面试时会问到:谈谈对包装类型的理解?

29、包装类型:
什么是:专门封装原始类型的值 ,并提供操作原始类型值的API
为什么:原始类型的值本身没有任何功能!必须借助外部的对象提供功能。
何时:只要对原始类型的值调用API时,自动创建包装类型来辅助原始类型的值完成操作!
如何:不用手动创建和调用,都是自动创建和调用
比如:n.toFixed(2)--------->等效 ----->new Number(n).toFixed(2)
toFixed执行后,Number对象释放!

"张".charCodeAt()--------->等效 ----->new String('张').charCodeAt() 结果24352

30、js中有几类错误类型:6
SyntaxError:语法错误
ReferenceError:引用错误,找不到变量或对象
TypeError: 类型错误:错误的使用了类型、错误的使用的类型中方法
如:console.log(),把log写成l0g,写错时、
如下都报TypeError错误:document.log("e")、undefined()
RangeError:范围错误,参数超范围
如:var n=123.456; n.toFixed(-1)会报错,toFixed()范围在0-20之间,实践中1-100
EvalError:调用eval函数时出错
URLError::URL错误

31、CSS Sprites是什么,技术的优缺点?

CSS Sprites是一种网页图片应用处理方式,就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,"background-repeat","background-position"的组合进行背景定位。

优点:

减少网页HTTP请求(一次就好)、提高性能,在移动端尤为明显;
减小图片的总大小;
减少命名困扰;
更换风格方便,例如改背景色,好维护。 

缺点:

图片合成比较麻烦;
背景设置时,需要得到每个背景单元的精准位置;
维护合成图片时,最好只是往下加图片,不要更改图片;

32、什么是DOM回流?
  页面渲染时,我们对HTML结构简单的增删查改时,浏览器会对所有的dom进行重新排序,这就i是DOM回流,严重影响浏览器性能

33、提升页面性能优化
1.多采用雪碧图
2.防止超链接默认行为
3.减少DOM回流
4.减少向服务器发送请求次数  
鄙视题:
[]==[]---》 false,[]是新建数组的意思,新建了两个数组,地址不一样

34、

一、栈(堆栈)

栈是一种后进先出的数据结构
JS也为数组提供了方法可以实现类似入栈出栈功能, 入栈push()、 出栈pop();
二、队列
队列是一种先进先出的数据结构。
JS为数组提供了方法可以实现队列功能, 入队unshift()、 出队pop();

35、Ajax的优缺点?

优点:

页面局部刷新,提高用户体验度;
使用异步方式与服务器通信,具有更加迅速的响应能力;
减少服务器负担;
基于标准化,并被广泛支持的技术,不需要下载插件或小程序。
 缺:
不支持浏览器back按钮;
安全问题;
对搜索引擎的支持比较弱;

36、简述Ajax的交互模型,以及同步和异步的区别?(达内)

Ajax主要用于实现从服务器获取数据并局部刷新页面。其交互模型为,Ajax在浏览器端引入一个执行引擎,它一边接收user的请求,一边传送数据给服务器,并把服务器端返回的结果展示给user。

同步:脚本会停留并等待服务器发送回复然后继续。

异步:脚本不停留并处理可能的回复。

37、在此说明下alt和tite的区别。

alt:这是用以描述图形的文字,当图片无法显示时,这些文字会替代图片而被显示。当鼠标移至图片上该些文字亦会显示。
title:是鼠标放上去之后,会显示出来的文字。

38、简单描述AJAX的理解?

AJAX全称是 (Asynchronous) 异步的 javascript and XML。具体交互式网页应用的网页开发技术,可以实现异步请求和局部刷新。

AJAX包含的技术:

基于WEB标准XHTML+CSS的表示
使用DOM(Document ObjectModel)进行动态显示及交互
使用XML和XSLT进行数据交互及相关操作
使用XMLHttpRequest进行异步数据查询,检索

38、介绍一下XMLHttpRequert对象

AJAX的核心是JavaScript对象XmlHttpRequest,该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequert可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。通过XmlHttpRequert对象,Web开发人员可以在页面加载后进行页面的局部更新。

39、jQuery实现Ajax请求,详细信息如下:(达内)

请求url:carifo.de

发送方式:post

发送数据:id为s1的文本框值

返回数据:json格式

请求成功:将返回数据写入id为s2的文本框中

请求失败:弹出文本“系统错误”

$.ajax({
        url:"carinfo.do",
        type:'POST',
        data:$('#s1').val(),
        dataType:'json',
        success:function(resText){
            $('#s2').val(resText)
        },
        error:function(){
            alert('系统错误');
        }
});

40、请写出至少5种常见的http状态码以及代表意义(参考达内)

200(ok) - 请求成功。

303(See Other)- 告知客户端使用另一个URL来获取资源。

400(Bad Request) - 请求格式错误。1)语义有误,当前请求无法被服务器理解。2)请求参数有误。

404(Not Found):请求失败,请求所希望得到的资源在服务器上未被发现。

500(Internal Server Error):服务器遇到未曾预料的状况,导致无法完成请求处理。

41、body中onload()函数和jQuery中的$(document).ready()有什么区别?

可以在页面中使用多个document.ready()。但只能使用一次onload(),后面会覆盖前面的了。

document.ready()函数在页面DOM元素加载完成以后就会被调用,速度比onload()快,而onload()函数则要在所有的关联资源(包含图像,音频)加载完毕才会调用。

---恢复内容结束---

原文地址:https://www.cnblogs.com/liubingyjui/p/10458061.html