JavaScript 基本类型值-Number类型

时间:2022-09-02 14:28:52

▓▓▓▓▓▓ 大致介绍

  在JavaScript的内部采用IEEE754格式来表示数字,所以不区分整数和浮点数,都是用64位浮点数的形式储存。就是说,在JavaScript内部,就根本没有小数。但是有些运算必须得需要整数完成,所以JavaScript有时会把64位的浮点数转换成32位的整数,再进行运算。

▓▓▓▓▓▓ 整数

  JavaScript对整数提供四种表示方法:

    1、二进制:有前缀0b的数值,出现0,1以外的数字会报错

    2、八进制:有前缀0o的数值,或者是以0后面再跟一个数字(0-7)。如果超出了前面所述的数值范围,则会忽略第一个数字0,视为十进制数

      注意:八进制字面量在严格模式下是无效的,会导致支持该模式的JavaScript引擎抛出错误

    3、十六进制:有前缀0x,后跟任何十六进制数字(0~9及A~F),字母大小写都可以,超出范围会报错

    4、十进制

        var num2 = 0b11;
console.log(num2); //
var num2 = 0b12;
console.log(num2); //报错 var num8 = 0o76;
console.log(num8); //
var num8 = 0o78;
console.log(num8); //报错 var num16 = 0x2a;
console.log(num16); //
var num16 = 0x2h;
console.log(num16) //报错

▓▓▓▓▓▓ 浮点数

  所谓浮点数,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。与整数不同,浮点数只能用十进制来表示

  浮点数的精度远远不如整数,所以设计浮点数的运算好比较要小心

  例如:

        console.log(0.1 + 0.2 == 0.3); //false 0.30000000000000004
console.log(0.6/0.2); //2.9999999999999996

▓▓▓▓▓▓ 科学计数法

  对于那些极大极小的数值,可以用e表示法(即科学计数法)表示的浮点数值表示。用e表示法表示的数值等于e前面的数值乘以10的指数次幂

  以下两种情况,JavaScript会自动将数值转为科学计数法表示,其他情况都采用字面形式直接表示。

    1、小数点前的数字多余21位

        console.log(1234567890123456789012);// 1.2345678901234568e+21

        console.log(123456789012365648787); //

  

    2、小数点后面的0多余5位

        console.log(0.0000006);//6e-7

        console.log(0.000006); //0.000006

▓▓▓▓▓▓ 数值范围

  由于内存的限制,ECMAScript并不能保存世界上所有的数值,所以就有了最大值和最小值

  最小值保存在Number.MIN_VALUE中,这个值是5e-324

  最大值保存在Number.MAX_VALUE,这个值是1.7976931348623157e+308

        console.log(Number.MIN_VALUE) //5e-324
console.log(Number.MAX_VALUE); //1.7976931348623157e+308

  如果数字超过最大值,javascript会返回Infinity,这称为正向溢出(overflow);如果等于或超过最小负值-1023(即非常接近0),javascript会直接把这个数转为0,这称为负向溢出(underflow)

  如果要想确定一个数值是不是有穷的,可以使用isFinite()函数。这个函数在参数位于最小与最大数值之间时会返回true

        var result = Number.MAX_VALUE + Number.MAX_VALUE;
console.log(isFinite(result)); //false

▓▓▓▓▓▓ 特殊数值

  1、+0和-0

    这两个0在大对数的情况下都是等价的

        -0 === +0; //true
0 === -0; //true
0 === +0; //true

  

  但是在作为分母的时候是不一样的

        1/-0 == 1/+0; //false

  2、infinity

    Infinity表示“无穷”,用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到Infinity。

        Math.pow(2,Math.pow(2,100));//Infinity
1/0;//Infinity

  Infinity参与的运算结果只能是其本身、0或NaN

    2 * Infinity;//Infinity
2 - Infinity;//-Infinity
2 + Infinity;//Infinity
2 / Infinity;//
Infinity / 2;//Infinity
Infinity * Infinity;//Infinity
Infinity - Infinity;//NaN
Infinity + Infinity;//Infinity
Infinity / Infinity;//NaN

  3、NaN

  这个数值表示一个本来要返回数值的操作数未返回数值的情况

  NaN与任何值不相等,包括它本身,并且涉及NaN的任何操作都会返回NaN

        5 - 'x'; //NaN
