对象转换成数字,先调用 valueOf 方法,如果没有则调用 toString 方法,这里 Date 和 函数的转换看不懂是怎么转换的。
var a = {
valueOf() => 44
}
1 * a // 44
var b = {
toString: () => '22'
}
1 * b // 22
1 * Date // NaN
1 * (() => 'fun') // NaN
感谢 zhenguoli 回答
ToInt32 第二步操作转换的
Let number be ? ToNumber(argument).
If number is NaN, +0, ‑0, +∞, or ‑∞, return +0.
顺便发现第五步
If int32bit ≥ 2^31 , return int32bit ‑ 2^32; otherwise return int32bit.
也就是
4294967297 | 0 // => 1
这就感觉有 TypeScript 会继承这些隐藏的坑啊,毕竟 Kotlin 的代码是这样转换的
// Kotlin
val l = 8589934592
println(or(ll))
// to JavaScript
var l = new Kotlin.Long(0, 2);
println(or(new Kotlin.Long(0, 2)));
相关分类