首页 > 其他分享 >js

js

时间:2022-08-18 00:12:47浏览次数:45  
标签:浏览器 函数 对象 js ajax 参数 事件

  1. typeof运算符和instanceof运算符以及isPrototypeOf()方法的区别
    typeof是一个运算符,用于检测数据的类型,比如基本数据类型null、undefined、string、number、boolean,以及引用数据类型object、function,但是对于正则表达式、日期、数组这些引用数据类型,它会全部识别为object; instanceof同样也是一个运算符,它就能很好识别数据具体是哪一种引用类型。它与isPrototypeOf的区别就是它是用来检测构造函数的原型是否存在于指定对象的原型链当中;而isPrototypeOf是用来检测调用此方法的对象是否存在于指定对象的原型链中,所以本质上就是检测目标不同。
    2.call()和apply()的区别
    实际上,apply和call的功能是一样的,只是传入的参数列表形式不同。apply传的是数组;
    3.全局函数eval()有什么作用?
    eval()只有一个参数,如果传入的参数不是字符串,它直接返回这个参数。如果参数是字符串,它会把字符串当成javascript代码进行编译。如果编译失败则抛出一个语法错误(syntaxError)异常。如果编译成功,则开始执行这段代码,并返回字符串中的最后一个表达式或语句的值,如果最后一个表达式或语句没有值,则最终返回undefined。如果字符串抛出一个异常,这个异常将把该调用传递给eval()。
    4.描述以下变量的区别:null,undefined或undeclared
    null 表示"没有对象",即该处不应该有值,转为数值时为0。典型用法是:
    (1) 作为函数的参数,表示该函数的参数不是对象。
    (2) 作为对象原型链的终点。
    undefined 表示"缺少值",就是此处应该有一个值,但是还没有定义,转为数值时为NaN。典型用法是:
    (1)变量被声明了,但没有赋值时,就等于undefined。
    (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
    (3)对象没有赋值的属性,该属性的值为undefined。
    (4)函数没有返回值时,默认返回undefined。
    undeclared :js语法错误,没有申明直接使用,js无法找到对应的上下文。
    5.=有什么区别?
    首先,== equality 等同,=== identity 恒等。,两边值类型不同的时候,要先进行类型转换,再比较。=,不做类型转换,类型不同的一定不等。
    6.同步异步?
    1、进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事 2、异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
  2. 什么是事件代理/事件委托?
    事件代理/事件委托是利用事件冒泡的特性,将本应该绑定在多个元素上的事件绑定在他们的祖先元素上,尤其在动态添加子元素的时候,可以非常方便的提高程序性能,减小内存空间。
    8.什么是事件冒泡?什么是事件捕获?
    冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。
    捕获型事件:事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。
    支持W3C标准的浏览器在添加事件时用addEventListener(event,fn,useCapture)方法,基中第3个参数useCapture是一个Boolean值,用来设置事件是在事件捕获时执行,还是事件冒泡时执行。而不兼容W3C的浏览器(IE)用attachEvent()方法,此方法没有相关设置,不过IE的事件模型默认是在事件冒泡时执行的,也就是在useCapture等于false的时候执行,所以把在处理事件时把useCapture设置为false是比较安全,也实现兼容浏览器的效果。
    9.如何阻止冒泡?
    w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true。例如: window.event? window.event.cancelBubble = true : e.stopPropagation();
    return false也可以阻止冒泡。
    10.如何阻止默认事件?
    w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false,比如:
    function stopDefault( e ) { 
        //阻止默认浏览器动作(W3C) 
        if ( e && e.preventDefault ) 
            e.preventDefault(); 
        //IE中阻止函数器默认动作的方式 
        else 
            window.event.returnValue = false; 
    }
    return false也能阻止默认行为。
    11.简述javascript中this的指向
    第一准则是:this永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。
    普通的函数调用,函数被谁调用,this就是谁。
    构造函数的话,如果不用new操作符而直接调用,那即this指向window。用new操作符生成对象实例后,this就指向了新生成的对象。
    匿名函数或不处于任何对象中的函数指向window 。
    如果是call,apply等,指定的this是谁,就是谁。
    12.原生对象和宿主对象
    原生对象是ECMAScript规定的对象,所有内置对象都是原生对象,比如Array、Date、RegExp等;
    宿主对象是宿主环境比如浏览器规定的对象,用于完善是ECMAScript的执行环境,比如Document、Location、Navigator等。
    13.基本数据类型和引用数据类型
    基本数据类型指的是简单的数据段,有5种,包括null、undefined、string、boolean、number;
    引用数据类型指的是有多个值构成的对象,包括object、array、date、regexp、function等。
    主要区别:
    声明变量时不同的内存分配:前者由于占据的空间大小固定且较小,会被存储在栈当中,也就是变量访问的位置;后者则存储在堆当中,变量访问的其实是一个指针,它指向存储对象的内存地址。
    也正是因为内存分配不同,在复制变量时也不一样。前者复制后2个变量是独立的,因为是把值拷贝了一份;后者则是复制了一个指针,2个变量指向的值是该指针所指向的内容,一旦一方修改,另一方也会受到影响。
    参数传递不同:虽然函数的参数都是按值传递的,但是引用值传递的值是一个内存地址,实参和形参指向的是同一个对象,所以函数内部对这个参数的修改会体现在外部。原始值只是把变量里的值传递给参数,之后参数和这个变量互不影响。
    14.AJAX的工作原理
    ajax简单来说是通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。
    ajax的优点
    最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。
    使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。
    可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求。
    基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。
    ajax的缺点
    ajax对浏览器后退机制造成了破坏,也就是说用户无法通过浏览器的后退按钮回到前一次操作的页面。虽然有些浏览器解决了这个问题,比如Gmail,但它也并不能改变ajax的机制,它所带来的开发成本是非常高的,和ajax框架所要求的快速开发是相背离的。这是ajax所带来的一个非常严重的问题。
    安全问题。技术同时也对IT企业带来了新的安全威胁,ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。
    对搜索引擎的支持比较弱。
    破坏了程序的异常机制。至少从目前看来,像ajax.dll,ajaxpro.dll这些ajax框架是会破坏程序的异常机制的。关于这个问题,我曾经在开发过程中遇到过,但是查了一下网上几乎没有相关的介绍。后来我自己做了一次试验,分别采用ajax和传统的form提交的模式来删除一条数据……给我们的调试带来了很大的困难。
    另外,像其他方面的一些问题,比如说违背了url和资源定位的初衷。例如,我给你一个url地址,如果采用了ajax技术,也许你在该url地址下面看到的和我在这个url地址下看到的内容是不同的。这个和资源定位的初衷是相背离的。
    15.get和post有什么区别?
    其实,GET和POST本质上两者没有任何区别。他们都是HTTP协议中的请求方法。底层实现都是基于TCP/IP协议。所谓区别,只是浏览器厂家根据约定,做得限制而已。
    get是通过明文发送数据请求,而post是通过密文;
    get传输的数据量有限,因为url的长度有限,post则不受限;
    GET请求的参数只能是ASCII码,所以中文需要URL编码,而POST请求传参没有这个限制
    GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
    16.document.onload和document.ready两个事件的区别
    页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页面包含图片等文件在内的所有元素都加载完成。
    17.什么是三元表达式
    三元表达式:? :。三元--三个操作对象。
    在表达式boolean-exp ? value0 : value1 中,如果“布尔表达式”的结果为true,就计算“value0”,而且这个计算结果也就是操作符最终产生的值。如果“布尔表达式”的结果为false,就计算“value1”,同样,它的结果也就成为了操作符最终产生的值。
    18.JavaScript里arguments
    Javascrip中国每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。arguments.length为函数实参个数,arguments.callee引用函数自身。
    在函数代码中,使用特殊对象arguments,开发者无需明确指出参数名,通过使用下标就可以访问相应的参数。
    function test() {
        var s = "";
        for (var i = 0; i < arguments.length; i++) {
            alert(arguments[i]);
            s += arguments[i] + ",";
        }
        return s;
    }
    test("name", "age");//name,age

arguments虽然有一些数组的性质,但其并非真正的数组,只是一个类数组对象。其并没有数组的很多方法,不能像真正的数组那样调用.jion(),.concat(),.pop()等方法。
19.什么是"use strict";?使用它的好处和坏处分别是什么?
在代码中出现表达式-"use strict"; 意味着代码按照严格模式解析,这种模式使得Javascript在更严格的条件下运行。
好处:
消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
消除代码运行的一些不安全之处,保证代码运行的安全;
提高编译器效率,增加运行速度;
为未来新版本的Javascript做好铺垫。
坏处:
同样的代码,在"严格模式"中,可能会有不一样的运行结果;
一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。
20.请解释一下JavaScript的同源策略
同源策略,即拥有相同的协议(protocol),端口(如果指定),主机(域名)的两个页面是属于同一个源。 然而在IE中比较特殊,IE中没有将端口号加入同源的条件中,因此上图中端口不同那一项,在IE中是算同源的。 

标签:浏览器,函数,对象,js,ajax,参数,事件
From: https://www.cnblogs.com/jycom/p/16597297.html

相关文章

  • js实现 delay 和 sleep函数
    console.log("====sleep===");//sleep等待几秒constsleep=(seconds)=>newPromise((resolve)=>setTimeout(resolve,seconds));asyncfunctionsleepTes......
  • 手写实现 js 中的bind,并实现 softBind
    //bind会返回一个硬绑定的新函数,新函数会使用指定的第一个thisCtx去调用原始函数,并将其它参数传给原始函数。硬绑定会降低函数的灵活性,在绑定之后不能通过显式或硬绑定......
  • 817笔记(轮播图js)
    网页轮播图步骤:鼠标经过轮播图模块,左右按钮显示,离开隐藏左右按钮点击右侧按钮一次,图片往左播放一次,以此类推,左侧按钮同理图片播放的同时,下面小圆圈模块跟随一起变化......
  • [js] uncaught exception: Error: listDatabases failed
    当mongo搭建的是replicaset集群。如果你登录某一台SECONDARY节点执行命令showdbs报错2022-08-16T15:20:00.606+0800EQUERY[js]uncaughtexception:Error:list......
  • Js的cookie和session
    Cookie的概念:保存在客户端一个字符串属性,读取cookie的值时,得到一个字符串;cookie除了name名和value值外,还有expires过期时间、path路径、domain域、以及secure安全。JS代码......
  • 16js运动
     运动概述运动主要是动画的操作,主要是操作某个document元素的属性变化(位置变化)运动主要的三步骤使用定时器来定时更改对应的内容实时获取对应的元素的属性及相关......
  • SpringMvc_06Jackson,Controller返回json数据
    初识json 通过json对象来实现,但是会有乱码问题  乱码问题可以通过Springmvc-servlet配置    同样的,可以通过RestController让其不仅过视图解析器,返回一个......
  • js一个快速提取所需字符串的方法
    varobj={"dependencies":{"axios":"^0.27.2","lodash":"^4.17.21","nanoid":"^4.0.0","normalize.css":"^8.0.1","pinia":"^2......
  • js判断移动端还是pc端
    functionisMobile(){letuserAgentInfo=navigator.userAgent;letAgents=['Android','iPhone','SymbianOS','WindowsPhone','iPad','iPod'];le......
  • MockJs
    MockJs一、为什么使用mockjs在做开发时,当后端的接口还未完成,前端为了不影响工作效率,手动模拟后端接口。1.我们可以使用json文件来模拟后台数据,但比较局限,无法模拟数据......