JavaScript - 数值类型的判断与常用转换方式



主要参考:


数值类型的判断方法isNaN()和Number.isNaN()

  • 可接受任意参数,用来判断其参数是否为NaN(not a number)
  • 由于把NaN与任何值(包括其自身)相比得到的结果都是false,因此无法通过=====运算符来判断某个值是否为NaN,isNaN()函数也就是必需的
  • isNaN()与Number.isNaN()
    • 直观的说,isNaN()是用来判断参数值是否为NaN,而Number.isNaN()是用来判断参数值是否为Number.NaN(即还需要判断类型为Number);
    • 因此,isNaN()会将参数值强制转换(通过Number()为Number后再判断是否为NaN,而Number.isNaN()仅判断当前参数值是否为NaN。
    • 综上,可有如下表示:

      isNaN(x)等价于Number.isNaN(Number(x))

Number()

参数可为任何类型数据,具体转换规则可大致划分如下:

  • 数字值,只是简单的传入和返回(前导零存在时无论多少都将视为八进制数);

    Number(123); // 123
    Number(0123); // 83
    Number(00123); // 83
    Number(0x123); // 291
  • Boolean值,true和false将分别被转换为1和0;
    Number(true); // 1
    Number(false); // 0
  • null值,返回为0;
    Number(null); // 0
  • undefined值,返回为NaN;
    Number(undefined); // NaN
  • 字符串,又主要区分以下情况:
    • 字符串中只包含数字(可带正/负号),则(忽略前导零后)转换为十进制数值;

      Number(‘123‘); // 123
      Number(‘+123‘); // 123
      Number(‘-123‘); // -123
      Number(‘0123‘); // 123
    • 字符串中包含有效浮点格式,则(忽略前导零后)将其转换为对应浮点数值;
      Number(‘1.23‘); // 1.23
      Number(‘01.23‘); // 1.23
      Number(‘0.1.23‘); // NaN
    • 字符串中包含有效十六进制格式,则将其转换为十进制数值;
      Number(‘FFF‘); // NaN
      Number(‘0xFFF‘); // 4095
    • 字符串为空(可包含多个空格符),都将转换为0;
      Number(‘‘); // 0
      Number(‘  ‘); // 0
    • 字符串中包含除上述字符外的其他字符时,将返回NaN
  • 对象,将先调用对象的valueOf()方法后再尝试转换其返回值,如结果仍为NaN,会继续调用对象toString()方法并转换其返回值

parseInt()

parseInt()是较于Number()更为通用合理的解决方案

  • 语法

    parseInt(string[, radix])

    • string:将被解析的目标(被转换后的)字符串参数;
    • radix:(建议明确)标记参数string的数值转换基数。当该参数未使用,或值为undefined、0时,将遵循以下自动判断规则:
      • 当字符串已“0x”/“0X”或“0”开头时将自动识别为十六进制或八进制(ECMAScript5中不支持识别为八进制,但各浏览器支持程度不一致);

        parseInt("0xFF"); // 255
        parseInt("0123"); // 10
      • 当字符串起始位为其他值时,默认设定为10(十进制)
  • 基本规则
    • 前导/后置空格都将被忽略:

      parseInt(" 123 "); // 123
    • 识别参数至第一个非数字字符(包括小数点、正/负号等),仅截取前面数字部分,后续字符将被忽略:
      parseInt("123ab"); // 123
      parseInt("1+2"); // 1
    • 当首字符不是数字字符或正/负号时,直接返回NaN:
      parseInt("a123"); // NaN
      parseInt("-123"); // -123

parseFloat()

parseFloat()相较于parseInt()扩展了浮点数的解析能力

  • 语法

    parseFloat(value)

    • value:唯一参数,即说明只可解析十进制参数,不可指定基数
  • 扩展规则
    • 区别于parseInt()解析到的第一个小数点有效

      parseFloat("0.123"); // 0.123
      parseFloat("0.1.23"); // 0.1
    • 能够识别适用于科学记数法的e/E操作符:
      parseFloat("3.14e-2"); // 0.0314
      parseFloat("0.314E+2"); // 3.14
    • 无法识别非十进制数字字符:
      parseFloat("FF"); // NaN
      parseFloat("0xFF"); // 0
    • 解析转换结果为整数时,将会直接返回整数:
      parseFloat("5.00"); // 5


JavaScript - 数值类型的判断与常用转换方式

原文地址:https://www.cnblogs.com/JustBeZero/p/9639664.html

时间: 2024-10-10 09:25:32

JavaScript - 数值类型的判断与常用转换方式的相关文章

JavaScript数值类型保留显示小数方法

1 <script type="text/javascript"> 2 //保留两位小数 3 //功能:将浮点数四舍五入,取小数点后2位 4 function toDecimal(x) { 5 var f = parseFloat(x); 6 if (isNaN(f)) { 7 return; 8 } 9 f = Math.round(x*100)/100; 10 return f; 11 } 12 13 14 //制保留2位小数,如:2,会在2后面补上00.即2.00 1

JavaScript 的类型判断(一)判断真假

摘要: 这篇文章的主要目的是帮助自己梳理 JavaScript 学习和使用中的脉络,大部分内容仅仅是学习内容的整理,而非原创,我会在文章最后贴出参考链接. JavaScript 中有6个值为假 false null undefined '' 0 NaN === 和 == 的区别 ===, 不做类型转换,类型不同的一定不等. 如果类型不同,就[不相等] 类型相同,再判断 ==, 两边值类型不同的时候, 要先进行类型转换, 再比较. 如果两个值类型相同, 进行 === 比较. 如果两个值类型不同,

转战JS(1) 初探与变量类型、运算符、常用函数与转换

转战JS(1)初探与变量类型.运算符.常用函数与转换 做为一名.NET后台开发人员,正考滤向Web前端开发转型,之前也写过一代前端代码,可是当再回头看JS,并有转向它的意愿的时候,突然发现:原来JS不是那么简单的.很多的细节部分以前都没有注意到,现在把学习的知识点记录下来,做为学习笔记,好时不时看看.如果有什么错误,还请各位看官多多包涵.多多指正. JavaScript是一门轻量型的面向Web编程的脚本言语言,常被简称为:JS.广泛应用于PC和各种移动设备中,常和HTML.CSS一起组成网页页面

JavaScript数值转换总结

在JavaScript中,数值转换一般有三种方式: 一.Number(param)函数:param可以用于任何数据类型 1.1  param是Boolean值,true和false分别转换为1和0: 1.2  param是数值,只是简单的传入和返回 1.3  param是null和undefined,分别返回0和NaN 1.4  param是字符串,遵循下列规则: 1.4.1  如果字符串中只包含数字,则转换为十进制,前导0被忽略: 1.4.2  如果字符串中包含有效的浮点数格式,则返回对应的浮

JavaScript的类型自动转换高级玩法JSFuck

0 前言 最开始是不小心在微信公众号(程序员大咖)看到一篇JS的高逼格代码,然后通过里面的链接跳转到了JSFuck的wiki,就像顺着迷宫找宝藏的感觉,感叹JS的自动类型转换的牛逼. 1 样例 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] //如何装逼用代码骂别人SB (([][[]]+[])[+!![]]+([]+{})[!+[]+!![]])//如何用代码优雅地证明自己NB 2 原理 1.对于非原