Math.acos(2); //NaN
0 / 0; //NaN
NaN == NaN;//false
NaN == Infinity;//false

  

  NaN不是一种独立的数据类型,而是一种特殊数值,它的数据类型依然属于Number

        typeof NaN; //number

  isNaN方法可以用来判断一个值是否为NaN,但是,isNaN只对数值有效,如果传入其他值,会被先转成数值。比如,传入字符串的时候,字符串会被先转成NaN,所以最后返回true,这一点要特别引起注意。也就是说,isNaNtrue的值,有可能不是NaN,而是一个字符串。

        isNaN('Hello') // true
// 相当于
isNaN(Number('Hello')) // true

  判断NaN更可靠的方法是,利用NaN是javascript之中唯一不等于自身的值这个特点,进行判断

        function isNaN(value){
return value != value;
}

▓▓▓▓▓▓ 数制转换

  有3个函数可以把非数值转换成数值:Number()、parseInt()和parseFloat()。其中Number()可以将任意类型的值转化成数值,而parseInt()和parseFloat()只应用于字符串向数字的转换

  Number()

  转换规则:

    1、如果是Boolean值,true和false将分别转换为1和0

    2、如果是null值,返回0

    3、如果是undefined,返回NaN

    4、如果是字符串,遵循以下规则:

      (1)若字符串只包含十进制或十六进制数字,则转成十进制的数字

        注意:Number()不识别八进制数字的字符串,会按照十进制数字处理

           字符串'1.2.'不会报错,但数字1.2.会报错

      (2)若字符串为空字符串或空格字符串,则转成0

      (3)其他情况的字符串,则转成NaN

        Number(true) //
Number(null) //
Number(undefined) //NaN
Number("0123") //
Number("0x123") //
Number("0.2") //0.2
Number("") //
Number("asd") //NaN

  parseInt()

  parseInt()专门用于把字符串转换成整数。在转换字符串时,会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。如果是,则继续解析,直到解析完成或者遇到非数字字符

        console.log(parseInt('    123.8px'));//
console.log(parseInt(' 123.8 '));//
console.log(parseInt(' -123.8px'));//-123
console.log(parseInt('a123.8px'));//NaN
console.log(parseInt('0 123.8px'));//

  注意:在ECMAScript5中,parseInt()已经不具备解析八进制的能力。例如八进制“070”,会忽略前面的“0”,得到十进制的70

  为了消除在使用parseInt()函数时可能导致的上述困惑,可以为这个函数提供第二个参数:转换时使用的基数(多少进制)

        parseInt("070") //
parseInt("070",8) //

  parseFloat()

  parseFloat()专门用于字符串转换浮点数。同样地,解析时会忽略字符串前面的空格,直到找到第一个非空格字符,然后一直解析到字符串末尾或一个无效的浮点数字字符为止

        console.log(parseFloat('    0123.px'));//
console.log(parseFloat(' 123.px'));//
console.log(parseFloat(' 123.1px'));//123.1
console.log(parseFloat(' 123.1.2px '));//123.1
console.log(parseFloat(' -123.0px'));//-123
console.log(parseFloat('.123.1px'));//0.123
console.log(parseFloat('0 123px'));//

  注意:parseFloat()只解析十进制,所以十六进制的字符串始终会被转换成0。因此也没有第二个参数用来指定基数

        parseFloat("0xA") //

  注意:Number('')的结果是0,parseInt('')和parseFloat('')的结果是NaN

参考资料:

   阮一峰Javascript标准参考教程——基本语法之数值

   小火柴javascript类型系统——Number数字类型

  《javascript高级程序设计(第3版)》第3章

