Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

重学js —— js数据类型:Number(二) #96

Open
lizhongzhen11 opened this issue Apr 11, 2020 · 0 comments
Open

重学js —— js数据类型:Number(二) #96

lizhongzhen11 opened this issue Apr 11, 2020 · 0 comments
Labels
js基础 Good for newcomers 重学js 重学js系列 规范+MDN

Comments

@lizhongzhen11
Copy link
Owner

lizhongzhen11 commented Apr 11, 2020

js数据类型:Number(二)

Number::unit 形式运算算法 续

Number::subtract( x, y ) 减法

x - y 等同于 x + (-y)

Number::leftShift( x, y ) 左移

  1. 定义 lnum!ToInt32(x)
  2. 定义 rnum!ToUint32(y)
  3. 定义 shiftCount 为掩盖 rnum 的除最低有效5位以外的所有位的结果,即计算 rnum & 0x1F
  4. shiftCount 位返回左移 lnum 结果。该结果是有符号的32位 整数

Number::signedRightShift( x, y ) 有符号右移

  1. 定义 lnum!ToInt32(x)
  2. 定义 rnum!ToUint32(y)
  3. 定义 shiftCount 为掩盖 rnum 的除最低有效5位以外的所有位的结果,即计算 rnum & 0x1F
  4. 返回通过 shiftCount 位对 lnum 执行符号扩展右移的结果。传播最高有效位。该结果是有符号的32位 整数

Number::unsignedRightShift( x, y ) 无符号右移

  1. 定义 lnum!ToInt32(x)
  2. 定义 rnum!ToUint32(y)
  3. 定义 shiftCount 为掩盖 rnum 的除最低有效5位以外的所有位的结果,即计算 rnum & 0x1F
  4. 返回通过 shiftCount 位执行 lnum填充0 右移的结果。空位用零填充。该结果是无符号的32位 整数

Number::lessThan( x, y ) 小于

  1. 如果 xNaN,返回 undefined
  2. 如果 yNaN,返回 undefined
  3. 如果 xy 有相同的 Number值,返回 false
  4. 如果 x+0y-0,返回 false
  5. 如果 x-0y+0,返回 false
  6. 如果 x+∞,返回 false
  7. 如果 y+∞,返回 true
  8. 如果 y-∞,返回 false
  9. 如果 x-∞,返回 true
  10. 如果 x数学值 小于 y数学值,它们的数学值都是有限且不为0的话,返回 true。否则,返回 false

Number::equal( x, y ) 等于

注意:Number类型的 === 调用的就是该算法

  1. 如果 xNaN,返回 false
  2. 如果 yNaN,返回 false
  3. 如果 xy 有相同的 Number值,返回 true
  4. 如果 x+0y-0,返回 true
  5. 如果 x-0y+0,返回 true
  6. 否则返回 false

Number::sameValue( x, y ) 相同值

  1. 如果 xNaNy 也是 NaN,返回 true
  2. 如果 x+0y-0,返回 false
  3. 如果 x-0y+0,返回 false
  4. 如果 xy 有相同的 Number值,返回 true
  5. 否则返回 false

Number::sameValueZero( x, y )

  1. 如果 xNaNy 也是 NaN,返回 true
  2. 如果 x+0y-0,返回 true
  3. 如果 x-0y+0,返回 true
  4. 如果 xy 有相同的 Number值,返回 true
  5. 否则返回 false

NumberBitwiseOp( op, x, y )

  1. 定义 lnum!ToInt32(x)
  2. 定义 rnum!ToUint32(y)
  3. 返回将按位运算符 op 应用于 lnumrnum 的结果。该结果是有符号的32位 整数

Number::bitwiseAND( x, y ) 与

  1. 返回 NumberBitwiseOp(&, x, y)

Number::bitwiseXOR( x, y ) 异或

  1. 返回 NumberBitwiseOp(^, x, y)

Number::bitwiseOR( x, y ) 或

  1. 返回 NumberBitwiseOp(|, x, y)

Number::toString( x )

  1. 如果 xNaN,返回字符串 "NaN"
  2. 如果 x+0-0,返回字符串 "0"
  3. 如果 x 比 0 小,返回 "-"!Number::toString( -x ) 的字符串拼接
  4. 如果 x+∞,返回字符串 "Infinity"
  5. 否则,定义 nk 以及 s 为符合 k ≥ 1, 10k - 1 ≤ s < 10k 条件的整数,R(s) x 10RR(n) - R(k)Number值x,同时 k 应尽可能的小。请注意,ks 的十进制表示形式的位数,s 不能被 10R 整除,并且 s 的最低有效位不一定由这些条件唯一确定。
  6. 如果 k ≤ n ≤ 21,返回下面的字符串拼接:
    1. s 十进制表示形式的 k 位的码元(按顺序,没有前导0)
    2. n-k 出现码元 0x0030(数字0)
  7. 如果 0 < n ≤ 21,返回下面的字符串拼接:
    1. s 十进制表示形式的 n 位的最高有效位的码元
    2. 码元 0x002E (句号)
    3. s 十进制表示形式的剩下的 k - n 位的码元
  8. 如果 -6 < n ≤ 0,返回下面的字符串拼接:
    1. 码元 0x0030 (数字0)
    2. 码元 0x002E (句号)
    3. -n 出现码元 0x0030 (数字0)
    4. s 十进制表示形式的 k 位的码元
  9. 否则,如果 k = 1,返回下面的字符串拼接:
    1. s 单个数字的码元
    2. 码元 0x0065 (拉丁文小写字母E)
    3. 码元 0x002B (+号)或 0x002D (减号),根据 n -1 的正负结果
    4. 整数 abs(n - 1) 十进制表示形式的码元 (没有前导0)
  10. 返回下面的字符串拼接:
    1. s 十进制表示形式最高有效位的码元
    2. 码元 0x002E (句号)
    3. s 十进制表示形式剩余的 k - 1 位码元
    4. 码元 0x0065 (拉丁文小写字母E)
    5. 码元 0x002B (+号)或 0x002D (减号),根据 n -1 的正负结果
    6. 整数 abs(n - 1) 十进制表示形式的码元 (没有前导0)

思考

toString为何要这样写?

1.toString() // Invalid or unexpected token
1..toString() // '1'
(1).toString() // '1'
1 .toString() // '1'

这个其实和浮点数有点关系。js是支持浮点数的,举个例子,浮点数 1.1,这里的小数点表示 我是个浮点数,所以一般来说,直接像上面那样采用字面量形式来写的话,需要区分浮点数!

1.toString() 这种写法,js引擎会默认 1. 这个是浮点数,所以改成 1..toString() 则避免了这种歧义。当然,用括号括起来语义上看起来更清晰。

@lizhongzhen11 lizhongzhen11 added js基础 Good for newcomers 重学js 重学js系列 规范+MDN labels Apr 11, 2020
@lizhongzhen11 lizhongzhen11 changed the title 重学就是 —— js数据类型(二):Number(二) 重学js —— js数据类型(二):Number(二) Apr 11, 2020
@lizhongzhen11 lizhongzhen11 changed the title 重学js —— js数据类型(二):Number(二) 重学js —— js数据类型:Number(二) Jun 4, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js基础 Good for newcomers 重学js 重学js系列 规范+MDN
Projects
None yet
Development

No branches or pull requests

1 participant