Nodejs JS操作符转化字符串为数字

Nodejs JS操作符转化字符串为数字

JS操作符转化数字

在Node.js源代码里,随处可见使用各种符号处理字符串为数字的。可能由于不同人编写,使用的风格也各有不同。 基本上有下面几种。

将字符串转化为数字

+

将一个数字的字符串转化为数字很简单的一种做法就是在前面加+号。

  var si = +'12';        //  12
  var sn = +'-12';       // -12
  var sf = +'12.7';      // 12.7
  var ss = +'12s';       // NaN

*

使用乘法符号*转化:

  var si = '12' * 1;     // 12
  var sn = '-12' * 1;    // -12
  var sf = '12.7' * 1;   // 12.7
  var ss = '12s' * 1;    // NaN

将字符串转化为整数

~~

运算符~原意是按位取反,使用~~可以将一个可以转化为数字的字符串转化成整数:

  var si = ~~'12';        // 12
  var sn = ~~'-12'        // -12
  var sf = ~~'12.7';      // 12
  var snf = ~~'-12.7';   // -12
  var ss = ~~'12s';       // 0

>>

运算符>>原意是带符号右移,使用>> 0可以将一个可转化的字符串转化成整数:

  var si = '12' >> 0;       // 12
  var sn = '-12' >> 0;      // -12
  var sf = '12.7' >> 0;     // 12
  var snf = '-12.7' >> 0;  // -12
  var ss = '12s' >> 0;      // 0

>>>

运算符>>>原意是不带符号右移,可以使用>>> 0将一个字符串转化为整数:

  var si = '12' >>> 0;     // 12
  var sn = '-12' >>> 0;    // 4294967284
  var sf = '12.7' >>> 0;   // 12
  var ss = '12s' >>> 0;    // 0

注意

使用上面符号时,其转换与JavaScript自带的库有时候表现是不一样的。如:

  var sfp = '12.4';
  var sfn = '-12.7';
  var msfp = Math.floor(sfp);       //  12
  var nsfp = ~~sfp;                 //  12
  var msfn = Math.floor(sfn);       // -13
  var nsfn = ~~sfn;                 // -12

使用符号代替JavaScript库有以下几种情况:

  • 使用符号可能会比库函数性能好。但由于JS解释器不同,有可能出现相反的情况。
  • 减少传输字符,使用符号会节省一定的空间。

但在某些时候,必须使用库函数。如: parseInt('12s')


8 回复

Node.js JS 操作符转化字符串为数字

在Node.js源代码中,我们经常看到使用各种操作符将字符串转换为数字。这些方法各具特色,适用于不同的场景。

将字符串转化为数字

+ 操作符

使用 + 号前缀可以直接将字符串转换为数字。如果字符串无法转换为有效的数字,则返回 NaN

var si = +'12';        // 12
var sn = +'-12';       // -12
var sf = +'12.7';      // 12.7
var ss = +'12s';       // NaN
* 操作符

使用乘法操作符 * 也可以将字符串转换为数字。同样地,如果字符串无法转换为有效的数字,则返回 NaN

var si = '12' * 1;     // 12
var sn = '-12' * 1;    // -12
var sf = '12.7' * 1;   // 12.7
var ss = '12s' * 1;    // NaN

将字符串转化为整数

~~ 操作符

~~ 是按位取反操作符的组合形式,可以用于将字符串转换为整数。需要注意的是,对于负数,结果可能会有所不同。

var si = ~~'12';        // 12
var sn = ~~'-12';       // -12
var sf = ~~'12.7';      // 12
var snf = ~~'-12.7';    // -12
var ss = ~~'12s';       // 0
>> 操作符

>> 是带符号右移操作符,当用于非负数时,可以将字符串转换为整数。对于负数,结果可能会有所不同。

var si = '12' >> 0;       // 12
var sn = '-12' >> 0;      // -12
var sf = '12.7' >> 0;     // 12
var snf = '-12.7' >> 0;   // -12
var ss = '12s' >> 0;      // 0
>>> 操作符

>>> 是不带符号右移操作符,当用于非负数时,可以将字符串转换为整数。对于负数,结果会有所不同。

