当前位置:文档之家› 理解Javascript[07]理解instanceof实现原理

理解Javascript[07]理解instanceof实现原理

理解Javascript[07]理解instanceof实现原理
理解Javascript[07]理解instanceof实现原理

07_理解instanceof实现原理

在《Javascript类型检测》一文中讲到了用instanceof来用做检测类型,让我们来回顾一下.

那么instanceof的这种行为到底是如何实现的呢,现在让我们揭开instanceof背后的迷雾。

instanceof原理

照惯例,我们先来看一段代码:

代码如下:

function Cat(){}

Cat.prototype = {}

function Dog(){}

Dog.prototype ={}

var dog1 = new Dog();

alert(dog1 instanceof Dog);//true

alert(dog1 instanceof Object);//true

Dog.prototype = Cat.prototype;

alert(dog1 instanceof Dog);//false

alert(dog1 instanceof Cat);//false

alert(dog1 instanceof Object);//true;

var dog2= new Dog();

alert(dog2 instanceof Dog);//true

alert(dog2 instanceof Cat);//true

alert(dog2 instanceof Object);//true

Dog.prototype = null;

var dog3 = new Dog();

alert(dog3 instanceof Cat);//false

alert(dog3 instanceof Object);//true

alert(dog3 instanceof Dog);//error

让我们画一张内存图来分析一下:

内存图比较复杂,解释一下:

程序本身是一个动态的概念,随着程序的执行,Dog.prototype会不断的改变。但是为了方便,我只画了一张图来表达这三次prototype引用的改变。在堆中,右边是函数对象的内存表示,中间的是函数对象的prototype属性的指向,左边的是函数对象创建的对象实例。其中函数对象指向prototype属性的指针上写了dog1,dog2,dog3分别对应Dog.prototype的三次引用改变。它们和栈中的dog1,dog2,dog3也有对应的关系。(注:关于函数对象将在后续博文中讲解) 。

还有一点要注意,就是dog3中函数对象的prototype属性为null,则函数对象实例dog3的内部[[prototype]]属性将指向Object.prototype,这一点在《理解Javascript_06_理解对象的创建过程》已经讲解过了。

结论

根据代码运行结果和内存结构,推导出结论:

instanceof 检测一个对象A是不是另一个对象B的实例的原理是:查看对象B的prototype指向的对象是否在对象A的[[prototype]]链上。如果在,则返回true,如果不在则返回false。不过有一个特殊的情况,当对象B的prototype为null将会报错(类似于空指针异常)。

这里推荐一篇文章,来自于岁月如歌,也是关于instanceof原理的,角度不同,但有异曲同工之妙。

JavaScript试题集7

一. 单选题 1. 我们可以在下列哪个HTML 元素中放置javascript 代码? A.< script > B.< javascript > C.< js > D.< scripting > ★标准答案:A 2. 预测以下代码片段的输出结果: var str ; alert(typeof str); A.. string ; B.. undefined; C.. object ; D.. String; ★标准答案:B 3. 下列哪个不是Javascript 中注释的正确写法:( ) A.< !-- …… -- > B.//…… C./*……*/ D. /* …… */ ★标准答案:A 4. 以下哪项不属于Javascript 的特征? A.Javascript 是一种脚本语言 B.Javascript 是事件驱动的 C.Javascript 代码需要编译以后才能执行 D.Javascript 是独立于平台的 ★标准答案:C 5. 关于以下两个陈述的描述中,正确的是:( ) 陈述1:Javascript 是弱类型语言 陈述2:Javascript 的常用类型包括:int 、string 、boolean A.陈述1正确,陈述2错误 B.陈述1错误,陈述2正确 C.两个陈述都正确 D.两个陈述都错误 ★标准答案:A 6. 阅读下面的JavaScript 代码: < HTML > < BODY > < SCRIPT LANGUAGE="JavaScript" > function f(y) { var x=y*y; return x; } for(x=0;x< 5;x++) { y=f(x); document.writeln(y); } < /SCRIPT > < /BODY > < /HTML > 输出结果是()。 A.0 1 2 3 4 B.0 1 4 9 16 C.0 1 4 9 16 25 D.以上答案都不对 ★标准答案:B 7. 在Javascript 中,需要声明一个整数类型的变量num ,以下 哪个语句能实现上述要求? A.int num;

