前端通关手册
Javascript
ES3
a = [],a.push(...[1, 2, 3]) ,a = ?
面试高频指数:★ ☆ ☆ ☆ ☆
a = [1, 2, 3],考核点如下:
[].push:调用数组 push 方法
apply:
第一参数:指定 push 执行时的 this,即正在调用 push 的对象为数组 a
第二参数:传入数组或类数组对象作为参数数组,展开作为 push 的参数列表
push的语法:支持将一个或多个元素添加到数组末尾
arr.push(element1, ..., elementN)
综上,题目等同于
a.push(1, 2, 3) // [1, 2, 3]
a = ?, a1 && a2 && a==3 成立
面试高频指数:★ ★ ★ ★ ☆
== 会触发隐式转换,=== 不会
对象转字符串
先尝试调用对象的 toString()
对象无 toString()或 toString 返回非原始值,调用 valueOf() 方法
将该值转为字符串,并返回字符串结果
否则,抛出类型错误
对象转数字
先尝试调用对象的 valueOf(),将返回原始值转为数字
对象无 valueOf() 或 valueOf 返回不是原始值,调用 toString() 方法,将返回原始值转为数字
否则,抛出类型错误
对象转布尔值
True
代码
const a = {
count: 0,
valueOf() {
return ++this.count
}
}
数组
隐式转换会调用数组的 join 方法,改写此方法
const a = [1, 2, 3]
a.join = a.shift