zoukankan      html  css  js  c++  java
  • JavaScript关于数字的那些事

    编程中无可避免地要和数字打交道,但在 JavaScript 中,对数字的操作往往在某些时候可能会让人感到一些迷惑,比如说 parseInt 方法就是一个典型的例子。

    1. parseInt 的进制问题

    parseInt 是 JavaScript 中非常常用的一个方法,它用来将数字型的字符串转换为数字类型的整数,一般使用这个函数不会出现什么问题,但有些情况例外,比如要转换的字符串为 "08","09"。下面的代码展示了 parseInt 处理字符串"08"时不同的返回结果。导致这种结果的原因在于,可能很少有人注意到 parseInt 方法实际上有两个参数,第一个是要转换为数字的字符串,第二个可选参数为转换的进制值,如果没有提供第二个参数,则前缀为 '0x' 的字符串被当作十六进制,前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制。这就造成了parseInt("08")的结果为0,而parseInt("8")结果为8的怪 异现象,解决的办法很简单:为该方法明确地指明参数。

    var t_1_a = "08";
    parseInt(t_1_a);   // 0
    parseInt(t_1_a,10);   // 8
    
    2. 0 除以 0 与 1 除以 0

    在进行除法运算的时候,如果事先不知道参与运算的两个数字,那么有可能遇到类似 0/0 和 1/0 的情况。感谢数学老师,他让我们知道了 n/0 (n!=0)是一个极限数,于是理所当然地,在 JavaScript 中,当 n大于0 时,这个表达式的运算结果是 Infinity,n小于0 时,结果为 -Infinity。不要以为我在这里随便写了一个单词,Infinity 是 Global 对象的成员,事实上它的数据类型依然为"number"。而当 n = 0 时,即 0/0 ,这个运算的结果是 NaN,它是个特殊的家伙。避免这种情况,一种办法是检查参与运算的数字,另一种办法是检测运算结果。

    1/0   // Infinity
    0/0   // NaN
    
    3. 数字的检测: isNaN 与 isFinite

    刚才我们认识到了一种可能产生 Infinity 和 NaN 的情况,但在实际中,可能导致这种结果的例子很多,比如一个用户表单,其中的一个域只能填写数字,如何检测到用户的不合法填写,并保障有效运算并返回给用 户。先说 NaN 的情况吧,它 比 Infinity 稍显复杂,NaN 用来表示非数字值的特殊值,同 Infinity 一样,它也是 Global 对象的成员。NaN 不与任何值相等,包括其本身,这已经否定了我们使用 "==" 来检测 NaN 的可能,而 typeof NaN 的结果也是 "number",这使我们无法将它与常规的数字区分开。

    typeof NaN;   // number
    "test" == NaN;   // false
    5 == NaN;    // false
    NaN == NaN;   // false
    

    幸运的是 JavaScript 提供了一个名为 isNaN 的方法,它接受一个唯一的参数,并返回该参数是否是保留值 NaN,下面的代码已经几乎成功地分辨了数字与非数字,唯一需要注意的是最后一行,空字符串也被返回 false,这表示 JavaScript 认为它是一个合法的数字,这是因为空字符串隐式转型为数字0,这告诉我们,禁止空字符提交或验证 length 属性是非常有必要的。

    isNaN(NaN);   // true
    isNaN("5");   // false
    isNaN("5a");   // true
    isNaN("");    // false
    

    而验证 Infinity 则简单多了,因为它既可以使用相等运算与全等运算,也可以使用 isFinite 检测。isFinite 方法同样只接受唯一的参数,用以检测提供的数字是否是有限的。

    1/0 == Infinity    // true
    isFinite(1/0);    // false
    
    4. 使用 "+" 运算符转换字符串为数字

    在需要转换为数字的变量前面添上一个加号,这是目前最从容淡定的数值类型转型方法。

    var a = "5";
    var b = 6;
    a + b;   // "56"
    +(a) + b;   // 11
    
    5. 数字 0 的故事

    JavaScript 太灵活了,以至于有的时候甚至分不清 0 到底还是不是0。事实上 0 既可以表示数字 0 ,也可以表示长度为0的字符串,还可以表示布尔值 false,因此在需要明确区分它们的时候使用"==="全等符是非常正确的选择。
    大多数有经验的前端程序员都提倡使用全等运算符,并尽可能地明确数据类型,这样既可以规避诸如上面的一些错误,同时还将避免 JavaScript 内部处理时不必要的数据类型转换过程,这样做的好处在于它可以让代码运行得更快一点。

    0 == false;  // true
    0 == ""  // true
    0 === false;  // false
    0 === ""  // false
    
  • 相关阅读:
    python的各版本的不同
    keras中的early stopping
    NER的数据处理
    ner处理数据的方式
    python的数据处理一
    linux下的终端利器----tmux
    BiseNet学习笔记
    《Harnessing Synthesized Abstraction Images to Improve Facial Attribute Recognition》论文阅读笔记
    转:玩玩三维重建
    《Cascaded Pyramid Network for Multi-Person Pose Estimation》论文阅读及复现笔记
  • 原文地址:https://www.cnblogs.com/myphoebe/p/2226323.html
Copyright © 2011-2022 走看看