var si = '12' >>> 0;     // 12
var sn = '-12' >>> 0;    // 4294967284
var sf = '12.7' >>> 0;   // 12
var ss = '12s' >>> 0;    // 0

注意事项

使用上述操作符进行转换时,其行为可能与JavaScript内置的函数(如 parseIntparseFloat)有所不同。例如:

var sfp = '12.4';
var sfn = '-12.7';
var msfp = Math.floor(sfp);       // 12
var nsfp = ~~sfp;                 // 12
var msfn = Math.floor(sfn);       // -13
var nsfn = ~~sfn;                 // -12
  • 使用操作符可能比库函数更高效,但这也取决于具体的JavaScript解释器。
  • 使用操作符可以减少传输字符的数量,从而节省一些空间。

但在某些情况下,比如需要解析特定进制的数字时,必须使用库函数,例如 parseInt('12s', 10)

希望这些示例和解释能够帮助你更好地理解和使用这些操作符来转换字符串为数字。


我习惯用+的方式~

一般字符串转数字是用+或者-0都可以,数字转字符串就+0

楼主,如果不用操作符,有什么库函数可以实现这种功能?

parseInt(‘12s’) 不传第二个参数的话,在ie低版本会有坑

项目中不推荐这么做的,有这几点原因:

1、不够直观,不能一眼让人明白这行程序表达的意思 2、书写必须非常小心,得预计可能产生的结果,增加复杂度、不可预测性 3、多人合作中,同一功能,写法风格各异,维护成本加大 4、多人合作中,很多人压根就不会这种写法,学习与沟通成本增加,没有通用标准写法实际

一般推荐直接使用:parseInt、parseFloat,清晰、简洁、通用

不过纯玩技术、技术研究还是很赞的!

原理是什么

Node.js 中将字符串转化为数字

在 Node.js 中,我们可以使用多种方法将字符串转换为数字。下面是几种常见的方法及其示例代码:

1. 使用 + 操作符

var si = +'12';        // 12
var sn = +'-12';       // -12
var sf = +'12.7';      // 12.7
var ss = +'12s';       // NaN

解释: 将字符串放在 + 前面可以将其转换为数字。如果字符串无法解析为有效的数字,则返回 NaN

2. 使用 * 操作符

var si = '12' * 1;     // 12
var sn = '-12' * 1;    // -12
var sf = '12.7' * 1;   // 12.7
var ss = '12s' * 1;    // NaN

解释: 通过将字符串乘以 1,可以将其转换为数字。同样,无效的字符串会返回 NaN

3. 使用 ~~ 取反操作符

var si = ~~'12';        // 12
var sn = ~~'-12';       // -12
var sf = ~~'12.7';      // 12
var snf = ~~'-12.7';    // -12
var ss = ~~'12s';       // 0

解释: ~~ 是按位取反操作符的双重使用,它可以将字符串转换为整数。当字符串无法解析为有效数字时,返回 0

4. 使用 >> 右移操作符

var si = '12' >> 0;       // 12
var sn = '-12' >> 0;      // -12
var sf = '12.7' >> 0;     // 12
var snf = '-12.7' >> 0;   // -12
var ss = '12s' >> 0;      // 0

解释: >> 是带符号右移操作符,用于将数字右移指定的位数。将字符串右移 0 位可以将其转换为整数。无效的字符串返回 0

5. 使用 >>> 无符号右移操作符

var si = '12' >>> 0;     // 12
var sn = '-12' >>> 0;    // 4294967284
var sf = '12.7' >>> 0;   // 12
var ss = '12s' >>> 0;    // 0

解释: >>> 是无符号右移操作符,它会将负数转换为非常大的正数(如 -12 转换为 4294967284)。对于有效的数字,它仍然会返回整数。

注意事项

  • 上述方法可能会与 JavaScript 的内置函数(如 Math.floor)有不同的行为。
  • 使用这些操作符可能会带来性能优势,但具体效果取决于不同的 JS 解释器。
  • 在某些情况下,必须使用内置函数(如 parseInt),因为操作符可能无法正确处理特定格式的字符串。
回到顶部