草庐IT

3.2.2 ES6 数值

runoob 2023-03-28 原文

数值的表示

二进制表示法新写法: 前缀 0b 或 0B 。

console.log(0b11 === 3); // true
console.log(0B11 === 3); // true

八进制表示法新写法: 前缀 0o 或 0O 。

console.log(0o11 === 9); // true
console.log(0O11 === 9); // true

常量

Number.EPSILON

Number.EPSILON 属性表示 1 与大于 1 的最小浮点数之间的差。

它的值接近于 2.2204460492503130808472633361816E-16,或者 2-52。

测试数值是否在误差范围内:

0.1 + 0.2 === 0.3; // false
// 在误差范围内即视为相等
equal = (Math.abs(0.1 - 0.3 + 0.2) < Number.EPSILON); // true

属性特性

writable:false
enumerable:false
configurable:false

最大/最小安全整数

安全整数

安全整数表示在 JavaScript 中能够精确表示的整数,安全整数的范围在 2 的 -53 次方到 2 的 53 次方之间(不包括两个端点),超过这个范围的整数无法精确表示。

最大安全整数

安全整数范围的上限,即 2 的 53 次方减 1 。


Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true Number.MAX_SAFE_INTEGER === Number.MAX_SAFE_INTEGER + 1; // false Number.MAX_SAFE_INTEGER - 1 === Number.MAX_SAFE_INTEGER - 2; // false

最小安全整数

安全整数范围的下限,即 2 的 53 次方减 1 的负数。


Number.MIN_SAFE_INTEGER + 1 === Number.MIN_SAFE_INTEGER + 2; // false Number.MIN_SAFE_INTEGER === Number.MIN_SAFE_INTEGER - 1; // false Number.MIN_SAFE_INTEGER - 1 === Number.MIN_SAFE_INTEGER - 2; // true

属性特性

writable:false
enumerable:false
configurable:false

方法

Number 对象新方法

Number.isFinite()

用于检查一个数值是否为有限的( finite ),即不是 Infinity


console.log( Number.isFinite(1)); // true console.log( Number.isFinite(0.1)); // true // NaN 不是有限的 console.log( Number.isFinite(NaN)); // false console.log( Number.isFinite(Infinity)); // false console.log( Number.isFinite(-Infinity)); // false // Number.isFinate 没有隐式的 Number() 类型转换,所有非数值都返回 false console.log( Number.isFinite('foo')); // false console.log( Number.isFinite('15')); // false console.log( Number.isFinite(true)); // false Number.isNaN() 用于检查一个值是否为 NaNconsole.log(Number.isNaN(NaN)); // true console.log(Number.isNaN('true'/0)); // true // 在全局的 isNaN() 中,以下皆返回 true,因为在判断前会将非数值向数值转换 // 而 Number.isNaN() 不存在隐式的 Number() 类型转换,非 NaN 全部返回 false Number.isNaN("NaN"); // false Number.isNaN(undefined); // false Number.isNaN({}); // false Number.isNaN("true"); // false

从全局移植到 Number 对象的方法

逐步减少全局方法,用于全局变量的模块化。

方法的行为没有发生改变。

Number.parseInt()

用于将给定字符串转化为指定进制的整数。


