小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
前言
数值(上) 经过前一篇文章的洗礼,我们也要正式进入数值篇(中)了,来接受运算符、位运算符的洗礼吧亲...
运算符
JavaScript中常用的运算符如表2-1和表2-2所示
表 2-1 前缀运算符
| 运算符 | 意义 | 描述 |
|---|---|---|
| + | 转为数值类型 | 在作为前缀运算符使用时,作用将目标转换为数值类型。如果转换失败之后,结果就会变成NaN。不过我推荐你直接使用Number函数,因为他的语义更为明确 |
| - | 反转正负 | 我想这个没啥人不晓得嘛,作为前缀运算符使用的时候iou,作用是改变目标的正负。JavaScript的数值字面量其实是不区分正负的,所以像-1的-其实就是前缀运算符,并不是字面量的一部分 |
| typeof | 返回类型 | 如果目标是一个数值类型(哪怕是NaN),那么该前缀运算符返回的结构是“number” |
表 2-2 中缀运算符
| 运算符 | 意义 | 描述 |
|---|---|---|
| + | 加法运算 | 重点来了!:+除了可以做加法运算之外,还可以用于字符串拼接。两值相加的时候,如果其中一个是字符串,那么另一个值也会被转换为字符串进行拼接.这种设计其实是略危险的。要在 JavaScript 中做数值加法运算,除了使用 + 别无他法,所以我们在做两数相加的时候要格外小心。这个时候 Number 函数就排上用场了,它能将操作值转换为数,保证相加值都为数值类型 |
| - | 减法运算 | 一 |
| * | 乘法运算 | 一 |
| / | 除法运算 | 注意该运算符不是“整数”的意思。如果两个整数使用/相除,那么结果可能是小数。例如,5/2的结果是2.5,而不是2一样 |
| % | 取余运算 | JavaScript并不存在取模运算,只有取余运算。取余运算的政府取决于除数。例如,-5%2的结果为 - 1。我个人认为取模运算更为实用。。。(原文哈) |
| ** | 幂运算 | JavaScript 吸收了FORTRAN的双星号运算符作为幂运算符,看起来相当有年代感 |
位运算符
| 运算符 | 名称 | 描述 | |
|---|---|---|---|
| & | AND | 如果两位都是 1 则设置每位为 1 | |
| OR | 如果两位之一为 1 则设置每位为 1 | ||
| XOR | 如果两位只有一位为 1 则设置每位为 1 | ||
| ~ | NOT | 反转所有位 | |
| << | 零填充左位移 | 通过从右推入零向左位移,并使最左边的位脱落。 | |
| >> | 有符号右位移 | 通过从左推入最左位的拷贝来向右位移,并使最右边的位脱落。 | |
| >>> | 零填充右位移 | 通过从左推入零来向右位移,并使最右边的位脱落。 |
Math
Math对象包含一系列本该在Number中的重要函数。
Math.floor 和 Math.trunc 都是将数转换为整数的函数。不同的是,math.fllor返回的是一个恰比传入参数小的整数,而math.trunc返回的则是恰比传入参数更接近0的整数。它们在正数上的结果是一样的,但在负数结果上存在差异。
Math.floor(-2.5) // -3
Math.floor(-2.5) // -2
Math.min 返回的是传入的一系列参数中最小的数,而Math.max则返回最大的数。 Math.randow的返回是一个 0 和 1之间的数。这个函数通常在游戏中使用,但不应该在加密应用以及赌博游戏中使用。