for (let i = 1; i < 5; i++) {
if (i === 3) continue
console.log(i)
}
-
A:
12 -
B:
123 -
C:
124 -
D:
134
答案: C
如果某个条件返回 true,则 continue 语句跳过本次迭代。
输出是什么?
const foo = () => console.log('First')
const bar = () => setTimeout(() => console.log('Second'))
const baz = () => console.log('Third')
bar()
foo()
baz()
-
A:
FirstSecondThird -
B:
FirstThirdSecond -
C:
SecondFirstThird -
D:
SecondThirdFirst
答案
答案: B
我们有一个 setTimeout 函数,并首先调用它。然而,它是最后打印日志的。
这是因为在浏览器中,我们不仅有运行时引擎,还有一个叫做 WebAPI 的东西。WebAPI 提供了 setTimeout 函数,也包含其他的,例如 DOM。
将 callback 推送到 WebAPI 后,setTimeout 函数本身(但不是回调!)将从栈中弹出。
当您单击该段落时,日志输出是什么?
Click here!
-
A:
pdiv -
B:
divp -
C:
p -
D:
div
答案: A
如果我们点击 p,我们会看到两个日志:p 和 div。在事件传播期间,有三个阶段:捕获、目标和冒泡。默认情况下,事件处理程序在冒泡阶段执行(除非将 useCapture 设置为 true)。它从嵌套最深的元素向外传播。
输出是什么?
function sayHi() {
return (() => 0)()
}
typeof sayHi()
-
A:
"object" -
B:
"number" -
C:
"function" -
D:
"undefined"
答案: B
sayHi 方法返回的是立即执行函数(IIFE)的返回值.此立即执行函数的返回值是 0, 类型是 number
参考:只有7种内置类型:null,undefined,boolean,number,string,object 和 symbol。 function 不是一种类型,函数是对象,它的类型是object。
输出是什么?
console.log(typeof typeof 1)
-
A:
"number" -
B:
"string" -
C:
"object" -
D:
"undefined"
答案: B
typeof 1 返回 "number"。 typeof "number" 返回 "string"。
输出是什么?
const numbers = [1, 2, 3]
numbers[10] = 11
console.log(numbers)
-
A:
[1, 2, 3, 7 x null, 11] -
B:
[1, 2, 3, 11] -
C:
[1, 2, 3, 7 x empty, 11] -
D:
SyntaxError
答案: C
当你为数组设置超过数组长度的值的时候, JavaScript 会创建名为 "empty slots" 的东西。它们的值实际上是 undefined。你会看到以下场景:
[1, 2, 3, 7 x empty, 11]
这取决于你的运行环境(每个浏览器,以及 node 环境,都有可能不同)
JavaScript 中的一切都是?
A: 基本类型与对象
B: 函数与对象
C: 只有对象
D: 数字与对象
答案: A
JavaScript 只有基本类型和对象。
基本类型包括 boolean, null, undefined, bigint, number, string, symbol。
输出是什么?
!!null
!!''
!!1
-
A:
falsetruefalse -
B:
falsefalsetrue -
C:
falsetruetrue -
D:
truetruefalse
B
null 是 fasle。 !null 的值是 true。 !true 的值是 false。
"" 是 fasle。 !"" 的值是 true。 !true 的值是 false。
1 是 true。 !1 的值是 false。 !false 的值是 true。
setInterval 方法的返回值是什么?
A: 一个唯一的id
B: 该方法指定的毫秒数
C: 传递的函数
D: undefined
答案: A
setInterval 返回一个唯一的 id。此 id 可被用于 clearInterval 函数来取消定时。
输出是什么?
[...'Lydia']
A: ["L", "y", "d", "i", "a"]
B: ["Lydia"]
C: [[], "Lydia"]
D: [["L", "y", "d", "i", "a"]]
答案: A
string 类型是可迭代的。扩展运算符将迭代的每个字符映射成一个元素。
输出是什么?
let person = { name: "Lydia" };
const members = [person];
person = null;
console.log(members);
-
A:
null -
B:
[null] -
C:
[{}] -
D:
[{ name: "Lydia" }]
首先我们声明了一个拥有name属性的对象 person。然后我们又声明了一个变量members. 将首个元素赋值为变量person。 当设置两个对象彼此相等时,它们会通过 引用 进行交互。但是当你将引用从一个变量分配至另一个变量时,其实只是执行了一个 复制 操作。(注意一点,他们的引用 并不相同!),接下来我们让person等于null。我们没有修改数组第一个元素的值,而只是修改了变量person的值,因为元素(复制而来)的引用与person不同。members的第一个元素仍然保持着对原始对象的引用。当我们输出members数组时,第一个元素会将引用的对象打印出来。
输出是什么?
const person = {
name: "Lydia",
age: 21
};
for (const item in person) {
console.log(item);
}
-
A:
{ name: "Lydia" }, { age: 21 } -
B:
"name", "age" -
C:
"Lydia", 21 -
D:
["name", "Lydia"], ["age", 21]
答案: B
在for-in循环中,通过循环key,也就是这里的name和age。在底层,对象的key都是字符串(如果他们不是Symbol的话)。在每次循环中,我们将item设定为当前遍历到的key.所以一开始,item是name,之后 item输出的则是age。
输出是什么?
console.log(3 + 4 + "5");
-
A:
"345" -
B:
"75" -
C:
12 -
D:
"12"
答案: B
当所有运算符的 优先级 相同时,计算表达式需要确定运算符的结合顺序,即从右到左还是从左往右。在这个例子中,我们只有一类运算符+,对于加法来说,结合顺序就是从左到右。
3 + 4首先计算,得到数字7.
由于类型的强制转换,7 + '5'的结果是"75". JavaScript将7转换成了字符串,可以参考问题15.我们可以用+号把两个字符串连接起来。 "7" + "5" 就得到了"75".
num的值是什么?
const num = parseInt("7*6", 10);
-
A:
42 -
B:
"42" -
C:
7 -
D:
NaN
只返回了字符串中第一个字母. 设定了 进制 后 (也就是第二个参数,指定需要解析的数字是什么进制: 十进制、十六机制、八进制、二进制等等……),parseInt 检查字符串中的字符是否合法. 一旦遇到一个在指定进制中不合法的字符后,立即停止解析并且忽略后面所有的字符。
*就是不合法的数字字符。所以只解析到"7",并将其解析为十进制的7. num的值即为7.
输出是什么?
function Car() {
this.make = "Lamborghini";
return { make: "Maserati" };
}
const myCar = new Car();
TCP协议
- TCP 和 UDP 的区别?
- TCP 三次握手的过程?
- 为什么是三次而不是两次、四次?
- 三次握手过程中可以携带数据么?
- 说说 TCP 四次挥手的过程
- 为什么是四次挥手而不是三次?
- 半连接队列和 SYN Flood 攻击的关系
- 如何应对 SYN Flood 攻击?
- 介绍一下 TCP 报文头部的字段
- TCP 快速打开的原理(TFO)
- 说说TCP报文中时间戳的作用?
- TCP 的超时重传时间是如何计算的?
- TCP 的流量控制
- TCP 的拥塞控制
- 说说 Nagle 算法和延迟确认?
- 如何理解 TCP 的 keep-alive?
浏览器篇
- 浏览器缓存?
- 说一说浏览器的本地存储?各自优劣如何?
- 说一说从输入URL到页面呈现发生了什么?
- 谈谈你对重绘和回流的理解
- XSS攻击
- CSRF攻击
- HTTPS为什么让数据传输更安全?
- 实现事件的防抖和节流?
- 实现图片懒加载?