// 不指定进制时默认为 10 进制 Number.parseInt('12.34'); // 12 Number.parseInt(12.34); // 12 // 指定进制 Number.parseInt('0011',2); // 3 // 与全局的 parseInt() 函数是同一个函数 Number.parseInt === parseInt; // true Number.parseFloat() 用于把一个字符串解析成浮点数。 Number.parseFloat('123.45') // 123.45 Number.parseFloat('123.45abc') // 123.45 // 无法被解析成浮点数,则返回 NaN Number.parseFloat('abc') // NaN // 与全局的 parseFloat() 方法是同一个方法 Number.parseFloat === parseFloat // true Number.isInteger() 用于判断给定的参数是否为整数。 Number.isInteger(value) Number.isInteger(0); // true // JavaScript 内部,整数和浮点数采用的是同样的储存方法,因此 1 与 1.0 被视为相同的值 Number.isInteger(1); // true Number.isInteger(1.0); // true Number.isInteger(1.1); // false Number.isInteger(Math.PI); // false // NaN 和正负 Infinity 不是整数 Number.isInteger(NaN); // false Number.isInteger(Infinity); // false Number.isInteger(-Infinity); // false Number.isInteger("10"); // false Number.isInteger(true); // false Number.isInteger(false); // false Number.isInteger([1]); // false // 数值的精度超过 53 个二进制位时,由于第 54 位及后面的位被丢弃,会产生误判 Number.isInteger(1.0000000000000001) // true // 一个数值的绝对值小于 Number.MIN_VALUE(5E-324),即小于 JavaScript 能够分辨 // 的最小值,会被自动转为 0,也会产生误判 Number.isInteger(5E-324); // false Number.isInteger(5E-325); // true Number.isSafeInteger() 用于判断数值是否在安全范围内。 Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1); // false Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1); // false

Math 对象的扩展

ES6 在 Math 对象上新增了 17 个数学相关的静态方法,这些方法只能在 Math 中调用。

普通计算

Math.cbrt

用于计算一个数的立方根。


Math.cbrt(1); // 1 Math.cbrt(0); // 0 Math.cbrt(-1); // -1 // 会对非数值进行转换 Math.cbrt('1'); // 1 // 非数值且无法转换为数值时返回 NaN Math.cbrt('hhh'); // NaN
Math.imul

两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。


// 大多数情况下,结果与 a * b 相同 Math.imul(1, 2); // 2 // 用于正确返回大数乘法结果中的低位数值 Math.imul(0x7fffffff, 0x7fffffff); // 1
Math.hypot

用于计算所有参数的平方和的平方根。


Math.hypot(3, 4); // 5 // 非数值会先被转换为数值后进行计算 Math.hypot(1, 2, '3'); // 3.741657386773941 Math.hypot(true); // 1 Math.hypot(false); // 0 // 空值会被转换为 0 Math.hypot(); // 0 Math.hypot([]); // 0 // 参数为 Infinity 或 -Infinity 返回 Infinity Math.hypot(Infinity); // Infinity Math.hypot(-Infinity); // Infinity // 参数中存在无法转换为数值的参数时返回 NaN Math.hypot(NaN); // NaN Math.hypot(3, 4, 'foo'); // NaN Math.hypot({}); // NaN
Math.clz32

用于返回数字的32 位无符号整数形式的前导0的个数。


Math.clz32(0); // 32 Math.clz32(1); // 31 Math.clz32(0b01000000000100000000000000000000); // 1 // 当参数为小数时,只考虑整数部分 Math.clz32(0.5); // 32 // 对于空值或非数值,会转化为数值再进行计算 Math.clz32('1'); // 31 Math.clz32(); // 32 Math.clz32([]); // 32 Math.clz32({}); // 32 Math.clz32(NaN); // 32 Math.clz32(Infinity); // 32 Math.clz32(-Infinity); // 32 Math.clz32(undefined); // 32 Math.clz32('hhh'); // 32

数字处理

Math.trunc

用于返回数字的整数部分。


Math.trunc(12.3); // 12 Math.trunc(12); // 12 // 整数部分为 0 时也会判断符号 Math.trunc(-0.5); // -0 Math.trunc(0.5); // 0 // Math.trunc 会将非数值转为数值再进行处理 Math.trunc("12.3"); // 12 // 空值或无法转化为数值时时返回 NaN Math.trunc(); // NaN Math.trunc(NaN); // NaN Math.trunc("hhh"); // NaN Math.trunc("123.2hhh"); // NaN
Math.fround

用于获取数字的32位单精度浮点数形式。


