字符串'Lydia'
是一个真值。 我们实际上要问的是“这个真值是假的吗?”。 这会返回false
。
5. 哪个选项是不正确的?
const bird = {
size: “small”
};
const mouse = {
name: “Mickey”,
small: true
};
-
A:
mouse.bird.size
-
B:
mouse[bird.size]
-
C:
mouse[bird["size"]]
-
D: All of them are valid
答案: A
在JavaScript
中,所有对象键都是字符串(除了Symbol
)。尽管有时我们可能不会给定字符串类型,但它们总是被转换为字符串。
JavaScript
解释语句。当我们使用方括号表示法时,它会看到第一个左括号[
,然后继续,直到找到右括号]
。只有在那个时候,它才会对这个语句求值。
mouse [bird.size]
:首先它会对bird.size
求值,得到small
。 mouse [“small”]
返回true
。
但是,使用点表示法,这不会发生。 mouse
没有名为bird
的键,这意味着mouse.bird
是undefined
。 然后,我们使用点符号来询问size
:mouse.bird.size
。 由于mouse.bird
是undefined
,我们实际上是在询问undefined.size
。 这是无效的,并将抛出Cannot read property "size" of undefined
。
6. 下面代码的输出是什么?
let c = { greeting: “Hey!” };
let d;
d = c;
c.greeting = “Hello”;
console.log(d.greeting);
-
A:
Hello
-
B:
undefined
-
C:
ReferenceError
-
D:
TypeError
答案: A
在JavaScript
中,当设置它们彼此相等时,所有对象都通过引用进行交互。
首先,变量c
为对象保存一个值。 之后,我们将d
指定为c
与对象相同的引用。
更改一个对象时,可以更改所有对象。
7. 下面代码的输出是什么?
let a = 3;
let b = new Number(3);
let c = 3;
console.log(a == b);
console.log(a === b);
console.log(b === c);
-
A:
true
false
true
-
B:
false
false
true
-
C:
true
false
false
-
D:
false
true
true
答案: C
new Number()
是一个内置的函数构造函数。 虽然它看起来像一个数字,但它并不是一个真正的数字:它有一堆额外的功能,是一个对象。
当我们使用==
运算符时,它只检查它是否具有相同的值。 他们都有3
的值,所以它返回true
。
译者注:
==
会引发隐式类型转换,右侧的对象类型会自动拆箱为Number
类型。
然而,当我们使用===
操作符时,类型和值都需要相等,new Number()
不是一个数字,是一个对象类型。两者都返回 false
。
8. 下面代码的输出是什么?
class Chameleon {
static colorChange(newColor) {
this.newColor = newColor;
}
constructor({ newColor = “green” } = {}) {
this.newColor = newColor;
}
}
const freddie = new Chameleon({ newColor: “purple” });
freddie.colorChange(“orange”);
-
A:
orange
-
B:
purple
-
C:
green
-
D:
TypeError
答案: D
colorChange
方法是静态的。 静态方法仅在创建它们的构造函数中存在,并且不能传递给任何子级。 由于freddie
是一个子级对象,函数不会传递,所以在freddie
实例上不存在freddie
方法:抛出TypeError
。
9. 下面代码的输出是什么?
let greeting;
greetign = {}; // Typo!
console.log(greet