JavaScript,也缩写为JS,是一种高级服务器端编程语言。JavaScript在世界范围内被广泛用于构建各种Web应用程序,这意味着JavaScript编程有巨大的机会。
要建立JavaScript编程职业生涯,应聘者需要通过面试。他们被要求回答各种JavaScript面试问题和答案。
以下是JavaScript面试问题和答案列表,这些问题和答案可能会在面试过程中被问到。候选人可能会被问到基本的JavaScript面试问题,以根据他们的经验和各种其他因素提出JS面试问题。
下面的列表涵盖了面向大一新生的所有JavaScript问题和面向专业级候选人的JavaScript面试问题。这篇JS面试问题指南将帮助破解面试,并帮助获得梦寐以求的JavaScript编程工作。
面向新手和资深人士的JavaScript面试常见问题和解答
1. 什么是JavaScript
JavaScript是插入到HTML页面中的客户端和服务器端脚本语言,Web浏览器可以理解它。JavaScript也是一种基于对象的编程语言
2. 列举一下Java和JavaScript之间的区别?
Java是一种完整的编程语言。相反,JavaScript是编码程序Java是面向对象编程(OOPS)或结构化编程语言,如C++或C,而JavaScript是客户端脚本语言。
3. 什么是JavaScript数据类型?
以下是JavaScript数据类型:
- 数字
- 字符串
- 布尔值
- 对象
- 未定义
4. isNaN函数有什么用途?
如果参数不是数字,则isNan函数返回TRUE;否则返回FALSE。
5. JavaScript和ASP脚本之间哪个更快?
JavaScript更快。JavaScript是一种客户端语言,因此它不需要Javascript的帮助,现在也是一种服务器端语言(NodeJS)。
6. 什么是负无限?
负无限是JavaScript中的一个数字,可以通过将负数除以零得出。
7. 可以将JavaScript代码分成几行吗?
可以通过在第一行末尾使用反斜杠‘’来完成字符串语句内的中断。
示例:
如果在不在字符串语句内时更改为新行,那么JavaScript将忽略该行中的换行符。
示例:
上面的代码完全没有问题,尽管不建议这样做,因为它会妨碍调试。
8. 哪家公司开发了JavaScript?
Netscape 是开发JavaScript的软件公司。
9. 什么是未声明和未定义的变量?
未声明的变量是那些在程序中不存在且未声明的变量。如果程序尝试读取未声明变量的值,则会遇到运行时错误。
未定义的变量是那些在程序中声明但没有赋予任何值的变量。如果程序尝试读取未定义变量的值,则返回未定义的值。
10. 编写动态添加新元素的代码吗?
<html>
<head>
<title>
t1
</title>
<script type="text/javascript">
function addNode () {
var newP = document. createElement("p");
var textNode = document.createTextNode(" This is a new text node");
newP.appendChild(textNode); document.getElementById("firstP").appendChild(newP);
}
</script>
</head>
<body>
<p id="firstP">
firstP
<p>
</p>
</p>
</body>
</html>
11. 什么是全局变量?这些变量是如何声明的?
全局变量在整个代码长度中都可用,因此它没有作用域。如果省略了var关键字,则声明一个全局变量。
示例:
//声明一个global:globalVariable=“Test”;
使用全局变量面临的问题是局部作用域和全局作用域的变量名冲突。此外,调试和测试依赖全局变量的代码也很困难。
12. 什么是提示框?
提示框是允许用户通过提供文本框输入输入的框。将提供标签和框以输入文本或数字。
13. JavaScript中的“this”关键字是什么?
“this”关键字指的是调用该对象的位置。
14. JavaScript中计时器的工作原理是什么?
计时器用于在设定的时间执行一段代码或在给定的间隔内重复该代码。这可以使用函数setTimeout、setInterval和clearInterval来完成。
setTimeout(function, delay) 函数用于启动定时器,该定时器在上述延迟之后调用特定函数。SETI clearInterval(id) 函数指示计时器停止。
计时器在单个线程内操作,因此事件可能会排队等待执行。
15. 哪个符号用于Javascript中的注释?
//用于单行注释和
/*多行
注释
*/
16. 视图状态和会话状态有什么不同?
- “ViewState”特定于会话中的页面。
- “SessionState”特定于可以跨所有Web应用程序页面访问的特定于用户的数据。
17. 什么是=运算符?
=称为严格相等运算符,当两个操作数在没有转换的情况下具有相同的值时,该运算符返回TRUE。
18. 如何使用JavaScript提交表单?
要使用JavaScript提交表单,使用
19. JavaScript是否支持自动类型转换?
是的,JavaScript确实支持自动类型转换。它是JavaScript开发人员常用的类型转换方式
20. 如何更改元素的样式/类?
它可以通过以下方式完成:
或
21. 如何使用JavaScript读写文件?
使用JavaScript有两种读取和写入文件的方式
- 使用JavaScript扩展
- 使用网页和Active X对象
22. JavaScript中的所有循环结构是什么?
以下是Javascript中的循环结构:
- For
- While
- Do-while 循环
23. Javascript中的变量类型是什么?
变量类型用于为变量赋值。可以将相同的变量赋给字符串。
示例:
这称为变量类型。
24. 在JavaScript中如何将任意基数的字符串转换为整数?
parseInt() 函数用于在不同基数之间转换数字。第二个参数是给定字符串的基础。
要将4F(或基数16)转换为整数,使用的代码为-
25. “==”和“=”之间的区别是什么?
“==”只检查值是否相等,而“=”是更严格的相等测试,如果两个变量的值或类型不同,则返回FALSE。
26. 3+2+“7”的结果会是什么?
因为3和2是整数,所以它们将以数字相加。所以结果是57。
27. 如何检测客户机上的操作系统?
为了检测客户端计算机上的操作系统,导航器。应使用平台字符串(属性)。
28. Javascript中的null是什么意思?
空值用于表示无值或无对象。它表示没有对象或空字符串,没有有效的布尔值,没有数字,也没有数组对象。
29. DELETE操作符的功能是什么?
DELETE关键字用于删除属性及其值。
示例
30. JavaScript中未定义的值是什么?
未定义的值表示
- 代码中使用的变量不存在
- 变量未赋给任何值
- 属性不存在。
31. JavaScript中可用的弹出框类型有哪些?
- Alert
- Confirm
- Prompt
32. void(0)有什么用处?
Void(0) 用于防止页面刷新,调用时传入参数为零。 Void(0) 用于在不刷新页面的情况下调用另一个方法。
33. 如何强制一个页面加载JavaScript中的另一个页面?
必须插入以下代码才能达到预期效果:
<script language="JavaScript" type="text/javascript">
<!-- location. href="http://newhost/newpath/newfile.html"; //-->
</script>
34. JavaScript中变量的数据类型是什么?
JavaScript中的所有变量都是对象数据类型。
35. 警告框和确认框有什么不同?
警告框只显示一个按钮,即OK按钮。
但确认框显示两个按钮,即确定和取消。
36. 什么是转义字符?
转义字符(反斜杠)在使用特殊字符(如单引号、双引号、撇号和与号)时使用。在字符前放置反斜杠以使其显示。
示例:
37. 什么是JavaScript Cookie?
Cookie是存储在计算机中的小测试文件,当用户访问网站以存储他们需要的信息时会创建Cookie。例如,以前访问的用户名详细信息和购物车信息。
38. JavaScript中的 pop() 方法是什么?
POP()方法类似于 shift() 方法,但不同之处在于Shift方法在数组开始时工作。然后,在其上调用它的数组被更改。
示例:
39. JavaScript有概念级别的作用域吗?
不是的。JavaScript没有概念级别的SCO,函数内部声明的变量在函数内部有作用域。
40. 在JavaScript中使用innerHTML有什么缺点?
如果在JavaScript中使用innerHTML,缺点是
- 内容在任何地方都会被替换
- 我们不能像“追加到innerHTML”那样使用它
- 即使使用+=like“innerHTML=innerHTML+‘html’”,旧内容也会被html替换
- 重新解析整个innerHTML内容并将其构建到元素中。因此,它的速度要慢得多
- innerHTML不提供验证,因此我们可能会在文档中插入有效的和损坏的HTML并将其拆分
41. 什么是Break和Continue语句?
BREAK语句从当前循环退出。
CONTINUE语句继续循环的下一条语句。
42. JavaScript中的两组基本数据类型是什么?
- Primitive,基础数据类型
- Reference, 引用类型
基元类型是数字和布尔数据类型。引用类型是更复杂的类型,如字符串和日期。
43. 如何创建通用对象?
通用对象可以创建为:
44. 一种类型的运算符有什么用途?
“typeOf”是用于返回变量类型的字符串描述的运算符。
45. 哪些关键字用于处理异常?
try-catch-finally用于处理JavaScript中的异常
try{
Code
}catch(exp){
Code to throw an exception.
}
finally{
Code runs either it finishes successfully or after catch
}
46. 哪个关键字用于在屏幕上打印文本?
文档。write(“Welcome”)用于打印屏幕上的文本-Welcome。
47. 模糊函数的用途是什么?
模糊函数用于从指定对象移除焦点。
48. 什么是变量类型?
变量类型将数字分配给变量,然后将字符串分配给同一变量。下面是一个示例:
49. 如何使用JavaScript在客户机上查找操作系统?
“Navigator”,应用程序版本用于在客户端计算机中查找操作系统的名称。
50. JavaScript中有哪些不同类型的错误?
有三种类型的错误:
- 加载时错误:加载网页时出现的错误(如不正确的语法错误)称为加载时错误,并动态生成错误。
- 运行时错误:由于在HTML语言中误用命令而产生的错误。
- 逻辑错误:这些错误是由于对具有不同操作的函数执行的错误逻辑造成的。
51. JavaScript中的Push方法有什么用处?
Push方法用于向Array End添加或追加一个或多个元素。使用此方法,我们可以通过传递多个参数来追加多个元素。
52. JavaScript中的unshift方法是什么?
unshift方法类似于push方法,它在数组的开头工作。此方法用于将一个或多个元素添加到数组开头。
53. JavaScript和Jscript有什么不同?
两者几乎是相似的。Netscape和Jscript开发JavaScript是微软公司开发的。
54. 如何指定对象特性?
属性按以下方式分配给对象-
55. JavaScript中的“严格模式”是什么?如何启用它?
严格模式将某些强制添加到JavaScript。在严格模式下,JavaScript会显示一段代码的错误,在严格模式下没有显示错误,因为严格模式还解决了一些阻碍JavaScript引擎高效工作的错误。
可以通过在文件上方添加字符串文字“use strict”来启用严格模式。这可以通过给定的示例来说明:
56. 获取复选框状态的方法是什么?
状态获取方式如下:
如果选中该复选框,则此告警将返回TRUE。
57. 如何检测客户端计算机的操作系统?
navigator: appVersion字符串可用于检测客户端计算机上的操作系统。
58. 什么是window.onload和document.ready?
在加载页面上的所有信息之前,不会运行onLoad功能。这导致在执行任何代码之前有相当大的延迟。
document.ready在加载DOM之后立即加载代码。
59. 闭包在JavaScript中是如何工作的?
闭包是一个本地声明的变量,与返回时驻留在内存中的函数相关。
例如:
function greet(message) {
console.log(message);
}
function greeter(name, age) {
return name + " says howdy!! He is " + age + " years old";
}
// Generate the message
var message = greeter("James", 23);
// Pass it explicitly to greet
greet(message);
This function can be better represented by using closures
function greeter(name, age) {
var message = name + " says howdy!! He is " + age + " years old";
return function greet() {
console.log(message);
};
}
// Generate the closure
var JamesGreeter = greeter("James", 23);
// Use the closure
JamesGreeter();
60. 如何将值追加到数组中?
可以按给定方式将值追加到数组中-
61. Javascript中的for-in循环是什么?
for-in循环用于遍历对象的属性。 for-in循环的语法是-
在每次重复中,对象中的一个属性与变量名相关联。循环将继续,直到耗尽对象的所有属性。
62. JavaScript中匿名函数的重要属性是什么?
在没有任何命名标识符的情况下声明的函数称为匿名函数。通常,匿名函数在声明之后是不可访问的。 匿名函数声明-
63. .call()和 .apply() 有什么不同?
函数.call()和 .apply() 的用法非常相似,只是稍有不同。当函数的参数个数达到以下值时,将使用 .call() 函数 .apply() 要求参数为数组。
call()和 .apply() 之间的基本区别在于将参数传递给函数的方式。它们的用法可以通过给出的例子来说明。
var someObject = {
myProperty : 'Foo',
myMethod : function(prefix, postfix) {
alert(prefix + this.myProperty + postfix);
}
};
someObject.myMethod('<', '>'); // alerts '
<foo>
'
var someOtherObject = {
myProperty : 'Bar.'
};
someObject.myMethod.call(someOtherObject, '<', '>'); // alerts '
<bar>
'
someObject.myMethod.apply(someOtherObject, ['<', '>']); // alerts '
<bar>
'
</bar>
</bar>
</foo>
64. 什么是事件冒泡?
JavaScript允许DOM元素相互嵌套。在这种情况下,如果单击子对象的处理程序,则父对象的处理程序也将工作,就像它也被单击一样。
65. JavaScript是否区分大小写?给出它的例子。
JavaScript区分大小写。例如,函数parseInt与函数Parseint不同。
66. JavaScript中可以使用哪些布尔运算符?
‘AND’运算符(&&)、‘or’运算符(||)和‘NOT’运算符(!)可以在JavaScript中使用。
*运算符没有括号。
67. 在JavaScript中,如何从超链接定位特定的框架?
这可以通过使用‘target’属性将所需帧的名称包括在超链接中来实现。
68. break和continue语句的作用是什么?
BREAK语句用于退出当前循环。相比之下,CONTINUE语句使用新的递归继续当前循环。
69. 写出 web-garden和网络农场的不同之处?
web-garden和web-farm都是网络托管系统。唯一不同的是,web-garden同时也是一个SE,web-farm是一个使用多个服务器的更大的设置。
70. 如何指定对象特性?
将属性分配给对象的方式与将值分配给变量的方式相同。对于检查表单.action=“submit”
71. 在JavaScript中读写文件的方法是什么?
这可以通过使用JavaScript扩展(从JavaScript编辑器运行)来完成,例如,用于打开文件-
72. 在JavaScript中如何利用DOM?
DOM代表文档对象模型(Document Object Model),负责文档中各种对象之间的交互方式。最重要的是,API的使用比其他现有模型更具优势。
73. 在JavaScript中如何利用事件处理程序?
事件是由活动引起的操作,例如用户单击链接或填写表单。此属性包括事件名称和事件发生时采取的操作。
74. 延迟脚本在JavaScript中的作用是什么?
默认情况下,页面加载期间HTML代码的解析会暂停,直到脚本没有停止执行。如果服务器速度慢或脚本特别重,则网页会延迟。
使用延迟时,脚本会将脚本的执行延迟到HTML解析器运行时。这减少了网页的加载时间,并且显示速度更快。
75. JavaScript中有哪些不同的功能组件?
JavaScript中的不同功能组件包括-
- 第一类函数:JavaScript中的函数被用作第一类对象。这通常意味着这些函数可以作为参数传递给其他函数、作为值从其他函数返回、赋值给变量,或者也可以存储在数据结构中。
- 嵌套函数:在其他函数中定义的函数称为嵌套函数。它们在每次调用main函数时都被调用。
76. 写下JavaScript中显示的错误?
JavaScript会给出一条消息,就好像它遇到了错误一样。已确认的错误为-
- 加载时错误:页面加载时显示的错误计入加载时错误。使用不正确的语法会遇到这些错误,因此在加载页面时会被检测到。
- 运行时错误:这是程序运行时出现的错误。例如,非法操作会导致数字被零除或访问内存中不存在的区域。
- 逻辑错误:它是由语法正确的代码导致的,这些代码没有完成所需的任务-例如,无限循环。
77. 什么是屏幕对象?
Screen对象用于从客户端的屏幕读取信息。Screen对象的属性为-
- availHeight:给出客户端屏幕的高度
- availWidth:给出客户端屏幕的宽度
- colorDepth:给出客户端屏幕上图像的位深度
- height:给出客户端屏幕的总高度,包括任务栏
- width:给出客户端屏幕的总宽度,包括任务栏
78. 什么是 unshift() 方法?
与 push() 不同,此方法在数组开始时起作用。例如-
var name = [ "john" ];
name.unshift( "charlie" );
name.unshift( "joseph", "Jane" );
console.log(name);
输出如下所示:
79. 什么是 unescape() 和escape()函数?
函数的作用是:对字符串进行编码,以便通过网络将信息从一台计算机传输到另一台计算机。
例如:
输出:HELLO%3F%20How%20are%20You%21
unescape() 函数非常重要,因为它对编码字符串进行解码。
它的工作方式如下。例如:
输出:Hello? How are you!
80. 什么是 decodeURI() 和encodeURI()?
encodeURl() 是用来把url转换成他们的祸不单行编码的。而 decodeURI() 用于将编码的url转换回正常。
<script>
var uri="my test.asp?name=ståle&car=saab";
document.write(encodeURI(uri)+ "<br>");
document.write(decodeURI(uri));
</script>
输出-
my%20test.asp?name=st%C3%A5le&car=saab
my test.asp?name=ståle&car=saab
81. 为什么不应该在JavaScript中使用innerHTML?
innerHTML内容每次都会刷新,因此速度较慢。因此,更容易在文档中插入流氓代码并使网页不稳定。
82. 下面的语句声明了什么?
它声明了一个三维数组。
83. JavaScript和ECMA脚本有什么关系?
ECMA脚本类似于规则和准则,而Javascript是用于Web开发的脚本语言。
84. JavaScript中的名称空间是什么,它是如何使用的?
命名空间用于将所需的函数、变量等以唯一的名称分组。这提高了编码的模块性,并实现了代码重用。
85. 如何向不支持JavaScript的旧浏览器隐藏JavaScript代码?
用于向旧浏览器隐藏JavaScript代码:
在```
- WHILE循环
语法:
只要指定的条件为真,就会执行“WHILE循环”。在WHILE循环中,否则,循环将永远不会结束,并且浏览器可能会崩溃。
- do…while循环
语法:
do…while循环与while循环非常相似。唯一的区别是在do…中while循环,即使在检查条件之前,代码的挡路也会执行一次。
示例:
<html>
<head>
<script type="text/javascript">
document.write("<b>Using while loops </b><br />");
var i = 0, j = 1, k;
document.write("Fibonacci series less than 40<br />");
while(i<40)
{
document.write(i + "<br />");
k = i+j;
i = j;
j = k;
}
</script>
</head>
<body>
</body>
</html>
88. 用例子解释的JavaScript Array方法的重要内容是什么?
JavaScript Array方法
Array对象具有许多属性和方法,可帮助开发人员轻松高效地处理数组。可以通过指定arrayname.property来获取属性的值,通过指定 arrayname.method() 来获取方法的输出。
length 属性–>如果想知道数组中的元素数,可以使用length属性。 prototype 属性–>如果要添加新的属性和方法,可以使用prototype属性。 reverse 方法–>可以使用反转方法来反转数组中项目的顺序。 sort 方法–>可以使用排序方法对数组中的项进行排序。 pop 方法–>可以使用pop方法删除数组的最后一项。 shift 方法–>可以使用shift方法删除数组的第一项。 push 方法–>可以添加一个值作为数组的最后一项。
<html>
<head>
<title>
Arrays!!!
</title>
<script type="text/javascript">
var students = new Array("John", "Ann", "Aaron", "Edwin", "Elizabeth");
Array.prototype.displayItems=function(){
for (i=0;i<this.length;i++){
document.write(this[i] + "<br />");
}
}
document.write("students array<br />");
students.displayItems();
document.write("<br />The number of items in students array is " + students.length + "<br />");
document.write("<br />The SORTED students array<br />");
students.sort();
students.displayItems();
document.write("<br />The REVERSED students array<br />");
students.reverse();
students.displayItems();
document.write("<br />THE students array after REMOVING the LAST item<br />");
students.pop();
students.displayItems();
document.write("<br />THE students array after PUSH<br />");
students.push("New Stuff");
students.displayItems();
</script>
</head>
<body>
</body>
</html>
89. JavaScript中的OOPS概念是什么?
很多时候,变量或数组不足以模拟真实情况。可以创建如下对象:
var objName = new Object();
objName.property1 = value1;
objName.property2 = value2;
objName.method1 = function()
{
line of code
}
或
90. 什么是通过对象的属性进行循环?
循环中的for/in通常用于遍历对象的属性。可以为变量指定任何名称,但对象的名称应该与需要遍历的现有对象相同。 语法:
示例:
<html>
<head>
<script type="text/javascript">
var employee={first:"John", last:"Doe", department:"Accounts"};
var details = "";
document.write("<b>Using for/in loops </b><br />");
for (var x in employee)
{
details = x + ": " + employee[x];
document.write(details + "<br />");
}
</script>
</head>
<body>
</body>
</html>
91. 什么是JavaScript单元测试,JavaScript单元测试面临哪些挑战?
JavaScript单元测试是一种测试方法,其中JavaScript测试为网页或Web应用程序模块编写的代码。然后在测试套件中组织这些单元测试。 每个测试套件都包含多个设计为针对单独模块执行的测试。最重要的是,它们不会与任何其他模块冲突,并且彼此之间的依赖关系较少(某些关键情况可能会导致依赖关系)。 JavaScript单元测试的挑战:
以下是JavaScript单元测试的重要挑战:
- 许多其他语言都支持在浏览器、稳定环境和运行环境中进行单元测试,但是JavaScript不能
- 可以使用其他语言理解某些系统操作,但使用JavaScript则不是这样
- 一些JavaScript是为可能具有多个依赖项的Web应用程序编写的。
- JavaScript很适合与HTML和CSS结合使用,而不是在Web上使用
- 页面呈现和DOM操作的困难
- 有时,会在屏幕上发现一条关于“无法加载example.js”的错误消息,或者任何其他关于版本控制的JavaScript错误。这些漏洞属于单元测试JavaScript
JavaScript单元测试解决方案:
- 不要使用全局变量。
- 勿操作预定义的对象。
- 在库的基础上设计核心功能。
- 尝试创建依赖较少的小部分功能。
92. 有哪些重要的JavaScript单元测试框架?
以下是广泛使用的流行JavaScript单元测试框架和工具的精选列表:
Unit.js:它被称为运行在浏览器和Node.js上的开放源码断言库。它与OTHE非常兼容,提供了完整的断言列表文档API。
QUnit:它既用于客户端JavaScript单元测试,也用于服务器端JavaScript单元测试。它支持节点长期支持计划。
Jasmine:Jasmine是用于单元测试JavaScript的行为驱动开发框架。它不需要DOM,并且提供了一种简单的语法,可以为任何测试编写。
Karma:Karma是一个开源的生产性测试环境。可以轻松地在真实设备上运行测试。
mocha:mocha在Node.js和浏览器中运行。提供对丰富功能的巨大支持,如特定于测试的超时、JavaScriptAPI。
JEST:到目前为止,Facebook使用JEST测试了所有JavaScript代码。不需要任何其他安装配置和库。
AVA:AVA是一个简单的JavaScript单元测试框架。AVA使用子进程来运行单元测试JavaScript。
93. JavaScript中的快速排序算法是什么?
快速排序算法遵循分而治之的方法。它根据一定的条件将元素划分为较小的部分,并对这些划分的较小部分执行类似的操作。
快速排序算法是所有编程语言中最常用和最流行的算法之一。如果要理解这一点,首先,我们需要知道什么是排序,JavaScript中的默认排序是什么。
快速排序遵循分而治之算法。它根据某些条件将元素划分为较小的部分,并执行此操作。以下是快速排序的步骤,用简单的话说就是。
- 首先,选择要称为枢轴元素的元素。
- 接下来,将所有数组元素与选定的透视元素进行比较,并对它们进行排列,使小于透视元素的元素留在左侧。比轴心更大的是它的右边。
- 最后,对左侧元素和右侧元素执行与透视元素相同的操作。
这就是快速排序的基本轮廓。以下是执行快速排序需要逐个遵循的步骤。
94.快速排序是如何工作的?
步骤1) 首先,找到数组中的Pivot元素。
步骤2) 从数组的第一个元素开始左指针。
步骤3) 从数组的最后一个元素开始右指针。
步骤4) 将指向的元素与左指针进行比较,如果小于透视元素,则将左指针向右移动(左索引加1)。继续执行此操作,直到左侧元素大于或等于枢轴元素。
步骤5) 将指向的元素与右指针进行比较。如果它大于枢轴元素,继续移动,直到右侧元素小于或等于枢轴元素。
步骤6) 检查左指针是否小于或等于右指针,然后查看这些指针位置中的元素。
步骤7) 增加左指针,减少右指针。
步骤8) 如果左指针索引仍然小于右指针的索引,则重复该过程;否则,返回左指针的索引。
那么,让我们用一个例子来看看这些步骤。让我们考虑一个需要排序的元素数组[5,3,7,6,2,9]。
以下是执行快速排序的步骤,如示例[5,3,7,6,2,9]所示。
步骤1) 确定枢轴为中间元素。因此,7是枢轴元素。
步骤2) 将左指针和右指针分别作为数组的第一个和最后一个元素开始。左指针指向索引0处的5,右指针指向索引5处的9。
步骤3) 将左指针元素与枢轴元素进行比较,因为5<6将左指针向右移位到索引1。
步骤4) 现在,仍然是3<6,所以将左指针移到向右多一个索引。现在7>6停止递增左指针,现在左指针是索引2。
步骤5) 现在,将右指针处的值与Pivot元素进行比较。现在,当2<6时,停止移动右指针。
步骤6) 左指针和右指针上的两个值相互交换。
步骤7) 将两个指针再移动一步。
步骤8) 由于6=6,因此将指针移动到另一个步骤,并在左指针穿过右指针并返回左指针的索引时停止。
在这里,基于上面的方法,我们需要编写上述步骤中提到的交换元素和对数组进行分区的代码。
示例:
var items = [5,3,7,6,2,9];
function swap(items, leftIndex, rightIndex){
var temp = items[leftIndex];
items[leftIndex] = items[rightIndex];
items[rightIndex] = temp;
}
function: partition(items, left, right) {
var pivot = items[Math.floor((right + left) / 2)], //middle element
i = left, //left pointer
j = right; //right pointer
while (i <= j) {
while (items[i] < pivot) {
i++;
}
while (items[j] > pivot) {
j--;
}
if (i <= j) {
swap(items, i, j); //sawpping two elements
i++;
j--;
}
}
return i;
}
function quickSort(items, left, right) {
var index;
if (items.length > 1) {
index = partition(items, left, right); //index returned from partition
if (left < index - 1) { //more elements on the left side of the pivot
quickSort(items, left index - 1);
}
if (index < right) { //more elements on the right side of the pivot
quickSort(items, index, right);
}
}
return items;
}
// first call to quick sort
var sortedArray = quickSort(items, 0, items.length - 1);
console.log(sortedArray); //prints [2,3,5,6,7,9]
94. JavaScript中的DOM是什么?
JavaScript可以使用文档对象模型(DOM)访问网页中的所有元素。网页浏览器在加载网页时创建网页的DOM。
95. 如何使用DOM和事件?
使用DOM,JavaScript可以执行多个任务。它可以创建新的元素和属性,更改现有的元素和属性,JavaScript还可以对现有的事件做出反应,并在页面中创建新的事件。
- getElementById,innerHTML示例
- getElementById:访问已设置id的元素和属性。
- innerHTML:访问元素的内容。
<html>
<head>
<title>
DOM!!!
</title>
</head>
<body>
<h3 id="one">
Welcome
</h3>
<p>
This is the welcome message.
</p>
<h3>
Technology
</h3>
<p>
This is the technology section.
</p>
<script type="text/javascript">
var text = document.getElementById("one").innerHTML;
alert("The first heading is " + text);
</script>
</body>
</html>
getElementsByTagName示例,getElementsByTagName:使用标记名访问元素和属性。此方法将返回具有相同标记名的所有项目的数组。
<html>
<head>
<title>
DOM!!!
</title>
</head>
<body>
<h3>
Welcome
</h3>
<p>
This is the welcome message.
</p>
<h3>
Technology
</h3>
<p id="second">
This is the technology section.
</p>
<script type="text/javascript">
var paragraphs = document.getElementsByTagName("p");
alert("Content in the second paragraph is " + paragraphs[1].innerHTML);
document.getElementById("second").innerHTML = "The orginal message is changed.";
</script>
</body>
</html>
事件处理程序示例
- createElement:创建新元素
- removeChild:移除元素
- 可以向特定元素添加事件处理程序,如下所示
或
示例:
<html>
<head>
<title>
DOM!!!
</title>
</head>
<body>
<input id="btnClick" type="button" value="Click Me!!"/>
<script type="text/javascript">
document.getElementById("btnClick").addEventListener("click", clicked);
function clicked()
{
alert("You clicked me!!!");
}
</script>
</body>
</html>
96. 什么是外部JavaScript?
计划在所有网页上显示当前日期和时间。假设这将是一项非常耗时和困难的任务。因此,将JavaScript代码保存在扩展名为.js的新文件中。然后,在所有网页中添加一行代码,以指向.js文件,如下所示:
注意:假设.js文件和所有网页都在同一文件夹中。如果外部.js文件位于不同的文件夹中,则需要在src属性中指定文件的完整路径。 示例:
var currentDate = new Date();
var day = currentDate.getDate();
Var month = currentDate.getMonth() + 1;
var monthName;
var hours = currentDate.getHours();
var mins = currentDate.getMinutes();
var secs = currentDate.getSeconds();
var strToAppend;
if(hours > 12 )
{
hours1 = "0" + (hours - 12);
strToAppend = "PM";
}
else if (hours < 12)
{
hours1 = "0" + hours;
strToAppend = "AM";
}
else
{
hours1 = hours;
strToAppend = "PM";
}
if(mins < 10)
mins = "0" + mins;
if (secs < 10)
secs = "0" + secs;
switch (month)
{
case 1:
monthName = "January";
break;
case 2:
monthName = "February";
break;
case 3:
monthName = "March";
break;
case 4:
monthName = "April";
break;
case 5:
monthName = "May";
break;
case 6:
monthName = "June";
break;
case 7:
monthName = "July";
break;
case 8:
monthName = "August";
break;
case 9:
monthName = "September";
break;
case 10:
monthName = "October";
break;
case 11:
monthName = "November";
break;
case 12:
monthName = "December";
break;
}
var year = currentDate.getFullYear();
var myString;
myString = "Today is " + day + " - " + monthName + " - " + year + "Current time is " + hours1 + ":" + mins + ":" + secs + " " + strToAppend + ".";
document.write(myString);
97. 何时使用内部和外部JavaScript代码?
假设只有几行特定于特定网页的代码。在这种情况下,最好将JavaScript代码保留在HTML文档内部。 另一方面,如果在许多网页中使用JavaScript代码,则应考虑将代码保存在单独的文件中。
98. JavaScript中的Cookie是什么?
Cookie是存储在计算机上供浏览器访问的一段数据。Cookie保存为键/值对。
JavaScript Set-Cookie:
可以使用Document创建Cookie。这样的Cookie属性。
甚至可以向Cookie添加过期日期,以便在指定日期从计算机中删除特定的Cookie。如果不设置过期日期,则在用户关闭浏览器时将删除Cookie。
还可以设置域和路径,以指定Cookie属于哪个域以及属于特定域中的哪些目录。默认情况下,Cookie属于设置Cookie的页面。
//创建一个cookie,其中包含指向当前页面的域和指向整个域的路径。
JavaScript Get Cookie :
可以这样访问Cookie,它将返回为当前域保存的所有Cookie。
JavaScript删除Cookie要删除Cookie,只需将Cookie的值设置为空,并将Expires的值设置为经过的日期。
示例:
<html>
<head>
<title>
Cookie!!!
</title>
<script type="text/javascript">
function createCookie(cookieName,cookieValue,daysToExpire)
{
var date = new Date();
date.setTime(date.getTime()+(daysToExpire*24*60*60*1000));
document.cookie = cookieName + "=" + cookieValue + "; expires=" + date.toGMTString();
}
function accessCookie(cookieName)
{
var name = cookieName + "=";
var allCookieArray = document.cookie.split(';');
for(var i=0; i<allCookieArray.length; i++)
{
var temp = allCookieArray[i].trim();
if (temp.indexOf(name)==0)
return temp.substring(name.length,temp.length);
}
return "";
}
function checkCookie()
{
var user = accessCookie("testCookie");
if (user!="")
alert("Welcome Back " + user + "!!!");
else
{
user = prompt("Please enter your name");
num = prompt("How many days you want to store your name on your computer?");
if (user!="" && user!=null)
{
createCookie("testCookie", user, num);
}
}
}
</script>
</head>
<body onload="checkCookie()">
</body>
</html>
99. 给出一个JavaScript乘法表的例子
下面是询问用户想要的行数和列数的简单乘法表的 示例:
<html>
<head>
<title>
Multiplication Table
</title>
<script type="text/javascript">
var rows = prompt("How many rows for your multiplication table?");
var cols = prompt("How many columns for your multiplication table?");
if(rows == "" || rows == null)
rows = 10;
if(cols== "" || cols== null)
cols = 10;
createTable(rows, cols);
function createTable(rows, cols)
{
var j=1;
var output = "<table border='1' width='500' cellspacing='0'cellpadding='5'>";
for(i=1;i<=rows;i++)
{
output = output + "<tr>";
while(j<=cols)
{
output = output + "<td>" + i*j + "</td>";
j = j+1;
}
output = output + "</tr>";
j = 1;
}
output = output + "</table>";
document.write(output);
}
</script>
</head>
<body>
</body>
</html>
100. 用示例说明使用事件的弹出消息
显示一条简单的消息“欢迎!”在演示网页上,当用户将鼠标悬停在消息上时,应该会显示一个弹出窗口,并显示一条消息“欢迎使用我的网页!”。 示例:
<html>
<head>
<title>
Event!!!
</title>
<script type="text/javascript">
function trigger()
{
document.getElementById("hover").addEventListener("mouseover", popup);
function popup()
{
alert("Welcome to my WebPage!!!");
}
}
</script>
<style>
p{
font-size:50px;
position: fixed;
left: 550px;
top: 300px;
}
</style>
</head>
<body onload="trigger();">
<p id="hover">
Welcome!!!
</p>
</body>
</html>