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

Numbers #11

Open
LiZheGuang opened this issue Dec 19, 2019 · 0 comments
Open

Numbers #11

LiZheGuang opened this issue Dec 19, 2019 · 0 comments

Comments

@LiZheGuang
Copy link
Owner

Numbers

本章介绍数字的单一类型

JavaScript只有浮点数

您可以在JavaScript中表示整数和浮点数:

98
123.45

但是,所有数字只有一个类型:它们都是双精度的,是根据IEEE浮点算术标准(IEEE 754)实现的64位浮点数。

整数只是没有小数点的浮点数:

98 === 98.0
true

请注意,大多数JavaScript引擎通常都可以使用实整数,并具有所有相关的性能和存储大小优势。

Number 文字

让我们检查数字的文字。

整数文字

几个整数文字可让您以各种底数表示整数:

// Binary (base 2)
assert.equal(0b11, 3);

// Octal (base 8)
assert.equal(0o10, 8);

// Decimal (base 10):
assert.equal(35, 35);

// Hexadecimal (base 16)
assert.equal(0xE7, 231);

浮点文字

浮点数只能以10为底表示。

分数:

> 35.0
35

指数:eN表示×10N

> 3e2
300
> 3e-2
0.03
> 0.3e2
30

句法陷阱:整数文字的属性
访问整数文字的属性会带来一个陷阱:如果整数文字后紧跟一个点,则该点将被解释为十进制点:

7.toString(); // syntax error

解决此陷阱的方法有四种:

7.0.toString()
(7).toString()
7..toString()
7 .toString()  // space before dot

算术运算符

二元算术运算符
列出了JavaScript的二进制算术运算符。
Alt text

%是余数运算符

%是余数运算符,不是取模运算符。其结果具有第一个操作数的符号:

> 5 % 3
2
> -5 % 3
-2

一元加号(+)和负号(-)

Alt text

两个运算符都将其操作数强制转换为数字:

> +'5'
5
> +'-12'
-12
> -'9'
-9

因此,一元加号使我们可以将任意值转换为数字。

递增(++)和递减(-)

增量运算符++存在于前缀版本和后缀版本中。在这两个版本中,它都破坏性地向其操作数添加一个。因此,其操作数必须是可以更改的存储位置。

减量运算符-的工作原理相同,但从其操作数中减去一个。接下来的两个示例说明了前缀和后缀版本之间的区别。

总结了递增和递减运算符。

Alt text

接下来,我们将看看这些使用中的运算符的示例。

前缀++和前缀-更改其操作数,然后返回它们。

let foo = 3;
assert.equal(++foo, 4);
assert.equal(foo, 4);

let bar = 3;
assert.equal(--bar, 2);
assert.equal(bar, 2);

后缀++和后缀-返回其操作数,然后更改它们。

let foo = 3;
assert.equal(foo++, 3);
assert.equal(foo, 4);

let bar = 3;
assert.equal(bar--, 3);
assert.equal(bar, 2);

您还可以将这些运算符应用于属性值:

const obj = { a: 1 };
++obj.a;
assert.equal(obj.a, 2);

和数组元素:

const arr = [ 4 ];
arr[0]++;
assert.deepEqual(arr, [5]);

转换成数字

这是将值转换为数字的三种方法:

  • Number(value)
  • +value
  • parseFloat(value) (avoid; different than the other two!)

Alt text

assert.equal(Number(123.45), 123.45);

assert.equal(Number(''), 0);
assert.equal(Number('\n 123.45 \t'), 123.45);
assert.equal(Number('xyz'), NaN);

可以配置如何将对象转换为数字,例如,通过覆盖.valueOf():

> Number({ valueOf() { return 123 } })
123
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant