• 关于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()函数则要在所有的关联资源(包含图像,音频)加载完毕才会调用。

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

  • 相关阅读:
    PHP学习(数组)
    PHP学习(语言结构语句)
    PHP学习(运算符)
    PHP学习(数据类型)
    PHP学习(mysqli函数)
    PHP小知识总结(1)
    buffer的相关小知识
    SQL知识总结(1)
    用JS实线放大镜的效果
    单行中文字和图片的相关height和line-height特性
  • 原文地址:https://www.cnblogs.com/liubingyjui/p/10458061.html
Copyright © 2020-2023  润新知