浏览器工作原理

从输入网址到显示页面:浏览器工作原理拆解分析本文将深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~ 1. 首先嘛,你得在浏览器里输入网址: 2. 浏览器查找域名的IP地址 导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下: 1.浏览器缓存–浏览器会缓存DNS记录一段时间。有趣的是,操作系统没有告诉 浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。 2.系统缓存–如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调 用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。 3.路由器缓存–接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。 4.ISP DNS 缓存–接下来要check的就是ISP缓存DNS的服务器。在这一般都能 找到相应的缓存记录。 5.递归搜索–你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com 顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.co m域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。 DNS递归查找如下图所示:

DNS有一点令人担忧,这就是像https://www.doczj.com/doc/4918727302.html, 或者https://www.doczj.com/doc/4918727302.html,这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈:1. 循环DNS 是DNS查找时返回多个IP时的解决方案。举例来说,Faceboo https://www.doczj.com/doc/4918727302.html,实际上就对应了四个IP地址。 2. 负载平衡器是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。 3. 地理DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。 4. Anycast是一个IP地址映射多个物理主机的路由技术。美中不足,Anycast 与TCP协议适应的不是很好,所以很少应用在那些方案中。 大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。 3. 浏览器给web服务器发送一个HTTP请求 因为像Facebook主页这样的动态页面,打开后在浏览器缓存中很快甚至马上就会过期,毫无疑问他们不能从中读取。 所以,浏览器将把一下请求发送到Facebook所在的服务器: GET https://www.doczj.com/doc/4918727302.html,/ HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+x ml, [...] User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...] Accept-Encoding: gzip, deflate Connection: Keep-Alive Host: https://www.doczj.com/doc/4918727302.html, Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=210 1[...] GET 这个请求定义了要读取的URL:“https://www.doczj.com/doc/4918727302.html,/”。浏览器自身定义(User-Agent头),和它希望接受什么类型的相应(Accept and Accept-Encodin g头). Connection头要求服务器为了后边的请求不要关闭TCP连接。 请求中也包含浏览器存储的该域名的cookies。可能你已经知道,在不同页面请求当中,cookies是与跟踪一个网站状态相匹配的键值。这样cookies会存储登录用户名,服务器分配的密码和一些用户设置等。Cookies会以文本文档形式存储在客户机里,每次请求时发送给服务器。 用来看原始HTTP请求及其相应的工具很多。作者比较喜欢使用fiddler,当然也有像FireBug这样其他的工具。这些软件在网站优化时会帮上很大忙。

浏览器内部工作原理

浏览器内部工作原理 浏览器可以被认为是使用最广泛的软件,我将介绍浏览器的简单基本的工作原理,我们将看到,从你在地址栏输入https://www.doczj.com/doc/4918727302.html,到你看到facebook主页过程中都发生了什么。

URL解析过程 ? 1. You enter a URL into the browser(输入一个url地址) –https://www.doczj.com/doc/4918727302.html, ? 2.The browser looks up the IP address for the domain name(浏览器查找域名的ip地址) –浏览器缓存 –系统缓存 –路由器缓存 –ISP DNS缓存 –递归搜索

? 3.The browser sends a HTTP request to the web server(浏览器给web服务器发送一个HTTP请求) –GET https://www.doczj.com/doc/4918727302.html,/ HTTP/1.1 –Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...] –User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...] –Accept-Encoding: gzip, deflate –Connection: Keep-Alive –Host: https://www.doczj.com/doc/4918727302.html, –Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...] ?Get : 以GET的方式提交发送请求| POST ?https://www.doczj.com/doc/4918727302.html,/ 发送请求的URL地址 ?Http/1.1 HTTP协议 ?User-Agent : 浏览器自身定义 ?Accept-Encoding : 希望接收什么类型相应数据 ?Connection : 表示要求服务器为了后边的请求不要关闭TCP连接 ?请求中也包含浏览器存储的该域名的cookies,cookies会存储登录用户名,服务器分配的密码和一些用户设置等?像“https://www.doczj.com/doc/4918727302.html,/”中的斜杠是至关重要的。这种情况下,浏览器能安全的添加斜杠。而像“http: //https://www.doczj.com/doc/4918727302.html,/folderOrFile”这样的地址,因为浏览器不清楚folderOrFile到底是文件夹还是文件,所以不能自动添加斜杠。这时,浏览器就不加斜杠直接访问地址,服务器会响应一个重定向,结果造成一次不必要的握手

