按位或是怎么保证结果总是数字的,这个转换看不懂

https://img4.mukewang.com/5c665d790001c9cc04180400.jpg

对象转换成数字,先调用 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)));


30秒到达战场
浏览 407回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript