1、数值

1.1 、JavaScript数值的特点

  • 不区分整数值和浮点数值。
  • 所有数值均用浮点数值表示。
  • 采用IEEE-754标准定义的64位浮点数格式表示。
  • 整数在实际操作时(如数组索引),则是基于32为整数。

1.2、 整数直接量

  • 除十进制外,JavaScript能识别十六进制(以0x或0X为前缀)、二进制(以0b或0B为前缀)和八进制(以0o或0O为前缀)
    如:
    0xff -----> 255,
    0b1001 ----> 9,
    0o12 -----> 10
    在ES6的严格模式下,禁止使用八进制

1.3、 浮点数直接量

  • 实数写法:由整数部分、小数点和小数部分组成,如:3.1415926535
  • 指数写法:在实数部分后跟字母e或E,再跟正负号,再跟一个整型的指 数。如:5.12e12 --->5.12×1012,1.44E-8 ---> 1.44×10-8

1.4、算术运算

  • 运算符:包括:+、-、*、/、%、**(指数操作符,ES6新增)
  • 溢出(overflow)
    • 当数值运算结果超过了JavaScript能表示的数值上限时发生。
    • 结果为Infinity,若超过了负数范围,则为-Infinity。
    • 基于±Infinity的加、减、乘、除等算术运算结果依然是±Infinity。
      console.log(Infinity / Infinity) // NaN
  • 下溢(underflow)

    • 当运算结果无限接近于0,并比JavaScript能表示的最小值还小时发生。
    • JavaScript会返回0,若当一个负数发生下溢时,则返回-0。
  • 被零整除

    • 简单的返回±Infinity
      console.log(0 / 0) // NaN
  • 二进制浮点数与四舍五入错误

    • 实数有无数个,但JavaScript通过浮点数的形式只能表示有限个数。

      • 当JavaScript使用实数时,常常只是真实值的一个近似表示。

      • IEEE-754浮点数表示法是一种二进制表示法,可以精确地表示分数。如:1/2、1/8和1/1024等。

      • 但常用的分数都是十进制分数,二进制浮点数并不能精确表示类似0.1这样的简单数值。
        console.log(0.3 - 0.2) // 0.09999999999999998
        注:在任何的浮点数编程语言中都会遇到这样的问题,无限接近但不等于。 所以尽可能使用大整数进行等比修正以避免该类错误。如2 - 1

      • 数值转换

        • JavaScript提供了3个函数可将非数值转换为数值,分别为:Number( )、parseInt( )和parseFloat( )
          举个例子:

          console.log(Number(false)) // 0
          console.log(Number(null)) // 0
          console.log(Number(undefined)) // NaN
          console.log(Number("110")) // 110
          console.log(Number("1.12")) // 1.12
          console.log(Number("0xf")) // 15
          console.log(Number("")) // 0
          console.log(parseInt(1.2)); // 1
          console.log(parseInt(0xf)); // 15
          console.log(parseInt("0xA")); // 10
          console.log(parseInt("A", 16)); // 10
          console.log(parseFloat("3.14159e3")); // 3141.59
      • 对应与数值的应用类型
        创建一个Number对象的构造函数

        let num=new Number(10);
        console.log(num) // [Number: 10]
      • Number的常用方法

        方法 描述
        toString( ) 返回数值对象的字符串表示
        toLocaleString( ) 返回数值对象的字符串本地表示
        valueOf( ) 返回数值对象的原始数值
        toFixed(n) 返回包含指定小数位数的数值字符串
        toExponential(n) 返回科学记数法表示的数值字符串
        toPrecision(n) 返回数值最恰当的形式
        Number.isFinite( ) 用于检查一个数值是否有限的(finite),如果参数类型不是数值,一律返回false
        Number.isNaN( ) 用于检查一个是否为NaN,如果参数类型不是NaN,一律返回false
        Number.parseInt( ) ES6将全局方法parseInt( )和parseFloat( )移植到Number对象中,行为完全保持不变
        Number.parseFloat( ) ES6将全局方法parseInt( )和parseFloat( )移植到Number对象中,行为完全保持不变
        Number.isInteger( ) 用于判断一个数值是否为整数。如果参数不是数值,返回false
        Number.EPSILON 常量,表示1与大于1的最小浮点数之间的差;用该值来表示JavaScript的最小精度,从而在浮点数运算时用于确定误差范围;这个值减去 1 之后,就等于 2 的 -52 次方

        运行结果:

        console.log(Number.isFinite(12)) // true
        console.log(Number.isFinite("12")) // false
        console.log(Number.isNaN("12"))
        console.log(Number.isNaN(true))
        console.log(Number.parseFloat === parseFloat) //true
        console.log(Number.parseInt === parseInt) //true
        console.log(Number.isInteger(12)) //true
        console.log(Number.isInteger("12")) //false
        console.log(Number.EPSILON -1) //-0.9999999999999998

2、Math对象

2.1、说明:

  • Math 对象用于执行数学任务。Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math()。

2.2、常见属性

常见属性 描述
E 返回算术常量e,表示自然对数的底数
LN2 返回 2 的自然对数
LN10 返回 10 的自然对数
LOG2E 返回以 2 为底的 e 的对数
PI 表示圆周率,约等于3.14159265
SQRT1_2 返回 2 的平方根的倒数
SQRT2 返回 2 的平方根

2.3、常见方法

常用方法 描述
Math.ceil( ) 始终向上舍入为最接近的整数
Math.floor( ) 始终向下舍入最接近的整数
Math.round( ) 执行四舍五入
Math.fround( ) 放回数值最接近的单精度(32位)浮点数表示
Math.trunc( ) 返回给定数字的整数部分
Math.random( ) 返回一个0~1之间的随机数(包含0但不包含1)
console.log(Math.ceil(3.6)) //4 向上取整
console.log(Math.floor(3.6)) //3 向下取整
console.log(Math.round(3.6)) //4 四舍五入
console.log(Math.fround(3.6)) //3.5999999046325684
console.log(Math.trunc(1.656565111)) // 1
console.log(Math.random()); // 0.32846714436449087
  • 例子:编写一个函数randomFrom(lower, upper)返回一个大于或等于lower且小于或等于upper的随机整数

    function randomFrom(lower,upper){
    var n = Math.floor(Math.abs(upper-lower)+1)
    var num = Math.floor(Math.random()*n+lower)
    console.log(num)
    }
    randomFrom(1,5)

2.4、其它方法

其它方法 描述
abs(x) 返回 x 的绝对值
acos(x) 返回 x 的反余弦值
asin(x) 返回 x 的反正弦值
atan(x) 以范围是-PI/2 到 PI/2 弧度的数来返回 x 的反正切值
atan2(y,x) 返回从 x 轴到点 (x,y) 的角度 ,范围是 -PI/2 到 PI/2弧度
sin(x) 返回 x 的正弦值
cos(x) 返回 x 的余弦值
tan(x) 返回 x 的正切值
exp(x) 返回 Ex 的指数
log(x) 返回以e为底数的自然对数
max(x,y,z) 返回x,y,z中的最大值
min(x,y,z) 返回x,y,z中的最小值
pow(x,y) 返回x的y次幂
sqrt(x) 返回x的平方根

2.5、Math对象扩展

  • Math.cbrt( ) 用于计算一个数的立方根,对于非数值,其内部会先使用,Number( )转换为数值再操作,对于空值和无法截取整数的值,返回NaN

    // Math.cbrt
    console.log(Math.cbrt(8)); // 2
  • Math.hypot( ) 用于计算所有参数的平方和的平方根
    // Math.hypot
    console.log(Math.hypot(3,4)); // 5

3、BigInt 简单使用

3.1、BigInt 简介

  • 在ES6之后,基本类型增加到了6种:String、Number、Boolean、Null、Undefined、Symbol。如今,BigInt是第七种基本类型。
  • 在JavaScript中,Number可以安全的表示的最小和最大整数如下:

    一旦超过 53 个二进制位的数值,精度就无法保持,超过 1024 个次方的数值,数值就无法表示。如:

    console.log(Math.pow(2, 53) == Math.pow(2, 53) + 0.6) // true
    console.log(Math.pow(2, 1024)) // Infinity

    新的数据类型Bigint就解决了这个问题。

3.2、BigInt 基本方法

  • 在普通的数字后面加上 n 表示Bigint数据类型,BigInt是另一种类型,它与普通数字并不相等,它也支持其它进制的数值。如:

    console.log(typeof (123n)); // bigint
    console.log(123n == 123) // true
    console.log(123n === 123) // false
    console.log(0b1101n) // 13n 二进制
    console.log(0o777n) // 511n 八进制
    console.log(0xFFn) // 255n 十六进制
  • 可以使用Boolean()、Number()和String()这三个方法,将 BigInt 可以转为布尔值、数值和字符串类型。

    console.log(Boolean(0n))  // false
    console.log(Boolean(1n)) // true
    console.log(Number(1n)) // 1
    console.log(String(1n)) // "1"(转换成字符串后面的n会消失)
    console.log(!0n); // true(也可通过!转换为布尔值)
  • BigInt 类型的加(+),减(-),乘(*),乘方(**)与 Number 类型运算一致。除法运算(/)会舍去小数部分,返回一个整数,如:

    console.log(2n+3n)   // 5n
    console.log(2n-3n) // -1n
    console.log(2n*3n) // 6n
    console.log(2n**3n) // 8n
    console.log(2n/3n); // 0n

3.3、BigInt 类型与其它类型的运算规则

  • BigInt类型不能和Number,Boolean,undefined,null等基本类型进行运算
  • BigInt类型与字符串运算时,会先转成字符串,再进行运算
    console.log(2n+3);  // TypeError
    console.log(2n+false); // TypeError
    console.log(2n+undefined); // TypeError
    console.log(2n+null);// TypeError
    console.log(2n+'abc'); // 2abc

3.4、BigInt 对象

console.log(BigInt(123)); // 123n
console.log(BigInt('123')); // 123n
console.log(BigInt(false)); // 0n
console.log(BigInt(true)); // 1n

ES6 学习笔记(四)基本类型Number的更多相关文章

  1. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  2. PHP学习笔记四【类型运算】

    <?php //类型运算符 class Dog { } class Cat { } $a=new Cat; var_dump($a instanceof Cat); //在实际开发中,判断某一个 ...

  3. ES6学习笔记四:Proxy与Reflect

    一:Proxy 代理. ES6把代理模式做成了一个类,直接传入被代理对象.代理函数,即可创建一个代理对象,然后我们使用代理对象进行方法调用,即可调用被包装过的方法: 1)创建 var proxy = ...

  4. ES6学习笔记四(类和对象)

    { // 构造函数和实例 class Parent{ constructor(name='mukewan'){ this.name=name; } } let v_parent=new Parent( ...

  5. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  6. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  7. ES6学习笔记<三> 生成器函数与yield

    为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...

  8. ES6学习笔记<一> let const class extends super

    学习参考地址1  学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...

  9. JS&ES6学习笔记(持续更新)

    ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...

  10. WebGL three.js学习笔记 6种类型的纹理介绍及应用

    WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...

随机推荐

  1. STC8H开发(十六): GPIO驱动XL2400无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  2. 【NOI P模拟赛】大阶乘(斯特林数)

    题意 求 16 16 16 进制下, n ! n! n! 去掉尾部 0 0 0 后取模 2 64 2^{64} 264 的结果. n < 2 64 n<2^{64} n<264 一共 ...

  3. 3-12 Python函数定义与调用

    Python 函数 函数概念 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.如print() range()函数,但你也可以自己创建函 ...

  4. python 中matplotlib 绘图

    python 中matplotlib 绘图 数学建模需要,对于绘图进行简单学习 matpoltlib之类的包安装建议之间用anaconda 绘制一条y=x^2的曲线 #比如我们要绘制一条y=x^2的曲 ...

  5. KingbaseES 的闪回查询

    KingbaseES V008R006C006B0013版本新增支持闪回查询,闪回版本查询.闪回表到指定时间点.旧版本已支持闪回回收站技术. 闪回技术(闪回查询和闪回表到指定时间点)可以通过时间戳和C ...

  6. token总结

    token 总结 1. token 和SessionID 的区别 Token机制相对于Cookie机制又有什么好处呢? 支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的 ...

  7. salesforce零基础学习(一百一十七)salesforce部署方式及适用场景

    本篇参考:https://architect.salesforce.com/decision-guides/migrate-change https://developer.salesforce.co ...

  8. TortoiseSVN 执行清理( cleanUp )失败的解决方案

    TortoiseSVN 执行清理( cleanUp )失败的解决方案 今天碰到了一个比较棘手的问题,在这里做一下记录,以方便自己和有需要的朋友在之后碰到该类问题时有个参考. 现象 更新SVN时弹出清理 ...

  9. C++ 左值引用与 const 关键字

    左值引用是已定义的变量的别名,其主要用途是用作函数的形参,通过将左值引用变量用作参数,函数将使用原始数据,而不是副本.引用变量必须在声明时同时初始化,可将 const 关键字用于左值引用,如下所示: ...

  10. HCIA-STP原理与配置

    STP协议生成树协议: 为了保证网络可靠,所以在组网时需要设置冗余链路和设备,从而在物理结构上形成结构,又因为交换机的工作特点导致二层网络中产生广播风暴和MAC地址表震荡现象,影响用户体验. 广播风暴 ...