它们是本机函数,可能使用您的JS引擎编写的语言编写 - 您需要联系它的源代码。
但是,您可能对描述算法如何工作的EcmaScript specification更感兴趣。
如果你很幸运,对于某些功能你甚至可能找到一个JS等价物。你会发现它们主要是在针对标准测试ES实现的页面上。
进一步观察后,我在ECMAScript规范中找到了这个。
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
调用parseInt函数时,将执行以下步骤:
- 让inputString为ToString(string)。
- 设S是一个新创建的inputString子串,由第一个不是a的字符组成
StrWhiteSpaceChar以及该角色后面的所有字符。 (换句话说,删除前导白色
space。)如果inputString不包含任何这样的字符,那么让S为空字符串。
- 让签名为1。
- 如果S不为空并且S的第一个字符是减号 - 那么让标志为1。
- 如果S不为空并且S的第一个字符是加号+或减号 - 则删除第一个字符
来自S。
- 设R = ToInt32(基数)。
- 让stripPrefix为真。
- 如果R0,那么©Ecma International 2011 105
一个。如果R< 2或R> 36,然后返回NaN。
湾如果R16,则让stripPrefix为假。
- 否则,R = 0
一个。设R = 10。
- 如果stripPrefix为true,那么
一个。如果S的长度至少为2且S的前两个字符为-0x‖或-0X‖,则删除
来自S的前两个字符,让R = 16。
- 如果S包含任何不是基数-R数字的字符,那么让Z成为S的子字符串
第一个这样的角色之前的角色;否则,让Z成为S.
- 如果Z为空,则返回NaN。
- 让mathInt成为数字整数值,用Z表示基数-R表示法,使用字母
A-Z和a-z表示数值为10到35的数字。(但是,如果R为10且Z包含20以上
有效数字,20之后的每个有效数字可以被替换为0数字,可以选择
实施;如果R不是2,4,8,10,16或32,那么mathInt可能是依赖于实现的
近似于由基数-R表示法中的Z表示的数学整数值。)
- 设number为mathInt的Number值。
- 返回标志号码。
注意parseInt可能只将字符串的前导部分解释为整数值;它忽略了任何字符
不能被解释为整数符号的一部分,并且没有给出任何这样的字符的指示
忽略。
醇>
调用parseFloat函数时,将执行以下步骤:
- 让inputString为ToString(string)。
- 让trimmedString成为inputString的子字符串,由最左边的字符组成
StrWhiteSpaceChar和该角色右侧的所有字符。 (换句话说,删除前导白色
space。)如果inputString不包含任何此类字符,则让trimmedString为空字符串。
- 如果trimmedString和trimmedString的任何前缀都不满足StrDecimalLiteral的语法(请参阅
9.3.1),返回NaN。
- 让numberString成为trimmedString的最长前缀,它可能是trimmedString本身,满足
StrDecimalLiteral的语法。
- 返回numberString的MV的Number值。
醇>
注意parseFloat可能只将字符串的前导部分解释为Number值;它忽略了任何字符
不能被解释为十进制文字符号的一部分,并且没有任何指示任何这样的字符
忽略。
如果参数强制转换为NaN,则返回true,否则返回false。
- 如果ToNumber(number)为NaN,则返回true。
- 否则,返回false。
注意ECMAScript代码测试值X是否为NaN的可靠方法是X!== X形式的表达式。
当且仅当X是NaN时,结果才为真。
醇>
这些函数是特定于实现的,具体取决于浏览器,并且不是用JS编写的(除非有人决定在JS中编写浏览器引擎)。不保证代码在不同环境中是相同的,尽管它们(理论上)必须遵守ECMAScript规范的行为。