有一次学生问我为什么要写:
parseInt(something)
something.toLowerCase()
也就是说,为什么一个将变量作为参数,而另一个将变量应用于变量。
我解释说虽然 toLowerCase
是字符串对象的一种方法,但 parseInt
并不是那样设计的。好的,所以它是 window.parseInt
,但这只是使它成为不同对象的方法。
但这让我感到不一致——为什么一些字符串或其他函数不是它们对应对象的方法?
问题是为什么? parseInt
和其他函数不是方法是否有技术原因,或者这只是一个历史怪癖?
最佳答案
一般来说,Javascript 的设计很匆忙,因此质疑每个单独的设计决策并不总是有效地利用您的时间。
话虽如此,特别是对于 parseInt
,原因很容易解释:它几乎可以接受任何任意类型,例如:
parseInt(undefined) // NaN
由于您无法实现 undefined.parseInt()
,唯一的方法就是将其实现为静态函数。
从 ECMAScript 2015 开始,parseInt
已被映射到 Number.parseInt
中,可以说它比在 window
中更有意义。为了向后兼容,window.parseInt
继续存在。
关于JavaScript:为什么有些函数不是方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778118/