continue问题
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
这里for
循环中,当i等于3的时候,continue
就跳过迭代。
构造函数问题
String.prototype.giveMyFood = () => {
return "Please give weirui food!";
};
const name = "weirui";
name.giveMyFood();
复制代码
- A:
"Please give weirui food!"
- B:
TypeError: not a function
- C:
SyntaxError
- D:
undefined
答案: A
String
是一个内置的构造函数,我们可以为它添加一些属性。 在这里给它的原型添加了一个方法。 原始类型的字符串自动转换为字符串对象,由字符串原型函数生成。 因此,所有字符串(字符串对象)都可以访问该方法!
当使用基本类型的字符串调用giveMyFood
时,实际上发生了下面的过程:
- 创建一个
String
的包装类型实例 - 在实例上调用
substring
方法 - 销毁实例
类型转换
const a = {};
const b = { key: "b" };
const c = { key: "c" };
a[b] = 123;
a[c] = 456;
console.log(a[b]);
复制代码
- A:
123
- B:
456
- C:
undefined
- D:
ReferenceError
答案: B 对象键自动转换成了字符串,开始将一个对象设置为对象a的键,值为123,当对象自动转换为字符串时候,就变成了[Object object],所以说是a["Object object"] = 123
。c
对象同样也发生了隐式类型转换。那么,a["Object object"] = 456
。这时候我们打印a[b]
,它实际上是a["Object object"]
,因此返回456
。
call bind问题
const person = { name: "weirui" };
function sayHi(age) {
console.log(`${this.name} is ${age}`);
}
sayHi.call(person, 24);
sayHi.bind(person, 24);
复制代码
- A:
undefined is 21
Lydia is 21
- B:
function
function
- C:
Lydia is 21
Lydia is 21
- D:
Lydia is 21
function
答案: D
我们传递this
关键字引用的对象, 但是,.call
方法会立即执行,
.bind
方法会返回函数的拷贝值,但带有绑定的上下文,不会立即执行。
类型判断
function sayHi() {
return (() => 0)();
}
typeof sayHi();
复制代码
- A:
"object"
- B:
"number"
- C:
"function"
- D:
"undefined"
答案: B
sayHi
函数返回立即调用的函数的返回值。 该函数返回0
,类型为number
。
JavaScript有7种内置类型:
null
,undefined
,boolean
,number
,string
,object
和symbol
。function
不是一个类型,因为函数是对象,它的类型是object
。
再来看一个类型判断的问题:
哪些值是假值?
0;
new Number(0);
("");
(" ");
new Boolean(false);
undefined;
复制代码
- A:
0
,''
,undefined
- B:
0
,new Number(0)
,''
,new Boolean(false)
,undefined
- C:
0
,''
,new Boolean(false)
,undefined
- D: 所有都是假值
答案: A
JavaScript
中只有6个假值:
undefined
null
NaN
0
''
(empty string)false
函数构造函数,如new Number
和new Boolean
都是真值。