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之外就是对象了,对象是属性的集合,每个属性都是由键值对(值可以是原始值,比如说是数字,字符串,也可以是对象)构成的.对象又可分为构造器对 ...
随机推荐
- (Fiddler)Fiddler 的相关操作
Fiddler 的几个常用操作: 1. Statistics:会话信息统计 1)选择当前页面的第一个请求和最后一个请求,通过计算 statistics,就知道该页面总共的耗时时间. 2)查出当前页面耗 ...
- docker之安装tomcat
国内Image仓库地址:https://hub.docker.com/search?q=tomcat 安装tomcat docker pull tomcat 查看Image docker images ...
- jmeter--json格式的请求数据参数化以及断言
环境背景:登录接口测试 第一步:创建登录接口的http请求 第二步:添加配置原件--CSV Data Set Config(配置如图所示) 第三步:接口的请求下添加响应断言(如:用响应状态码作为检查点 ...
- html的table多级表头表格的代码
1,两级表头的代码 <html> <head> <title>多层表头</title> <link rel="stylesheet&qu ...
- 蓝桥杯训练赛二-1467 问题 F: 蓝桥杯基础练习VIP-完美的代价
题目描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串.交换的定义是: ...
- 解决pycharm中cv2报错问题,anaconda安装opencv
写在前面的话:cv2 报错是因为没安装opencv安装包所导致,并且在pycharm终端不可使用pip install cv2 进行安装! 如何解决cv2报错: 首先,值得注意的是在pycharm中, ...
- 如何使用css绘制三角形
背景 用迪卡侬官方主页进行页面练习,发现头部导航栏需要使用到梯形 分析 图形分解 通过图片我们可以发现该梯形可以分解成一个长方形和一个直角三角形,长方形:110*65:直角三角形:11*65(底边*另 ...
- 几十行代码实现简易版koa~
application.js const http = require("http")// 洋葱模型 function compose(middleware){ return fu ...
- vl_nnconv.mexw64找不到指定模块
在Installing and compiling the library--matconvnet-1.0-beta25时遇到的错误,总是提示"Invalid MEX-file 'C:\Us ...
- Finance财务软件(月度结转专题)
支持按模板结转 默认结转模板 1.结转收入 借: 6001 主营业务收入 6051 其他业务收入 6301 营业外收入 贷: 4103 本年利润 2.结转成本.费用和税金 借: 4103 本年利润 贷 ...