15. 下面代码的输出是什么?
let number = 0; console.log(number++); console.log(++number); console.log(number);
A: 1 1 2
B: 1 2 2
C: 0 2 2
D: 0 1 2
答案: C
后缀一元运算符++:
- 返回值(返回0)
- 增加值(数字现在是1)
前缀一元运算符++:
- 增加值(数字现在是2)
- 返回值(返回2)
所以返回0 2 2。
16. 下面代码的输出是什么?
function getPersonInfo(one, two, three) { console.log(one); console.log(two); console.log(three); } const person = "Lydia"; const age = 21; getPersonInfo`${person} is ${age} years old`;
A: Lydia 21 ["", "is", "years old"]
B: ["", "is", "years old"] Lydia 21
C: Lydia ["", "is", "years old"] 21
答案: B
如果使用标记的模板字符串,则第一个参数的值始终是字符串值的数组。 其余参数获取传递到模板字符串中的表达式的值!
17. 下面代码的输出是什么?
function checkAge(data) { if (data === { age: 18 }) { console.log("You are an adult!"); } else if (data == { age: 18 }) { console.log("You are still an adult."); } else { console.log(`Hmm.. You don't have an age I guess`); } } checkAge({ age: 18 });
A: You are an adult!
B: You are still an adult.
C: Hmm.. You don't have an age I guess
答案: C
在比较相等性,原始类型通过它们的值进行比较,而对象通过它们的引用进行比较。JavaScript检查对象是否具有对内存中相同位置的引用。
我们作为参数传递的对象和我们用于检查相等性的对象在内存中位于不同位置,所以它们的引用是不同的。
这就是为什么{ age: 18 } === { age: 18 }和 { age: 18 } == { age: 18 } 返回 false的原因。
18. 下面代码的输出是什么?
function getAge(...args) { console.log(typeof args); } getAge(21);
A: "number"
B: "array"
C: "object"
D: "NaN"
答案: C
扩展运算符(... args)返回一个带参数的数组。 数组是一个对象,因此typeof args返回object。
20. 下面代码的输出是什么?
function getAge() { "use strict"; age = 21; console.log(age); } getAge();
A: 21
B: undefined
C: ReferenceError
D: TypeError
答案: C
使用“use strict”,可以确保不会意外地声明全局变量。 我们从未声明变量age,因为我们使用`use strict',它会引发一个ReferenceError。 如果我们不使用“use strict”,它就会起作用,因为属性age会被添加到全局对象中。