JavaScript笔试题

《使用JavaScript增强交互效果》内部测试-笔试试卷 一、选择题(单选或多选题) 1.下面HTML标签中,默认占据整行的是(AB )。 A.

B.
C. D. 2.下面选项中,(AC )可以设置网页中某个标签的左外边距为5像素。A.margin:0 5px B.margin:5px 0 0 0; C.margin:0 0 0 5px; D.padding-left:5px; 3.在CSS中,为页面中的某个DIV标签设置以下样式,则该标签的实际宽度为(D )。div { width:200px; padding:0 20px; border:5px; } A.200px B.220px C.240px D.250px 4.在HTML中,DIV默认样式下是不带滚动条的,若要使
标签出现滚动条,需要为该标签定义( C )样式。 A.overflow:hidden; B.display:block; C.overflow:scroll; D.display:scroll; 5.阅读下面HTML代码,下面选项中增加的样式可以使两个DIV不在同一行显示的是(BD )。

......

...... A..box2{ clear:left; } B..box2{ clear:both; } C..box1{ clear:right; } D..box2 { clear:right; } 6.某页面中有一个1行3列的表格,其中表格行的id为row1,下列选项中能在表格中增加一列,并且这一列显示在最后面的是(C)。 A.document.getElementById("row1").Cells(3); B.document.getElementById("row1"). insertCell (2); C.document.getElementById("row1").insertCell(3); D.document.getElementById("row1").insertCell(0); 7.下列正则表达式中(B )可以匹配首位是小写字母或数字,其它位数是小写字母的最少 两位的字符串。 A./^ \w{2,}$/ B./^ [a-z0-9][a-z]+$/ C./^ [a-z0-9][a-z]*$/ D./^ [a-z0-9]\d+$/ 8.关于HTML中的表格和样式,下面说法错误的是( D )。 A.表格的边框可以使用CSS来控制 B.单元格的尺寸可以使用CSS来控制 C.单元格的背景颜色可以使用CSS来控制 D.单元格的跨行或跨列可以使用CSS来控制 9.CSS样式background-position:5px -10px代表的意义是( D )。 A.背景图片向左偏移5px,向下偏移10px B.背景图片向左偏移5px,向上偏移10px C.背景图片向右偏移5px,向下偏移10px D.背景图片向右偏移5px,向上偏移10px

理解JavaScript中函数的使用

理解JavaScript中函数的使用 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解。 JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。在继续讲述之前,先看一下函数的使用语法: function func1(…){…} var func2=function(…){…}; var func3=function func4(…){…}; var func5=new Function(); 这些都是声明函数的正确语法。它们和其他语言中常见的函数或之前介绍的函数定义方式有着很大的区别。那么在JavaScript中为什么能这么写?它所遵循的语法是什么呢?下面将介绍这些内容。 认识函数对象(Function Object) 可以用function关键字定义一个函数,并为每个函数指定一个函数名,通过函数名来进行调用。在JavaScript解释执行时,函数都是被维护为一个对象,这就是要介绍的函数对象(Function Object)。 函数对象与其他用户所定义的对象有着本质的区别,这一类对象被称之为内部对象,例如日期对象(Date)、数组对象(Array)、字符串对象(String)都属于内部对象。这些内置对象的构造器是由JavaScript本身所定义的:通过执行new Array()这样的语句返回一个对象,JavaScript内部有一套机制来初始化返回的对象,而不是由用户来指定对象的构造方式。 在JavaScript中,函数对象对应的类型是Function,正如数组对象对应的类型是Array,日期对象对应的类型是Date一样,可以通过new Function()来创建一个函数对象,也可以通过function关键字来创建一个对象。为了便于理解,我们比较函数对象的创建和数组对象的创建。先看数组对象:下面两行代码都是创建一个数组对象myArray: var myArray=[]; //等价于 var myArray=new Array();