// 对于 2 的 24 次方取负至 2 的 24 次方之间的整数(不含两个端点),返回结果与参数本身一致 Math.fround(-(2**24)+1); // -16777215 Math.fround(2 ** 24 - 1); // 16777215 // 用于将 64 位双精度浮点数转为 32 位单精度浮点数 Math.fround(1.234) // 1.125 // 当小数的精度超过 24 个二进制位,会丢失精度 Math.fround(0.3); // 0.30000001192092896 // 参数为 NaN 或 Infinity 时返回本身 Math.fround(NaN) // NaN Math.fround(Infinity) // Infinity // 参数为其他非数值类型时会将参数进行转换 Math.fround('5'); // 5 Math.fround(true); // 1 Math.fround(null); // 0 Math.fround([]); // 0 Math.fround({}); // NaN

判断

Math.sign

判断数字的符号(正、负、0)。


Math.sign(1); // 1 Math.sign(-1); // -1 // 参数为 0 时,不同符号的返回不同 Math.sign(0); // 0 Math.sign(-0); // -0 // 判断前会对非数值进行转换 Math.sign('1'); // 1 Math.sign('-1'); // -1 // 参数为非数值(无法转换为数值)时返回 NaN Math.sign(NaN); // NaN Math.sign('hhh'); // NaN

对数方法

Math.expm1()

用于计算 e 的 x 次方减 1 的结果,即 Math.exp(x) - 1 。


Math.expm1(1); // 1.718281828459045 Math.expm1(0); // 0 Math.expm1(-1); // -0.6321205588285577 // 会对非数值进行转换 Math.expm1('0'); //0 // 参数不为数值且无法转换为数值时返回 NaN Math.expm1(NaN); // NaN
Math.log1p(x)

用于计算1 + x 的自然对数,即 Math.log(1 + x) 。


Math.log1p(1); // 0.6931471805599453 Math.log1p(0); // 0 Math.log1p(-1); // -Infinity // 参数小于 -1 时返回 NaN Math.log1p(-2); // NaN
Math.log10(x)

用于计算以 10 为底的 x 的对数。


Math.log10(1); // 0 // 计算前对非数值进行转换 Math.log10('1'); // 0 // 参数为0时返回 -Infinity Math.log10(0); // -Infinity // 参数小于0或参数不为数值(且无法转换为数值)时返回 NaN Math.log10(-1); // NaN
Math.log2()

用于计算 2 为底的 x 的对数。


Math.log2(1); // 0 // 计算前对非数值进行转换 Math.log2('1'); // 0 // 参数为0时返回 -Infinity Math.log2(0); // -Infinity // 参数小于0或参数不为数值(且无法转换为数值)时返回 NaN Math.log2(-1); // NaN

双曲函数方法

  • Math.sinh(x): 用于计算双曲正弦。
  • Math.cosh(x): 用于计算双曲余弦。
  • Math.tanh(x): 用于计算双曲正切。
  • Math.asinh(x): 用于计算反双曲正弦。
  • Math.acosh(x): 用于计算反双曲余弦。
  • Math.atanh(x): 用于计算反双曲正切。

指数运算符


1 ** 2; // 1 // 右结合,从右至左计算 2 ** 2 ** 3; // 256 // **= let exam = 2; exam ** = 2; // 4

