0
点赞
收藏
分享

微信扫一扫

js 学习【三】


输出是什么?

for (let i = 1; i < 5; i++) {
if (i === 3) continue
console.log(i)
}

  • A: ​​1​​​ ​​2​
  • B: ​​1​​​ ​​2​​​ ​​3​
  • C: ​​1​​​ ​​2​​​ ​​4​
  • D: ​​1​​​ ​​3​​​ ​​4​

答案: C

如果某个条件返回 ​​true​​​,则 ​​continue​​ 语句跳过本次迭代。

输出是什么?

const foo = () => console.log('First')
const bar = () => setTimeout(() => console.log('Second'))
const baz = () => console.log('Third')

bar()
foo()
baz()

  • A: ​​First​​​ ​​Second​​​ ​​Third​
  • B: ​​First​​​ ​​Third​​​ ​​Second​
  • C: ​​Second​​​ ​​First​​​ ​​Third​
  • D: ​​Second​​​ ​​Third​​​ ​​First​

答案

 

答案: B

我们有一个 ​​setTimeout​​ 函数,并首先调用它。然而,它是最后打印日志的。

这是因为在浏览器中,我们不仅有运行时引擎,还有一个叫做 ​​WebAPI​​​ 的东西。​​WebAPI​​​ 提供了 ​​setTimeout​​ 函数,也包含其他的,例如 DOM。

将 callback 推送到 WebAPI 后,​​setTimeout​​ 函数本身(但不是回调!)将从栈中弹出。

当您单击该段落时,日志输出是什么?

<div onclick="console.log('div')">
<p onclick="console.log('p')">
Click here!
</p>
</div>

  • A: ​​p​​​ ​​div​
  • B: ​​div​​​ ​​p​
  • 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: ​​false​​​ ​​true​​​ ​​false​
  • B: ​​false​​​ ​​false​​​ ​​true​
  • C: ​​false​​​ ​​true​​​ ​​true​
  • D: ​​true​​​ ​​true​​​ ​​false​

 

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();
console.log(myCar.make);

  • A: ​​"Lamborghini"​
  • B: ​​"Maserati"​
  • C: ​​ReferenceError​
  • D: ​​TypeError​

 

答案: B

返回属性的时候,属性的值等于 返回的 值,而不是构造函数中设定的值。我们返回了字符串 ​​"Maserati"​​​,所以 ​​myCar.make​​​等于​​"Maserati"​​.

输出是什么?

const set = new Set([1, 1, 2, 3, 4]);

console.log(set);

  • A: ​​[1, 1, 2, 3, 4]​
  • B: ​​[1, 2, 3, 4]​
  • C: ​​{1, 1, 2, 3, 4}​
  • D: ​​{1, 2, 3, 4}​

 

答案: D

​Set​​对象是独一无二的值的集合:也就是说同一个值在其中仅出现一次。

我们传入了数组​​[1, 1, 2, 3, 4]​​​,他有一个重复值​​1​​​.以为一个集合里不能有两个重复的值,其中一个就被移除了。所以结果是 ​​{1, 2, 3, 4}​​.

输出是什么?

// counter.js
let counter = 10;
export default counter;

// index.js
import myCounter from "./counter";

myCounter += 1;

console.log(myCounter);

  • A: ​​10​
  • B: ​​11​
  • C: ​​Error​
  • D: ​​NaN​

 

答案: C

引入的模块是 只读 的: 你不能修改引入的模块。只有导出他们的模块才能修改其值。

当我们给​​myCounter​​​增加一个值的时候会抛出一个异常: ​​myCounter​​是只读的,不能被修改。

输出是什么?

const name = "Lydia";
age = 21;

console.log(delete name);
console.log(delete age);

  • A: ​​false​​​, ​​true​
  • B: ​​"Lydia"​​​, ​​21​
  • C: ​​true​​​, ​​true​
  • D: ​​undefined​​​, ​​undefined​

 

答案: A

​delete​​​操作符返回一个布尔值: ​​true​​​指删除成功,否则返回​​false​​​. 但是通过 ​​var​​​, ​​const​​​ 或 ​​let​​​ 关键字声明的变量无法用 ​​delete​​ 操作符来删除。

​name​​​变量由​​const​​​关键字声明,所以删除不成功:返回 ​​false​​​. 而我们设定​​age​​​等于​​21​​​时,我们实际上添加了一个名为​​age​​​的属性给全局对象。对象中的属性是可以删除的,全局对象也是如此,所以​​delete age​​​返回​​true​​.

输出是什么?

const numbers = [1, 2, 3, 4, 5];
const [y] = numbers;

console.log(y);

  • A: ​​[[1, 2, 3, 4, 5]]​
  • B: ​​[1, 2, 3, 4, 5]​
  • C: ​​1​
  • D: ​​[1]​

 

答案: C

我们可以通过解构赋值来解析来自对象的数组或属性的值,比如说:​​a​​​的值现在是​​1​​​,​​b​​​的值现在是​​2​​​.而在题目中,我们是这么做的:也就是说,​​y​​​等于数组的第一个值就是数字​​1​​​.我们输出​​y​​​, 返回​​1​​.

输出是什么?

const user = { name: "Lydia", age: 21 };
const admin = { admin: true, ...user };

console.log(admin);

  • A: ​​{ admin: true, user: { name: "Lydia", age: 21 } }​
  • B: ​​{ admin: true, name: "Lydia", age: 21 }​
  • C: ​​{ admin: true, user: ["Lydia", 21] }​
  • D: ​​{ admin: true }​

 

答案: B

扩展运算符​​...​​​为对象的组合提供了可能。你可以复制对象中的键值对,然后把它们加到另一个对象里去。在本例中,我们复制了​​user​​​对象键值对,然后把它们加入到​​admin​​​对象中。​​admin​​​对象就拥有了这些键值对,所以结果为​​{ admin: true, name: "Lydia", age: 21 }​​.

 

 

举报

相关推荐

0 条评论