var
:在函数作用域或全局作用域内声明变量。var
变量存在变量提升(hoisting)的特性,即变量在声明之前可以被访问到,但其值为undefined
。var
变量可以被重复声明,并且可以在声明后重新赋值。
let
:在块级作用域(例如,if语句块、循环语句块、函数内部)内声明变量。与var
不同,let
变量不存在变量提升,而是在声明语句处创建。let
变量只在声明的块级作用域内有效,并且不能重复声明。同一个作用域内,可以对let
变量进行重新赋值。
function example() {
if (true) {
let x = 10;
console.log(x); // 10
}
console.log(x); // Error: x is not defined
}
const
:也用于声明块级作用域内的,但与let
不同的是,const
声明的是一个常量,其值在声明后不能被修改。const
声明时必须初始化,并且不能重新赋值。
const pi = 3.14;
pi = 3.14159; // Error: Assignment to constant variable.
const person = {
name: 'John',
age: 30
};
person.age = 31; // 可以修改对象的属性
person = {}; // Error: Assignment to constant variable.
this
值:箭头函数没有自己的this
绑定,它会捕获所在上下文的this
值。这意味着,在箭头函数内部使用this
时,它指向的是定义箭头函数时的上下文,而不是调用箭头函数的上下文。这与普通函数的行为不同,因此需要注意使用箭头函数时的上下文问题。arguments
对象:箭头函数也没有自己的arguments
对象,它会捕获所在上下文的arguments
对象。如果需要使用函数的参数列表,可以使用剩余参数(...args
)语法。[[Construct]]
方法,因此不能使用new
关键字调用,也不能用作构造函数创建对象实例。prototype
属性:箭头函数没有自己的prototype
属性,因此无法使用new
关键字创建的对象无法访问原型链上的方法和属性。return
关键字。this
的指向:由于箭头函数没有自己的this
绑定,它会继承外部作用域的this
。这可能导致在某些情况下,this
的指向不符合预期。需要特别注意箭头函数的使用场景和上下文。嵌入变量:使用${}
语法可以方便地在模板字符串中嵌入变量。变量会被替换为其对应的值。
多行字符串:使用模板字符串可以直接表示多行字符串,而无需使用\n
进行换行。
嵌套模板字符串:模板字符串可以嵌套在其他模板字符串中,以实现更复杂的字符串拼接。
const innerTemplate = `inner template`;
const outerTemplate = `Outer template with ${innerTemplate}`;
console.log(outerTemplate); // Outer template with inner template
构造函数执行:Promise的构造函数是同步执行的。当创建一个Promise实例时,构造函数会立即执行,并且传入的执行器函数(executor function)也会立即执行。在执行器函数中,可以进行异步操作,但Promise的状态不会受到异步操作的影响。
const promise = new Promise((resolve, reject) => {
console.log('Promise constructor execution');
// 异步操作
});
console.log('Promise created');
//在上述代码中,"Promise constructor execution"会首先打印,然后才会打印"Promise created"。
then方法执行:Promise的then
方法是异步执行的。当Promise状态变为已完成或已拒绝时,会触发相应的then
回调函数的执行。但这些回调函数不会立即执行,而是会进入事件队列,等待当前执行栈为空时才会执行。
promise.then(() => {
console.log('Promise fulfilled');
});
console.log('After promise.then');
//在上述代码中,"After promise.then"会先打印,然后才会在事件队列中执行"Promise fulfilled"。
同步(Synchronous):同步任务按照其出现的顺序依次执行,每个任务必须等待上一个任务完成后才能开始执行。在同步任务执行期间,程序会阻塞,即程序会等待当前任务完成后再继续执行下一个任务。
异步(Asynchronous):异步任务不会阻塞程序的执行,而是在后台进行,允许程序在执行异步任务的同时继续执行后续的任务。异步任务通常会在后台进行一些耗时的操作,如网络请求、文件读写、定时器等。
console.log('Task 1');
setTimeout(() => {
console.log('Task 2');
}, 2000);
console.log('Task 3');
//在上述代码中,任务1会先执行,然后是任务3。而任务2是一个异步任务,通过setTimeout函数进行延迟执行,延迟时间为2秒。在等待2秒的期间,程序不会阻塞,会继续执行后续的任务。当延迟时间结束后,任务2会被执行。
forEach
:forEach
方法用于遍历数组的每个元素,并对每个元素执行指定的回调函数。
const arr = [1, 2, 3];
arr.forEach((item) => {
console.log(item);
});
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oCNViiTX-1687280227755)(C:\Users\14361\AppData\Roaming\Typora\typora-user-images\image-20230620174338962.png)]
<% ... %>
, <%= ... %>
, <%! ... %>
等)插入Java代码。javax.servlet.http.HttpServlet
类来实现自定义Servlet。request
(请求对象): 表示客户端发出的HTTP请求。通过该对象,可以获取来自客户端的参数、表单数据、HTTP头信息等。response
(响应对象): 表示将要发送回客户端的HTTP响应。通过该对象,可以设置响应的内容类型、状态码、重定向等。session
(会话对象): 表示用户会话信息,用于在多个请求之间共享数据。通过该对象,可以存储和检索与特定用户相关的数据。application
(应用程序对象): 表示整个Web应用程序的上下文信息。通过该对象,可以在应用程序范围内共享数据。out
(输出对象): 表示输出流,用于将文本发送回客户端。通过该对象,可以将内容直接输出到浏览器。page
(页面对象): 表示当前JSP页面本身。通过该对象,可以调用当前页面的方法和属性。config
(配置对象): 表示当前JSP页面的配置信息。通过该对象,可以获取JSP页面的初始化参数。pageContext
(页面上下文对象): 表示JSP页面的上下文信息。通过该对象,可以访问其他内置对象,如请求、会话和应用程序对象。exception
(异常对象): 表示在JSP页面中发生的异常信息。通过该对象,可以捕获和处理异常。<% ... %>
标签中的变量或通过<%! ... %>
标签中的声明语句创建的变量。request
对象的setAttribute
方法设置的属性。request
对象获取。session
对象的setAttribute
方法设置的属性。session
对象获取。application
对象的setAttribute
方法设置的属性。application
对象获取。元素选择器:通过元素名称选取元素。例如, 类选择器:通过类名选取元素。例如, ID选择器:通过ID选取元素。例如, 属性选择器:通过元素的属性选取元素。例如, 后代选择器:选取特定元素的后代元素。例如, 元素内的 元素
$('p span')
子元素选择器:选取特定元素的直接子元素。例如, 相邻元素选择器:选取紧邻在另一个元素之后的元素。例如, 元素 兄弟元素选择器:选取与另一个元素拥有相同父元素的元素。例如, 元素 过滤选择器:通过不同的条件进行元素过滤和筛选。例如, 用css隐藏图片 用hide方法隐藏 函数 为什么要使用 在HTML文档加载时,浏览器会按照从上到下的顺序逐行解析和执行代码。如果在执行JavaScript代码时,尝试访问尚未加载的HTML元素,可能会导致代码执行失败或出现错误。这种情况尤其在代码位于 为了解决这个问题,jQuery提供了 使用 在jQuery中, 正确的写法是 遍历数组: 遍历对象: 语法结构: 功能:发送一个GET请求到指定的URL,并可选择性地传递数据、处理成功回调和指定数据类型。 语法结构: 功能:发送一个AJAX请求,并提供更多的灵活性和定制选项。 主要区别如下: 在性能方面, 而 选项,因此在处理复杂的AJAX请求时更为适用。对于简单的GET请求,可以使用 在性能方面, 而$('div')
选取所有 $('.class-name')
选取具有特定类名的元素。$('#element-id')
选取具有特定ID的元素。$('[attribute-name="value"]')
选取具有特定属性和值的元素。$('parent-element descendant-element')
选取指定父元素内的后代元素。// 选取所有
$('parent-element > child-element')
选取指定父元素的直接子元素。// 选取所有
元素的直接子元素
$('ul > li')
$('target-element + adjacent-element')
选取紧邻在目标元素后面的相邻元素。// 选取紧邻在
元素之后的下一个
$('target-element ~ sibling-element')
选取与目标元素具有相同父元素的兄弟元素。// 选取与
元素具有相同父元素的兄弟元素
:first
选取第一个元素,:last
选取最后一个元素,:even
选取偶数位置的元素,:odd
选取奇数位置的元素等。// 选取第一个
3.2 ID 选择器和 class 选择器有何不同?
#
字符开头,后跟ID名称。例如,$('#myId')
选取具有特定ID的元素。.
字符开头,后跟类名。例如,$('.myClass')
选取具有特定类名的元素。
3.3 如何使用 jQuery 隐藏一个图片?
// 通过设置CSS属性"display"为"none"来隐藏图片
$('#imageId').css('display', 'none');
// 使用hide()方法隐藏图片
$('#imageId').hide();
3.4 $(document).ready0 是个什么函数?为什么要用它?
$(document).ready()
是jQuery中的一个特殊函数,用于在文档加载完毕后执行特定的代码。正 确的写法是$(document).ready(function() { ... })
,其中函数体中可以包含需要在文档加载完毕后执行的JavaScript代码。$(document).ready()
函数呢?标签中时常见,因为此时HTML文档的主体内容尚未完全加载。
$(document).ready()
函数,它的作用是等待整个HTML文档完全加载后再执行函数内的代码。这样可以确保代码执行时,所有的HTML元素已经加载完毕,可以安全地进行元素选择、操作和事件绑定等操作。$(document).ready()
函数的好处是可以确保代码执行的时机,而不必依赖于代码在HTML文档中的位置或加载速度。无论代码放在标签中还是放在
标签中的任何位置,只要将其放在
$(document).ready()
函数中,都能保证代码在文档加载完成后执行。3.5 jQuery 里的 each()是什么函数? 你是如何使用它的?
each()
函数是用于迭代遍历一个集合(如数组或对象)的方法。它允许你对集合中的每个元素执行相同的操作或回调函数。$.each(collection, callback)
,其中collection
是要迭代的集合,可以是数组、类数组对象或普通对象,而callback
是每个元素的回调函数。
var arr = [1, 2, 3, 4, 5];
$.each(arr, function(index, value) {
console.log('Index:', index, 'Value:', value);
});
var obj = { name: 'John', age: 25, city: 'New York' };
$.each(obj, function(key, value) {
console.log('Key:', key, 'Value:', value);
});
3.6 如何将一个 HTML 元素添加到 DOM 树中的?
append()
:将指定的元素添加为目标元素的子元素的最后一个子节点。// 将一个
prepend()
:将指定的元素添加为目标元素的子元素的第一个子节点。// 将一个
appendTo()
:将指定的元素添加到目标元素作为子元素的最后一个子节点。// 将一个
prependTo()
:将指定的元素添加到目标元素作为子元素的第一个子节点。// 将一个
3.7 jQuery.get0和 jQuery.ajax0 方法之间的区别是什么?
jQuery.get()
方法:
jQuery.get(url [, data] [, success] [, dataType])
。// 发送GET请求,获取数据并处理成功回调
$.get('example.com/data', function(response) {
// 处理响应数据
});
jQuery.ajax()
方法:
jQuery.ajax(settings)
。// 发送AJAX请求,通过设置选项定制请求
$.ajax({
url: 'example.com/data',
method: 'GET',
data: { key: 'value' },
success: function(response) {
// 处理响应数据
},
dataType: 'json'
});
jQuery.get()
方法是jQuery.ajax()
方法的一种简化形式,用于发送GET请求,语法更为简单,不需要设置很多选项,适合简单的GET请求。jQuery.ajax()
方法提供了更多的选项和灵活性,可以通过设置settings
对象来定制请求的各种细节,包括请求类型、URL、数据、请求头、成功回调、错误回调等。jQuery.ajax()
方法支持除GET请求外的其他请求类型,如POST、PUT、DELETE等,可以发送不同类型的请求。jQuery.ajax()
方法提供了更多的选项,因此在处理复杂的AJAX请求时更为适用。对于简单的GET请求,可以使用jQuery.get()
方法来简化代码。3.8 哪种方式更高效:document.getElementbyId(“myId”) 还是 $(“#myId”)?
document.getElementById("myId")
比$("#myId")
更高效。document.getElementById("myId")
是原生JavaScript方法,用于获取具有特定ID的元素。它直接通过浏览器的原生实现来查找元素,速度较快。$("#myId")
是jQuery的选择器,它基于CSS选择器的语法,并通过jQuery库来执行选择和操作。相比于原生方法,它需要更多的处理和额外的函数调用,因此比较起来会稍微慢一些。jQuery.get()
方法来简化代码。3.8 哪种方式更高效:document.getElementbyId(“myId”) 还是 $(“#myId”)?
document.getElementById("myId")
比$("#myId")
更高效。document.getElementById("myId")
是原生JavaScript方法,用于获取具有特定ID的元素。它直接通过浏览器的原生实现来查找元素,速度较快。$("#myId")
是jQuery的选择器,它基于CSS选择器的语法,并通过jQuery库来执行选择和操作。相比于原生方法,它需要更多的处理和额外的函数调用,因此比较起来会稍微慢一些。