有关3.2.2 ES6 数值的更多相关文章

  1. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  2. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  3. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  4. 关于ES集群信息的一些查看 - 2

    文章目录查看ES信息查看节点信息查看分片信息实际场景下ES分片及副本数量应该怎么分关于ES的灵活使用查看ES信息查看版本kibana:GET/查看节点信息GET/_cat/nodes?v解释:ip:集群中节点的ip地址;heap.percent:堆内存的占用百分比;ram.percent:总内存的占用百分比,其实这个不是很准确,因为buff/cache和available也被当作使用内存;cpu:cpu占用百分比;load_1m:1分钟内cpu负载;load_5m:5分钟内cpu负载;load_15m:15分钟内cpu负载;node.role:上图的dilmrt代表全部权限master:*代表

  5. linux查看es节点使用情况,elasticsearch(es) 如何查看当前集群中哪个节点是主节点(master) - 2

    elasticsearch查看当前集群中的master节点是哪个需要使用_cat监控命令,具体如下。查看方法es主节点确定命令,以kibana上查看示例如下:GET_cat/nodesv返回结果示例如下:ipheap.percentram.percentcpuload_1mload_5mload_15mnode.rolemastername172.16.16.188529952.591.701.45mdi-elastic3172.16.16.187329950.990.991.19mdi-elastic2172.16.16.231699940.871.001.03mdi-elastic4172

  6. 五-1、elasticsearch集群搭建(ES集群搭建) - 2

    目录一、下载Elasticsearch1.选择你要下载的Elasticsearch版本二、采用通用搭建集群的方法三、配置三台es1.上传压缩包到任意一台虚拟机中2.解压并修改配置文件(配置单台es)3.配置三台es集群4.设置后台启动和开机自启(可选)一、下载Elasticsearch1.选择你要下载的Elasticsearch版本es下载地址这里我下载的是二、采用通用搭建集群的方法集群搭建方法三、配置三台es1.上传压缩包到任意一台虚拟机中上传方式有两种第一种:使用xftp上传直接拖动过去就可以了。第二种:使用lrzsz先安装yum-yinstalllrzsz切换到要上传的位置cd/opt/

  7. windows安装es、kibana教程 - 2

    目录前言第一个部分:安装ES的包1.安装成功的截图2.下载es的安装包3.检查本地的jdk的安装是否存在问题4.修改config文件夹下面的配置第二部分:windows安装Kibana可视化工具1.下载安装包2.安装过程中遇到的问题3.安装6.0.0的版本是可以的4.安装后的效果第三部分:安装Elasticsearch-Head进行搜索本地es环境内的所有数据1.下载git项目文件:GitHub-mobz/elasticsearch-head:Awebfrontendforanelasticsearchcluster2.关于kibana不能监控es环境内数据的问题3.重启es的bat文件,使用

  8. 优化大数据量查询方案——SpringBoot(Cloud)整合ES - 2

    一、Elasticsearch简介实际业务场景中,多端的查询功能都有很大的优化空间。常见的处理方式有:建索引、建物化视图简化查询逻辑、DB层之上建立缓存、分页…然而随着业务数据量的不断增多,总有那么一张表或一个业务,是无法通过常规的处理方式来缩短查询时间的。在查询功能优化上,作为开发人员应该站在公司的角度,本着优化客户体验的目的去寻找解决方案。本人有幸做过Tomcat整合solr,今天一起研究一下当前比较火热的Elasticsearch搜索引擎。Elasticsearch是一个非常强大的搜索引擎。它目前被广泛地使用于各个IT公司。Elasticsearch是由Elastic公司创建。它的代码位

  9. ES条件查询 - 2

    matchAll分页查询@TestpublicvoidtestMatchAll()throwsIOException{//创建查询请求对象SearchRequestsearchRequest=newSearchRequest("goods");//构建查询条件(分页,查询所有)SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchAllQuery());//searchSourceBuilder.from(0);searchSour

  10. es-3-创建索引&新建mapping - 2

    通过elasticsearch-head新建索引新建完的索引,重点要设置setting和mapping两个参数,后面详细展开介绍。索引命名要求索引命名只能使用小写字母不能包含除-_以外的特殊字符不能用-_开头长度必须小于255B索引别名给一个索引起多个别名给多个索引起一个别名(更有意义,为了不让一个索引的容量过于大,可以每隔一段时间把新增数据新建一个索引,然后命名同一个别名)。_mappingmapping相当于数据库中的schema的定义,作用如下:定义索引中的字段名称定义字段的数据类型,如字符串,数字,布尔…字段、倒排索引的相关配置(分不分词,分词器的选择等)mapping会把JSON文档

随机推荐