面试题答案
一键面试Infinity
的算术操作
- 加法(
+
):Infinity + any_number
结果为Infinity
。Infinity + Infinity
结果为Infinity
。
console.log(Infinity + 5); // Infinity console.log(Infinity + Infinity); // Infinity
- 减法(
-
):Infinity - any_number
结果为Infinity
。Infinity - Infinity
结果为NaN
。
console.log(Infinity - 5); // Infinity console.log(Infinity - Infinity); // NaN
- 乘法(
*
):Infinity * any_non - zero_number
:- 如果
any_non - zero_number
为正数,结果为Infinity
。 - 如果
any_non - zero_number
为负数,结果为-Infinity
。
- 如果
Infinity * Infinity
结果为Infinity
。Infinity * 0
结果为NaN
。
console.log(Infinity * 5); // Infinity console.log(Infinity * -5); // -Infinity console.log(Infinity * Infinity); // Infinity console.log(Infinity * 0); // NaN
- 除法(
/
):any_number / Infinity
结果为0
。Infinity / any_non - zero_number
:- 如果
any_non - zero_number
为正数,结果为Infinity
。 - 如果
any_non - zero_number
为负数,结果为-Infinity
。
- 如果
Infinity / Infinity
结果为NaN
。
console.log(5 / Infinity); // 0 console.log(Infinity / 5); // Infinity console.log(Infinity / -5); // -Infinity console.log(Infinity / Infinity); // NaN
NaN
的算术操作
任何包含 NaN
的算术操作结果都为 NaN
。
console.log(NaN + 5); // NaN
console.log(NaN - 5); // NaN
console.log(NaN * 5); // NaN
console.log(NaN / 5); // NaN
undefined
的算术操作
任何包含 undefined
的算术操作结果都为 NaN
,因为 undefined
不能直接参与算术运算。
console.log(undefined + 5); // NaN
console.log(undefined - 5); // NaN
console.log(undefined * 5); // NaN
console.log(undefined / 5); // NaN
数组的算术操作
数组不能直接参与算术操作,除非通过 valueOf
或 toString
方法进行类型转换。如果数组没有重写 valueOf
方法,默认 valueOf
返回数组本身,不能直接用于算术运算。
let arr = [1, 2, 3];
// 以下操作会尝试类型转换
console.log(arr + 5); // "1,2,35",数组先转换为字符串再拼接
对象(有 valueOf
返回数值)的算术操作
- 加法(
+
):- 对象会先调用
valueOf
方法获取数值,然后进行加法运算。
let obj1 = { valueOf: function () { return 5; } }; console.log(obj1 + 3); // 8
- 对象会先调用
- 减法(
-
):- 同样先调用
valueOf
方法获取数值,再进行减法运算。
let obj2 = { valueOf: function () { return 5; } }; console.log(obj2 - 3); // 2
- 同样先调用
- 乘法(
*
):- 先调用
valueOf
方法获取数值,然后进行乘法运算。
let obj3 = { valueOf: function () { return 5; } }; console.log(obj3 * 3); // 15
- 先调用
- 除法(
/
):- 先调用
valueOf
方法获取数值,再进行除法运算。
let obj4 = { valueOf: function () { return 6; } }; console.log(obj4 / 3); // 2
- 先调用