JS Math与一些原始类型
镇楼图
Pixiv:DSマイル
一、值属性、函数
globalThis
JS有全局对象,但是在不同环境中全局对象均不同。在Web环境中,window、self、frames取得全局对象,在Web Workers环境中self为全局对象,在Node环境中global为全局对象。这样子并不统一,于是globalThis成了任意环境下统一的一个全局对象
console.log(globalThis);
//在浏览器环境中会显示Window
NaN
NaN表示非数字,在Number中也有,它代表了不可运算,任何与NaN的运算都会返回NaN
但是如果要判断值是否为NaN,则需要使用isNaN方法来判断,NaN与任何值包括自身逻辑运算都是false
isNaN和Number.isNaN的区别是isNaN会先尝试将类型转换成NaN才判断值是否为NaN,而Number.isNaN不会进行类型转换
console.log(NaN === NaN);//false
console.log(isNaN("hello"));//true
console.log(Number.isNaN("hello"));//false
isFinite()
Number类型大致分为有限值、NaN、正无穷、负无穷。isFinite用来判断值是否为有限值
console.log(isFinite(0/0));//false
console.log(isFinite(3.1415926));//true
parseFloat(str)
console.log(parseFloat("3.1415926"));
//将输入转换为浮点数
//若转换失败则返回NaN
parseInt(str, radix)
console.log(parseInt("3.14"));//3
console.log(parseInt("15", 8));//13
//将输入根据radix进制转换为十进制整数
//radix最多36,默认为10
//若转换失败则返回NaN
二、Boolean
Boolean是boolean原始类型的包装类,除了转换原始值的方法外没有任何属性、方法
转换原始值 | 返回 |
---|---|
Boolean.prototype.toString() | "true"或"false" |
Boolean.prototype.valueOf() | Boolean类型原始值 |
三、Math
Math可提供常用的数学方法,但仅用于Number类型,不支持BigInt类型
常用属性
常用属性 | 说明 |
---|---|
Math.E | \(e\) |
Math.LN2 | \(ln~2\) |
Math.LN10 | \(ln~10\) |
Math.LOG2E | \(log_2e\) |
Math.LOG10E | \(lg~e\) |
Math.PI | \(π\) |
Math.SQRT1_2 | \(\frac{1}{\sqrt{2}}\) |
Math.SQRT2 | \(\sqrt{2}\) |
三角函数
对于三角函数而言,返回的是弧度制而非角度制
三角函数 | 说明 |
---|---|
Math.sin(x) | \(sin(x)\) |
Math.sinh(x) | \(sinh(x)\) |
Math.asin(x) | \(arcsin(x)\) |
Math.asinh(x) | \(arcsinh(x)\) |
Math.cos(x) | \(cos(x)\) |
Math.cosh(x) | \(cosh(x)\) |
Math.acos(x) | \(arccos(x)\) |
Math.acosh(x) | \(arccosh(x)\) |
Math.tan(x) | \(tan(x)\) |
Math.tanh(x) | \(tanh(x)\) |
Math.atan(x) | \(arctan(x)\) |
Math.atanh(x) | \(arctanh(x)\) |
Math.atan2(y,x) | \((x,y)\)与\((0,0)\)构成的直线与x轴正方向间的弧度 |
指数、对数方法
指数、对数方法 | 说明 |
---|---|
Math.sqrt(x) | \(\sqrt{x}\) |
Math.cbrt(x) | \(x^3\) |
Math.exp(x) | \(e^x\) |
Math.expm1(x) | \(e^x-1\) |
Math.log2(x) | \(log_2(x)\) |
Math.log10(x) | \(lg(x)\) |
Math.log(x) | \(ln(x)\) |
Math.log1p(x) | \(ln(x+1)\) |
数论方法
数论方法 | 说明 |
---|---|
Math.sign(x) | 根据正负性、0以及特殊情况返回1,-1,0,-0,NaN 1代表正数,-1代表负数 |
Math.abs(x) | \(|x|\) |
Math.ceil(x) | \(⌈x⌉\) |
Math.floor(x) | \(⌊x⌋\) |
Math.round(x) | 返回四舍五入后的整数 |
Math.trunc(x) | 返回数的整数部分 |
Math.hypot(x,[y,...]) | \(\sqrt{∑i^2}\) 返回所有参数平方和之和的平方根 |
Math.max([x,y,...]) | 返回所有参数中的最大值 若没有参数返回Infinity |
Math.min([x,y,...]) | 返回所有参数中的最小值 若没有参数返回Infinity |
Math.random()可以返回0~1均匀分布的随机数,这个函数虽然非常简单,但若读者有概率统计的基础,这个方法将会变得非常复杂且有用。
二进制相关方法
二进制相关方法 | 说明 |
---|---|
Math.clz32(x) | 将数转成32位无符号二进制数后 返回开头0的个数 如\(Math.clz32(2)=30\) |
Math.fround(x) | JS内置使用64位双浮点数 此方法可以转成最接近32位单浮点数的数 但本质依然是64位双浮点数 |
Math.imul(a,b) | 先将参数转换位32位整数再相乘(一般没什么用) |
■fround方法使用中如果超出了32位单浮点数的范围,则会返回无穷大
console.log(2 ** 150);//某个非常大的数
console.log(Math.fround(2 ** 150));//Infinity
四、Number
特殊值
属性 | 说明 |
---|---|
Number.NaN | 同NaN |
Number.NEGATIVE_INFINITY | 负无穷 |
Number.POSITIVE_INFINITY | 正无穷 |
关于无穷大的运算比较特殊
■0与无穷相乘为NaN
■无穷与无穷相除为NaN
■无穷相加减任何有限值都是本身
■正无穷乘正值(包括正无穷)为正无穷
■正无穷乘负值(包括负无穷)为负无穷
■负无穷乘正值(包括正无穷)为负无穷
■负无穷乘负值(包括负无穷)为正无穷
■除法在被除数是无穷除数是有限值的情况下与乘法相同
■任意数除以无穷为0
转换原始值
转换原始值 | 说明 |
---|---|
Number.prototype.toString([radix]) | radix默认为10 根据进制来转成String值 |
Number.prototype.valueOf() | 返回原始值 |
String转Number
String转Number | 说明 |
---|---|
Number.parseFloat(str) | 参考parseFloat方法 |
Number.parseInt(str,[radix]) | 参考parseInt方法 |
Number转String
Number转String | 说明 |
---|---|
Number.prototype.toLocaleString(locales, options) | 详细见MDN,根据应用来输出不同格式的字符串 |
Number.prototype.toExponential([fracDigits]) | 按科学计数法来输出字符串 fracDigits指定小数位,默认用尽可能多的小数位 |
Number.prototype.toFixed([digits]) | 按digits即保留小数位位数的多少来输出 digits默认为0 |
Number.prototype..toPrecision([precision]) | 按precision即有效数字个数来输出 忽略pricision行为类似于toString方法 |
双浮点数的内部属性
内部属性 | 说明 |
---|---|
Number.MAX_VALUE | 最大正值,接近1.79E+308 |
Number.MIN_VALUE | 最小正值,接近5e-324 |
Number.MAX_SAFE_INTEGER | 最大安全整数,9007199254740991 |
Number.MIN_SAFE_INTEGER | 最小安全整数,-9007199254740991 |
Number.EPSILON | 1与超过1的最小浮点数的差值 |
MAX_VALUE是64位双浮点数的最大表示范围,如果超出则会按Infinty即无穷来处理。而MIN_VALUE则是代表精度的极限范围,如果超出精度范围直接当0处理。由于浮点数的特性,小数有偏差已经是默认情况了,但是整数如果出现偏差则是不被允许的情况(如果你想表达1结果输出2,这肯定是不被允许的),因此另外一个范围是整数的安全范围,在此安全范围内整数一定不会出现偏差。
EPSILON可用于比较浮点数,因为浮点数的偏差一般是不能直接用相等来比较的。而是采用\(|实际值-期望值|<最小精度\)来判断,而最小精度就是EPSILON
console.log(0.1 + 0.2 === 0.3);//false
console.log(Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON);//true
function EqualFloat(a, b){
//抽象成函数
//a是实际值,b是期望值
//判断a是否等于b
return (Math.abs(a-b) < Number.EPSILON);
}
判断类型方法
判断类型方法 | 说明 |
---|---|
Number.isNaN(x) | 判断是否为NaN |
Number.isFinite(x) | 判断是否为有限值,即不是NaN、Infinity |
Number.isInteger(x) | 判断是否为整数 |
Number.isSafeInteger(x) | 判断是否为安全整数 |
五、BigInt
运算符支持情况
基本的运算符大部分都能支持,>>>
因为要兼容asm.js不能使用也不能使用单目运算符+
。
由于是整数,对于除法来说就变成了整除
就比较运算符而言,它可以和Number无缝连接,但不能使用严格比较符,两者的类型并不相同
转换原始值
转换原始值 | 说明 |
---|---|
BigInt.prototype.toString([radix]) | 详细参考Number,但BigInt后的n并不会算在内 |
BigInt.prototype.valueOf() | 返回BigInt的原始值 |
BigInt转String
BigInt转String | 说明 |
---|---|
BigInt.prototype.toLocaleString(locales,options) | 详细参考Number |
二进制相关方法
二进制相关方法 | 说明 |
---|---|
BigInt.asIntN(width,bigint) | 返回\(bigint\%2^{width}\)的有符号整数 |
BigInt.asUintN(width,bigint) | 返回\(bigint\%2^{width}\)的无符号整数 |
因为BigInt没有上限值,这两种方法可以有效地设定上限
其中asIntN限制于\((-2^{width},2^{width})\),asUintN限制于\((0,2^{width})\)
const max = 2n ** 64n;//最大值设定在2^64内
function CheckRange(bigint){
//如果相等说明数据在范围内
//否则超出范围,返回异常值undefined
return (BigasUintN(64,bigint) === bigint) ? bigint : undefined;
}
参考资料
[1] 《JavaScrpit DOM 编程艺术》
[2] MDN
[3] 现代JS教程
[4] 黑马程序员 JS pink
JS Math与一些原始类型的更多相关文章
- js之数据类型(原始类型)
JavaScript的数据类型分为两类:原始类型和对象类型.本文讨论的是原始类型.原始类型包括数字,字符串,和布尔值.但在JavaScript中有两个特殊的原始值null(空)和undefined(未 ...
- 由js apply与call方法想到的js数据类型(原始类型和引用类型)
原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...
- Javascript 基础学习(三)js 的原始类型和声明变量
java的基本数据类型一共有 byte short int long float double char boolean js中定义变量使用关键字 var js的原始类型(五个) String: 字符 ...
- JS中的原始类型和判断方法
ECMAScript 中定义了 7 种原始类型: Boolean String Number Null Undefined Symbol(新定义) BigInt(新定义) 注意: 原始类型不包含 Ob ...
- 转战JS(1) 初探与变量类型、运算符、常用函数与转换
转战JS(1)初探与变量类型.运算符.常用函数与转换 做为一名.NET后台开发人员,正考滤向Web前端开发转型,之前也写过一代前端代码,可是当再回头看JS,并有转向它的意愿的时候,突然发现:原来JS不 ...
- JS面试题-<变量和类型>-JavaScript的数据类型
前言 整理以前的面试题,发现问js数据类型的频率挺高的,回忆当初自己的答案,就是简简单单的把几个类型名称罗列了出来,便没有了任何下文.其实这一个知识点下可以牵涉发散出很多的知识点,如果一个面试者只是罗 ...
- [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象
js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //&q ...
- WebGL three.js学习笔记 6种类型的纹理介绍及应用
WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...
- js之数据类型(对象类型——构造器对象——数组1)
数组是值的有序集合,每个值叫做一个元素,而每一个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型的,数组元素可以是任意类型且同一个数组中不同元素也可能有不同的类型.数组的 ...
- js之数据类型(对象类型——构造器对象——对象)
JavaScript中除了原始类型,null,undefined之外就是对象了,对象是属性的集合,每个属性都是由键值对(值可以是原始值,比如说是数字,字符串,也可以是对象)构成的.对象又可分为构造器对 ...
随机推荐
- 谈谈关于CDN缓存
一.CDN是什么? 谈到CDN的作用,可以用8年买火车票的经历来形象比喻: 8年前,还没有火车票代售点一说,12306.cn更是无从说起.那时候火车票还只能在火车站的售票大厅购买,而我所住的小县城并不 ...
- 通过Jenkins在远程服务器上执行shell脚本
1.Jenkins安装Publish over SSH插件 下载安装Publish over SSH插件 2.配置服务器相关信息 要先在jenkins所在的机器上生成秘钥.生成方式为: ssh-key ...
- ScrollView 滚动条
<style name="fa_SlideTabRecyclerView"> <item name="android:scrollbarThumbVer ...
- 20220408_转载_LaTex数学公式基本代码
https://blog.csdn.net/ViatorSun/article/details/82826664 超详细 LaTex数学公式
- Android Custom View使用Databinding
Android Custom View是可以使用 databinding 的 //java.lang.IllegalArgumentException: View is not a binding l ...
- Centos 7.5 MySql的安装和配置
一.安装 三个步骤: wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum -y ins ...
- ICPC2020上海B - Mine Sweeper II
思维 [B-Mine Sweeper II_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海)(重现赛)@hzy0227 (nowcoder.com)](https://codeforc ...
- zabbix 使用小技巧
001.监控项指定时间执行 wd1-7h01m00 周一到周日,每天 01:00:00 执行一次 002.监控项某一段时间点每分钟执行一次 1-5,00:00-09:00 6-7,00:00-23:5 ...
- 高精度计算_vector
#include<bits/stdc++.h> using namespace std; // return a+b; vector<int> add(vector<in ...
- openstack 下云主机所在目录
1.先查看云主机运行在哪个节点 2. [root@compute01 ~]# cd /var/lib/nova/instances/ 注: 云主机是一台链接克隆的虚拟机,_base 是母盘, fa56 ...