详谈JavaScript 匿名函数及闭包

详谈JavaScript 匿名函数及闭包 1、匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途。匿名函数:就是没有函数名的函数。 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这也是最常规的一种 代码如下: function double(x){ return 2 * x; } 第二种:这种方法使用了Function构造函数,把参数列表和函数体都作为字符串,很不方便,不建议使用。 代码如下: var double = new Function('x', 'return 2 * x;'); 第三种: var double = function(x) { return 2* x; } 注意“=”右边的函数就是一个匿名函数,创造完毕函数后,又将该函数赋给了变量square。 1.2 匿名函数的创建 第一种方式:就是上面所讲的定义square函数,这也是最常用的方式之一。 第二种方式: 代码如下: (function(x, y){ alert(x + y); })(2, 3); 这里创建了一个匿名函数(在第一个括号内),第二个括号用于调用该匿名函数,并传入参数。

2、闭包 闭包的英文单词是closure,这是JavaScript中非常重要的一部分知识,因为使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。 闭包的含义:闭包说白了就是函数的嵌套,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕(这点涉及JavaScript作用域链)。 示例一 代码如下: function checkClosure(){ var str = 'rain-man'; setTimeout( function(){ alert(str); } //这是一个匿名函数 , 2000); } checkClosure(); 这个例子看上去十分的简单,仔细分析下它的执行过程还是有许多知识点的:checkClosure 函数的执行是瞬间的(也许用时只是0.00001毫秒),在checkClosure的函数体内创建了一个变量str,在checkClosure执行完毕之后str并没有被释放,这是因为setTimeout内的匿名函数存在这对str的引用。待到2秒后函数体内的匿名函数被执行完毕,str才被释放。 示例二,优化代码 代码如下: function forTimeout(x, y){ alert(x + y); } function delay(x , y , time){ setTimeout('forTimeout(' + x + ',' + y + ')' , time); } /** * 上面的delay函数十分难以阅读,也不容易编写,但如果使用闭包就可以让代码更加清晰 * function delay(x , y , time){ * setTimeout( * function(){ * forTimeout(x , y) * } * , time); * }

各服务器工作原理

FTP(文件传输协议)服务器工作原理FTP(文件传输协议)工作原理 目前在网络上,如果你想把文件和其他人共享。最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件。 1、FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户机 / 服务器(Client / Server )架构。用户可以通过各种不同的FTP客户端程序,借助FTP协议,来连接FTP服务器,以上传或者下载文件。 2、FTP通讯端口知识 FTP服务器和客户端要进行文件传输,就需要通过端口来进行。FTP协议需要的端口一般包括两种:控制链路--------TCP端口21所有你发往FTP服务器的命令和服务器反馈的指令都是通过服务器上的21 端口传送的。数据链路--------TCP端口20数据链路主要是用来传送数据的,比如客户端上传、下载内容,以及列目录显示的内容等。 3、FTP连接的两种方式在数据链路的建立上,FTP Server 为了适应不同的网络环境,支持两种连接模式:主动模式(Port)和被动模式(Pasv)。其实这两种连接模式主要是针对数据链路进行的,和控制链路无关。 主动模式主动模式是这样工作的:客户端把自己的高位端口和服务器端口21建立控制链路。所有的控制命令比如Is或get都是通过这条链路传送的。当客户端需要服务器端给它传送数据时,客户端会发消息给服务器端,告诉自己的位置和打开的高位端口(一般大于1024的端口都就叫高位端口),等候服务器的20端口和客户端打开的端口进行连接,从而进行数据的传输。当服务器端收到信息后,就会和客户端打开的端口连接,这样数据链路就建立起来了。

Javascript考试题目选择题

复习题 一、选择题 1、写“Hello World”的正确javascript语法是?(A) A. document.write("Hello World") B. "Hello World" C. response.write("Hello World") D. ("Hello World") 2、JS特性不包括( D ) A.解释性 B.用于客户端 C.基于对象 D.面向对象 3、下列JS的判断语句中( )是正确的(A) A.if(i==0) B.if(i=0) C.if i==0 then D.if i=0 then 4、下列JavaScript的循环语句中( )是正确的( D ) A.if(i<10;i++) B.for(i=0;i<10) C.for i=1 to 10 D.for(i=0;i<=10;i++) 5、下列的哪一个表达式将返回假( B ) A.!(3<=1) B.(4>=4)&&(5<=2) C.(“a”==”a”)&&(“c”!=”d”) D.(2<3)||(3<2) 6、下列选项中,( )不是网页中的事件(D) A.onclick B.onmouseover C.onsubmit D.onpressbutton 7、有语句“var x=0;while(____) x+=2;”,要使while循环体执行10次,空白处的循环判定式应写为:( C ) A.x<10 B. x<=10 C.x<20 D.x<=20 8、JS语句( B ) var a1=10; var a2=20; alert(“a1+a2=”+a1+a2) 将显示( )结果 A.a1+a2=30 B.a1+a2=1020 C.a1+a2=a1+a2 9、将字串s中的所有字母变为小写字母的方法是( B) A.s.toSmallCase() B.s.toLowerCase() C.s.toUpperCase() D.s.toUpperChars() 10、以下( )表达式产生一个0~7之间(含0,7)的随机整数. ( C ) A.Math.floor(Math.random()*6) B.Math.floor(Math.random()*7) C.Math. floor(Math.random()*8) D.Math.ceil(Math.random()*8) 11、产生当前日期的方法是( C ) A.Now(); B.Date() C.new Date() D.new Now() 12、如果想在网页显示后,动态地改变网页的标题( C ) A.是不可能的 B.通过document.write(“新的标题内容”) C. 通过document.title=(“新的标题内容”) D. 通过document.changeTitle(“新的标题内容”) 13、某网页中有一个窗体对象,其名称是mainForm,该窗体对象的第一个元素是按钮,其名称

Javascript自执行匿名函数(function { }) 的原理浅析

Javascript自执行匿名函数(function { }) 的原理浅析 匿名函数就是没有函数名的函数。这篇文章主要介绍了Javascript自执行匿名函数(function { }) 的原理浅析的相关资料,需要的朋友可以参考下 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途。匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数 下面是一个最常见的自执行函数: // 传统匿名函数 (function { alert('hello'); }) ; 这段代码的执行效果就是在页面再载入时弹出:"hello" 是什么促使它自动执行的?,来看下面的代码 // 在传统写法上去掉小括号,并在前面加上运算符~,!,+,- ~function { alert('hello'); } ;

!function { alert('hello'); } ; +function { alert('hello'); } ; -function { alert('hello'); } ; 这些写法与上文所说的传统方式执行起来并无区别, 我发现,这些写法的共同点是运算符,其实传统方式的小括号也属于运算的一种,出现在:a=b*(c+d),运算符 + 传递给自生的参数 = 函数自动执行?但有些符号也不支持,比如“=,*,/”号,它自执行的原因还是很神秘,网上也找不到像样的答案 然后我发现了一个神奇的现象,这些运算符可以无限叠加。。。。。。 // function前面是特定符号可以无限叠加... ~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+ -+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+ -~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-

javascript运行原理

浅谈 JavaScript 的运行机理
——hechangmin@https://www.doczj.com/doc/4918727302.html, 2010.10
这个话题看似简单,其实笔者是几次三番的下笔,又几次三番的放弃。因为这个内容, 对于很多 JavaScript 的开发人员来讲都是一知半解的,当然笔者也在其中,今天之所以出来 献丑了,首先是有了更深的认识,其次微博上有人说“献丑是进步”,如果献丑那必定是有同 道之人能指出纰漏,那对于笔者本人来讲何尝不是进步呢?深表赞同! 今天会以几个小小的实例来解读这个课题。希望能与大家共勉。 首先得先了解 JavaScript 执行起来的流程,笔者先简单画了一个 javascript 的执行流程图:
重点解释的有三步:词法分析、预解析、执行。 script 代码段:用 script 标签分隔的 js 代码或引入的 js 文件。

(1). 预解析 我们先从几个常见的 javascript 小题目入手,请大家先看看下面的范例输出什么? 对于 javascript 的从业者可以试着运行下。看看你的答案和实际输出一致吗?别小看这样两 行脚本,这样的题目被当作 JavaScript 的笔试或者面试题目是常有的事情。 实际输出结果为:“undefined”, 这种现象被称成“预解析”:JavaScript 脚本引擎优先解析 var 变量和 function 定义。在预解析 完成后,才会执行代码。 由于变量 i 是被 var 声明的,而被优先解析。所以可以理解为在 alert(i) 执行时候,程序前 面已经有 var i; 所以上面代码等效解释为: 注意:预解析不会报错,因为他只解析正确的声明。 (2). 解释(主要指词法分析,生成语法树的过程) 请注意,这里‘解释’的定义是笔者自己方便理解自己定义的,而这个‘解释’并不在预解 析之后。 我们知道 JavaScript 是脚本语言,脚本语言是相对于高级编译型语言而言他是解释性的。解 释性语言没有编译成二进制代码,但是要进入到运行阶段,都应该是会经过词法分析、语法 分析生成语法树、语义检查过程,笔者把这个环节叫做“解释”,如果读者有更科学的名字记 得告诉我。 解释性语言在生成语法树后,就可以执行了。(这个跟脚本引擎编译器有关)

浏览器工作原理拆解分析

浏览器工作原理拆解分析 1. 首先嘛,你得在浏览器里输入网址: 2. 浏览器查找域名的IP地址 导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下: 浏览器缓存——浏览器会缓存DNS记录一段时间。有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。 系统缓存——如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows 里是gethostbyname)。这样便可获得系统缓存中的记录。 路由器缓存——接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。 ISP DNS缓存——接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。 递归搜索——你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。 DNS递归查找如下图所示: DNS有一点令人担忧,这就是像https://www.doczj.com/doc/4918727302.html, 或者 https://www.doczj.com/doc/4918727302.html,这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈: 循环 DNS是DNS查找时返回多个IP时的解决方案。举例来说,https://www.doczj.com/doc/4918727302.html,实际上就对应了四个IP地址。 负载平衡器是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。 地理 DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。

Javascript笔试题及答案

Javascript面试笔试题 考试时间90分钟 一、不定项选择题(每题3分,共30分) 1.声明一个对象,给它加上name属性和show方法显示其name值,以下代码中正确的是 ( D ) A.var obj = [name:"zhangsan",show:function(){alert(name);}]; B.var obj = {name:"zhangsan",show:”alert”}; C.var obj = {name:"zhangsan",show:function(){alert(name);}}; D.var obj = {name:"zhangsan",show:function(){alert;}}; 2.以下关于Array数组对象的说法不正确的是( CD) A.对数组里数据的排序可以用sort函数,如果排序效果非预期,可以给sort函数加 一个排序函数的参数 B.reverse用于对数组数据的倒序排列 C.向数组的最后位置加一个新元素,可以用pop方法 D.unshift方法用于向数组删除第一个元素 3.要将页面的状态栏中显示“已经选中该文本框”,下列JavaScript语句正确的是( A ) A.="已经选中该文本框" B.="已经选中该文本框" C.="已经选中该文本框" D.="已经选中该文本框" 4.点击页面的按钮,使之打开一个新窗口,加载一个网页,以下JavaScript代码中可行 的是( AD) A. B. C. D.

5.使用JavaScript向网页中输出

hello

,以下代码中可行的是( BD) A. B. C. D.

javascript函数库(全)

转载请注明出处-中国设计秀https://www.doczj.com/doc/4918727302.html, /* -------------- 函数检索-------------- trim函数: trim() lTrim() rTrim() 校验字符串是否为空: checkIsNotEmpty(str) 校验字符串是否为整型: checkIsInteger(str) 校验整型最小值: checkIntegerMinValue(str,val) 校验整型最大值: checkIntegerMaxValue(str,val) 校验整型是否为非负数: isNotNegativeInteger(str) 校验字符串是否为浮点型: checkIsDouble(str) 校验浮点型最小值: checkDoubleMinValue(str,val) 校验浮点型最大值: checkDoubleMaxValue(str,val) 校验浮点型是否为非负数: isNotNegativeDouble(str) 校验字符串是否为日期型: checkIsValidDate(str) 校验两个日期的先后: checkDateEarlier(strStart,strEnd) 校验字符串是否为email型: checkEmail(str) 校验字符串是否为中文: checkIsChinese(str) 计算字符串的长度,一个汉字两个字符: realLength() 校验字符串是否符合自定义正则表达式: checkMask(str,pat) 得到文件的后缀名: getFilePostfix(oFile) -------------- 函数检索-------------- */ /** * added by LxcJie 2004.6.25 * 去除多余空格函数 * trim:去除两边空格lTrim:去除左空格rTrim: 去除右空格 * 用法: * var str = " hello "; * str = str.trim(); */ String.prototype.trim = function() { $)/g,return this.replace(/(^[\s]*)|([\s]* ""); } String.prototype.lTrim = function() { return this.replace(/(^[\s]*)/g, ""); } String.prototype.rTrim = function() { $)/g,return this.replace(/([\s]* ""); } /********************************** Empty **************************************/ /** *校验字符串是否为空 *返回值: *如果不为空,定义校验通过,返回true *如果为空,校验不通过,返回false 参考提示信息:输入域不能为空! */

浏览器工作原理(图) 内部工作原理

前端必读:浏览器内部工作原理 目录 一、介绍 二、渲染引擎 三、解析与DOM树构建 四、渲染树构建 五、布局 六、绘制 七、动态变化 八、渲染引擎的线程 九、CSS2可视模型 英文原文:How Browsers Work: Behind the Scenes of Modern Web Browsers 一、介绍 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入https://www.doczj.com/doc/4918727302.html,到你看到google主页过程中都发生了什么。 将讨论的浏览器 今天,有五种主流浏览器——IE、Firefox、Safari、Chrome及Opera。 本文将基于一些开源浏览器的例子——Firefox、Chrome及Safari,Safari是部分开源的。 根据W3C(World Wide Web Consortium万维网联盟)的浏览器统计数据,当前(2011年5月),Firefox、Safari及Chrome的市场占有率综合已接近60%。(原文为2009年10月,数据没有太大变化)因此,可以说开源浏览器已经占据了浏览器市场的半壁江山。 浏览器的主要功能 浏览器的主要功能是将用户选择的web资源呈现出来,它需要从服务器请求资源,并将其显示在浏览器窗口中,资源的格式通常是HTML,也包括PDF、image及其他格式。用户用URI(Uniform Resource Identifier统一资源标识符)来指定所请求资源的位置,在网络一章有更多讨论。 HTML和CSS规范中规定了浏览器解释html文档的方式,由W3C组织对这些规范进行维护,W3C是负责制定web标准的组织。 HTML规范的最新版本是HTML4(https://www.doczj.com/doc/4918727302.html,/TR/html401/),HTML5还在制定中(译注:两年前),最新的CSS规范版本是2(https://www.doczj.com/doc/4918727302.html,/TR/CSS2),CSS3也还正在制定中(译注:同样两年前)。 这些年来,浏览器厂商纷纷开发自己的扩展,对规范的遵循并不完善,这为web开发者带来了严重的兼容性问题。 但是,浏览器的用户界面则差不多,常见的用户界面元素包括: ?用来输入URI的地址栏 ?前进、后退按钮 ?书签选项 ?用于刷新及暂停当前加载文档的刷新、暂停按钮

javascript考试试题库2

Javascript综合复习题 【提示:本综合复习题的目的是让同学们多见识各种题目。选择题、填空题以及程序阅读题可以仔细做,对于程序实现和简答题建议先理解再记忆,切记死背答案。】 第一部分:单选题 1. Javascript中, 以下哪条语句一定会产生运行错误?答案( B ) A、var _变量=NaN; B、var 0bj = []; C、var obj = //; D、var obj = {}; 2. 以下两个变量a和b,a+b的哪个结果是NaN?答案( C ) A、var a=undefind; b=NaN B、var a= ‘123’; b=NaN C、var a =undefined , b =NaN D、var a=NaN , b='undefined' 3. var a=10; b=20; c=4; ++b+c+a++ 以下哪个结果是正确的?答案( B ) A、34 B、35 C、36 D、37 4. Javascript中, 以下代码运行后变量y的值是:答案( D ) var x = [‘abcde’ , 123456]; var y = typeof typeof x[1]; A、"function" B、"object" C、"number" D、"string" 5. Javascript中, 以下那两个变量的值不是==:答案( B ) A、var a=0 , b=-0; B、var a=NaN , b=NaN; C、var a=null , b=undefined; D、var a=[] , b=false; 6. Javascript中, 以下声明变量语句中哪个不正确?答案( D ) A、var aa; B、var bb=3; cc='good'; C、var dd = ee = 100; D、var ff=3, gg='he's good'; 7. Javascript中, foo对象有att属性,那么以下获取att属性值的表达式哪个是错误的?答案( C ) A、foo.att B、foo["att"] C、foo{"att"} D、foo["a"+"t"+"t"] 8. Javascript中, 以下代码运行后变量y的值是:答案( B ) var x = [typeof x, typeof y][1]; var y = typeof typeof x; A、"number" B、"string" C、"undefined"

JAVASCRIPT

Javascript 114、alert怎样换行? \r\n 115、什么情况用HTML控件,什么情况用WEB控件,并比较两者差别 如果有数据提交到server端时用web control好。一般为了提高效率能用html control在客户端执行,就用html control。 116、JavaScript中的对象. JavaScript中的Object是一组数据的key-value的集合,有点类似于Java中的有这些数据都是Object里的property.通常情况下,JavaScript中建立一个对象用”new”加上constructor function来实现.如new Date(),new Object()等. var book=new Object(); https://www.doczj.com/doc/4918727302.html,="JavaScript is Cool"; book.author="tom"; book.pages=514; 上面例子中的name和page就是名为book的对象中的property.我们可以用delete 来删除Object中的property:“delete https://www.doczj.com/doc/4918727302.html,;”.除了Object,Date等buildin 的对象外,我们可以写自己的constructor function,然后使用new就可以建立自己的对象.如上面的book可以写成: function Book(name,author,page){ https://www.doczj.com/doc/4918727302.html,=name; this.author=author; this.page=page; } var abook=new Book("JavaScript is Cool","tom",514); 117、function的用法 在JavaScript中,function是一种数据类型,所有的function都是从buildin的Function object衍生的对象.所以在JavaScript中function可以作为参数传递,可以作为Object的property,也可以当作函数返回值.function在JavaScript中有两种用法,一种是当作constructor,前面加上new keyword用来建立对象.一种是当作method,为其他对象调用. 注意function和method在中文里的意思相当,在有些语言里也可以通用.但是在JavaScript中,它们还是有所区别的.function本身是是一个对象,而当作为一个方法他属于一个对象时,就成为了一个这个对象的method,相当于一个对象种的属性.也就是说method是相对于一个对象而言的,function在某些情况下成为了一个对象的method. function Book(name,author,page){ https://www.doczj.com/doc/4918727302.html,=name; this.author=author; this.page=page;

作用域与闭包,js插件内部传递function()内部值

《作用域与闭包:this,var,(function () {})》目标 无具体目标 知识点 1.理解js 中var 的作用域 2.了解闭包的概念 3.理解this 的指向 课程内容 *es6中新增了let 关键词,与块级作用域,相关知识参 考:https://www.doczj.com/doc/4918727302.html,/#docs/let * var 作用域 先来看个简单的例子: var parent=function () { var name ="parent_name"; var age =13; var child=function () { var name ="child_name"; var childAge =0.3;

// => child_name 13 0.3 console.log(name, age, childAge); }; child(); // will throw Error // ReferenceError: childAge is not defined console.log(name, age, childAge); }; parent(); 直觉地,内部函数可以访问外部函数的变量,外部不能访问内部函数的变量。上面的例子中内部函数child 可以访问变量age,而外部函数parent 不可以访问child 中的变量childAge,因此会抛出没有定义变量的异常。 有个重要的事,如果忘记var,那么变量就被声明为全局变量了。 function foo() { value ="hello"; }foo();console.log(value); // 输出hello console.log(global.value) // 输出hello 这个例子可以很正常的输出hello,是因为value变量在定义时,没有使 用var关键词,所以被定义成了全局变量。在Node 中,全局变量会被定义在global对象下;在浏览器中,全局变量会被定义在window对象下。

文本预览