JavaScript 基本类型值-Number类型的更多相关文章

  1. JavaScript 基本类型值-String类型

    ▓▓▓▓▓▓ 大致介绍 String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串.在JavaScript中没有单个的字符型,都是字符串.字符型就相当于只包含一个字符的字符串. ...

  2. JavaScript基本类型值与引用类型值

    前言 JS变量可以用来保存两种类型的值:基本类型值和引用类型值.基本类型的值源自一下5种基本数据类型:Underfined.Null.Boolean.Number和String. 基本类型值和引用类型 ...

  3. JavaScript 基本类型值-Undefined、Null、Boolean

    ▓▓▓▓▓▓ 大致介绍 ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String. ▓▓▓▓▓▓ Undefined ...

  4. javascript检测基本类型值或引用类型值的类型方法

    首先javascript的数据类型分为两种数据类型:基本数据数据类型和引用数据类型 基本数据类型:Number,String,Boolean,Undefined,Null.原始值,是简单的数据段,可按 ...

  5. javascript之基本包装类型(Boolean,Number,String)基础篇

    前几天整理了javascript中Array方面的知识,但是String中的一些方法多多少少和Array里的方法有些类似容易混淆,就顺便连同String所在的包装类一起整理一下,希望可以帮助到初学者, ...

  6. javascript学习笔记2-typeof、Number类型、Boolean()

    1.typeof操作符 对一个值使用typeof操作符可能返回下列某个字符串 "undefined"——这个值未定义 "boolean"——这个值是布尔值 &q ...

  7. Javascript数据类型——number类型

            ECMAScript规范中使用IEEE754格式来表示整数和浮点数.支持十进制.八进制以及十六进制.有一点注意的是八进制数字在严格模式下是无效的,这可能会影响到程序的正常运行. 避免浮 ...

  8. JavaScript 数值Number类型详解

    Number 问题 如果下面的问题你都能回答对了吗? 0.1 + 0.2 == 0.3 成立吗? .e-5 表示多少? 怎么表示8进制? 怎么转换进制? 如何将字符串转换成数值或整数?反过来呢?十六进 ...

  9. 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...

随机推荐

  1. FineReport实现根据点击次数奇偶性排序的方法

    使用FineReport报表软在进行排序的时,很多时候您可能想实现根据点击的次数进行升降序排序,也就是说点击第一次点击标题升序排序,再次点击就降序,以此类推,而不是通过选择升序进行升序排列,选择降序进 ...

  2. Servlet深层知识

    一.ServletContext实现请求转发1.得到请求分发器:RequestDispatcherServletContext.getRequestDispatcher(String path):pa ...

  3. Compare_Connect_Letter

    题目描述: 比较两个数字mn和nm(如果mn<nm则m<n, 如果nm<mn则n<m,否则n=m) 连接这两个数字 如(mnnm) //比较两个数字mn和nm(如果mn< ...

  4. poj3122

    题目大意:馅饼(看起来像是一个简单点的题目啊,嘎嘎,希望是的吧) 我的生日即将来临按照习惯我将准备馅饼,不是一个馅饼,我有N块馅饼,有各种各样的味道和尺寸,当我的朋友来参加我的聚会平且他们都能得到一块 ...

  5. effective&lowbar;c&plus;&plus;条款20,用pass-by-reference-to-const替换pass-by-value

    pass-by-value void f(A a); 1)导致复制是浪费资源 2)多态是导致对象切割 所以我们使用 void f(const A& a) 上面的话针对class,不针对基本类型 ...

  6. 【转】LINUX下一款不错的网站压力测试工具webbench

    原文链接:http://blog.csdn.net/xinqingch/article/details/8618704 安装: wget http://blog.s135.com/soft/linux ...

  7. 优化python程序的几点建议

    1.在需要只读序列时,最好使用元组而非列表: 2.使用生成器yield,而不是创建大的元组和列表并在其上进行迭代处理: 3.尽量使用python内置的数据结构,而不实现自己的自定义结构: 4.从小字符 ...

  8. Xcode7&period;3&period;1中SKAudioNode在Scene转换后无声的问题

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在新的Xcode中之前可以正常运行的SKAudioNode代码 ...

  9. Yum软件包管理详解

    目录 1. Yum 1.1 检查和更新包 1.1.1 查询更新 1.1.2 更新包 1.1.3 使用 ISO 和 Yum 离线升级系统 1.2 使用包 1.2.1 搜索包 1.2.2 列出包 1.2. ...

  10. collectionFramwork-1

    1. Set.List和Map可以看做集合的三大类. List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问. Set集合是无序集合,集合中的元素不可以重复,访问集合中 ...