JavaScript 测验 #1 和 #2

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

不时参加编码测验有助于刷新我们的编程知识。这就是我决定发布一些 JavaScript 测验的原因。他们肯定会测试您对一些重要的 JavaScript 概念的了解。

假设我们有以下 JavaScript 代码:


 var someVar = 1;
var someObject = {
someVar: 2,
someMethod: function () {
var someVar = 3;

alert(this.someVar); //What is the result ???

setTimeout(function(){ alert(this.someVar); //What is the result ??? }, 10); } };

someObject.someMethod();


问题 :每个警报的输出是什么,为什么?

*把你的答案写在一张纸上,然后阅读答案。*


回答

为了理解这个 JavaScript 示例是如何工作的,我们应该知道 JavaScript“this”关键字是如何工作的。重要的是要知道在 JavaScript 方法的主体中,“this”计算为调用该方法的对象。

这意味着在第一个警报的“this.someVar”表达式中,“this”将计算为调用 someMethod 方法的 someObject 对象,结果为 2(第 3 行中设置的值)。

在第二个警报的“this.someVar”表达式中,由于 window.setTimeout ,“this”将被评估为 Window 全局对象,这将导致 1(第 1 行中设置的值)。

你答对了吗?如果是这样,请拍拍自己的背。并为下一次测验做好准备!


JavaScript 测验 #2

假设我们有以下 JavaScript 代码:


 var someVar = 1;
var someObject = {
someVar: 2,
someMethod: function () {
var someVar = 3;

alert(this.someVar); //What is the result ???

setTimeout(function(){ alert(this.someVar); //What is the result ??? }, 10); } };

someObject.someMethod();

问题 :每个警报的输出是什么,为什么?

*把你的答案写在一张纸上,然后阅读答案。*


回答

为了理解这个 JavaScript 示例将如何工作,我们应该了解以下内容:
1. JavaScript“this”关键字是如何工作的。
2. JavaScript 运算符如何工作。

我在上面详细说明了 JavaScript“this”关键字的工作原理:“this”计算为调用该方法的对象。这意味着 setIimeout 中的 _this.someVar 将被评估为 2。

了解“+”算术运算符的工作原理很重要,在以下行中:

var result = _this.someVar + this.someVar;

此行中 result 的值将计算为:2 + “1” = “21”。这是因为“+”算术 JavaScript 运算符总是有利于字符串,这意味着如果你有一个 numeric + String ,数字操作数将被转换为一个字符串,“+”算术运算符的结果将是一个简单的字符串连接.

来到下一行:

result > 20

这里有一个字符串和一个数字之间的比较,与“+”算术运算符不同,JavaScript 关系运算符偏爱数字,这意味着 result 将被转换为整数,因此比较将是 21 > 20 将被评估为真。

最后在以下行中:

+result--;

“+”一元运算符可用于将其操作数转换为整数,但是,它在这里作为表达式的求值不起作用。后自增运算符在它之前执行,它将 result 转换为整数并将其减 1。

因此,警报将按此顺序产生以下输出:
1. 21
2. 20

请留意下一次测验!