隐式转换

一元操作符

一元操作符包括,+, -, ~, !,其中 +, - 需要和加法运算符区分开。

ECMA 规定了 一元操作符 求值过程。

1
2
3
4
console.log(+true); // 1
console.log(+[]); // 0
console.log(+{}); //NaN
console.log(+"123"); // 123

对于 + 一元表达式求值,需要首先对操作数(V)取值(GetValue, 对取值结果进行 ToNumber 操作。

ToNumber:

  1. 如果 V 是 Number,返回 V
  2. 如果 V 是 SymbolBigInt 抛出错误 TypeError
  3. 如果 V undefined, 返回 NaN
  4. 如果 V 是 nullfalse 返回 +0
  5. 如果 V 是 true 返回 1 (案例 1)
  6. 如果 V 是 String 返回 StringToNumber(argument) StringToNumber 规定如果不能转成数字,返回 NaN 如果可以则返回 Number (案例 4)
  7. V 如果是一个 Object
  8. 将 V 转换为原始值 ToPrimitive 数组将会通过 toString 转换为 "", 再次执行第 6 步,最终数组被转换为 0 (案例 2),对象在经过 ToPrimitive 转换为 [Object object], 在执行 StringToNumber 由于不能转换为数字,最终返回 NaN (案例 3)
  9. 原始值不是对象,再次执行 ToNumber
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2025 SunZhiqi

此时无声胜有声!

支付宝
微信