javascript 操作符类型隐性转换

(一).一元操作符只能操作一个值的操作符叫做一元操作符1.递增和递减操作符a. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作.字符串变量变成数值变量.eg: var a='1'; ++a;  //a 变成2b.在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN,字符串变量变成数值变量.eg:var a='1aa';++a  //a 变成NaNc:在应用于布尔值false时,先将其转换为0再执行加减1的操作.布尔值变量变成数值变量.eg:var a=

.Net判断一个对象是否为数值类型探讨总结(高营养含量,含最终代码及跑分)

前一篇发出来后引发了积极的探讨,起到了抛砖引玉效果,感谢大家参与. 吐槽一下:这个问题比其看起来要难得多得多啊. 大家的讨论最终还是没有一个完全正确的答案,不过我根据讨论结果总结了一个差不多算是最终版的代码,这里分享出来,毕竟这是大家共同的智慧结晶,没有交流和碰撞就没有这段代码. 探讨贡献提名典礼 首先感谢 花生!~~ 以及 NETRUBE 提出了使用 GetTypeCode() 获取类型代码的方式,这个比 typeof() 的性能要高,但是有一点局限性,后面代码中会指出. 由 JTANS 以及

.Net判断一个对象是否为数值类型

这乍一听是个很简单的事,但突然搞起来还真有点无从下手的感觉. 首先当然是通过GetType()方法反射获取其类型信息,然后对其进行分析,但是类型信息Type中并没有简单地给出这么一个属性进行判断. 老外给出的方法是: public static bool IsNumeric(this Type dataType) { if (dataType == null) throw new ArgumentNullException("dataType"); return (dataType =

oracle中的常用函数、字符串函数、数值类型函数、日期函数,聚合函数。

一.字符串的常用函数. --一.oracle 字符串常用函数 --1. concat 连接字符串的函数,只能连接[两个]字符串. 字符写在括号中,并用逗号隔开! --2.“||”符号可以连接多个字符串 直接用||将多个字符链接即可. --3. dual? dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录. select concat('lo','ve')from dual; select concat('o','k')from dual; sel