单体内置对象
《JavaScript高级程序设计》:由 ECMAScript 实现提供的、不依赖于宿主环境的对象,这些对象在 ECMAScript 程序执行前就已经存在了。
开发人员无需显式地实例化内置对象,因为他们已经实例化了
如 Math 和 Global
Math
Math 是 Javascript 的原生对象,提供各种数学功能。
该对象不是构造函数,不能生成实例
所有的属性和方法都必须在 Math 对象上调用
静态属性
Math 的静态属性,提供以下一些数学常数。
| Math.E : 常数 e => 2.718281828459045 |
| |
| Math.LN2 : 2 的自然对数 => 0.6931471805599453 |
| |
| Math.LN10 : 10的自然对数 => 2.302585092994046 |
| |
| Math.LOG2E : 以 2 为底的 e 的对数 => 1.4426950408889634 |
| |
| Math.LOG10E : 以 10 为底的 e 的对数 => 0.4342944819032518 |
| |
| Math.PI : 常数 π => 3.141592653589793 |
| |
| Math.SQRT1_2 : 0.5 的平方根 => 0.7071067811865476 |
| |
| Math.SQRT2 : 2 的平方根 => 1.4142135623730951 |
| |
| 注意 : 这些属性都是只读的 不能修改 |
静态方法
Math.abs()
| Math.abs() 方法返回参数值的绝对值 |
| |
| Math.abs(1) => 1 |
| |
| MAth.abs(-1) => 1 |
Math.max()
| Math.max() 方法返回参数之中最大的那个值 |
| |
| 如果参数为空 Math.max() 返回 -Infinity |
| |
| Math.max(2,-1,5) => 5 |
| |
| Math.max() => -Infinity |
Math.min()
| Math.min() 方法返回参数中最小的那个值 |
| |
| 如果参数为空 Math.min() 返回 Infinity |
| |
| Math.min(2,-1,5) => -1 |
| |
| Math.min() => Infinity |
Math.floor()
| Math.floor() 方法返回 小于 或 等于 参数值的最大整数 地板值 |
| |
| Math.floor(3.2) => 3 |
| |
| Math.floor(-3.2) => -4 |
Math.ceil()
| Math.ceil() 方法返回 大于 或 等于 参数值的最小整数 天花板值 |
| |
| Math.ceil(3.2) => 4 |
| |
| Math.ceil(-3.2) => -3 |
Math.floor() 结合 Math.ceil() 返回数值的整数部分
| function ToInteger(x) |
| |
| |
| |
| |
| ToInteger(3.2) => 3 |
| ToInteger(3.5) => 3 |
| ToInteger(3.8) => 3 |
| ToInteger(-3.2) => -3 |
| ToInteger(-3.5) => -3 |
| ToInteger(-3.8) => -3 |
| |
Math.round()
| Math.round() 方法用于四舍五入 |
| |
| Math.round(0.1) => 0 |
| |
| Math.round(0.5) => 1 |
| |
| Math.round(0.6) => 1 |
| |
| 注意 |
| |
| 它对负数的处理 主要是对 0.5 的处理 |
| |
| Math.round(-1.1) => -1 |
| |
| Math.round(-1.5) => -1 |
| |
| Math.round(-1.6) => -2 |
Math.random()
| Math.random() 方法返回 0 到 1 之间的一个伪随机数,可能等于 0 ,但是一定小于 1 |
| |
| Math.random() => 0.7151307314634323 |
| |
| |
| 用法 |
| |
| 1、任意范围的随机数生成函数 如下 |
| |
| function getRandomArbitirary(min,max){ |
| return Math.random() * (max - min) + min |
| } |
| |
| getRandomArbitirary(1.5,6.5) => 2.4942810038223864 |
| |
| 2、任意范围的随机整数生成函数如下 |
| |
| function getRandomInt(min, max) { |
| return Math.floor(Math.random() * (max - min + 1)) + min; |
| } |
| |
| getRandomInt(1, 6) => 5 |
| |
| 3、返回随机字符的例子如下 |
| |
| function random_str(length) { |
| var ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; |
| ALPHABET += 'abcdefghijklmnopqrstuvwxyz'; |
| ALPHABET += '0123456789-_'; |
| var str = ''; |
| for (var i = 0; i < length; ++i) { |
| var rand = Math.floor(Math.random() * ALPHABET.length); |
| str += ALPHABET.substring(rand, rand + 1); |
| } |
| return str; |
| } |
| |
| random_str(6) => "NdQKOr" |
Math.pow()
| Math.pow() 方法返回以第一个参数为底数、第二个参数为指数的幂运算值 |
| |
| Math.pow(2,2) => 4 |
| |
| Math.pow(2,3) => 8 |
| |
| 计算 圆 面积的方法 |
| |
| let radius = 20 |
| |
| let area = Math.PI * Math.pow(radius,2) |
Math.sqrt()
| Math.sqrt() 方法返回参数值的 平方根 如果参数是一个 负值 则 返回 NaN |
| |
| Math.sqrt(4) => 2 |
| |
| Math.sqrt(-4) => NaN |
Math.log()
| Math.log() 方法返回常数 e 为底的自然数值 |
| |
| Math.log(Math.E) => 1 |
| |
| Math.log(10) => 2.302585092994046 |
| |
| 如果要计算以10为底的对数,可以先用Math.log求出自然对数,然后除以Math.LN10 |
| |
| 求以2为底的对数,可以除以Math.LN2。 |
| |
| Math.log(100)/Math.LN10 => 2 |
| |
| Math.log(8)/Math.LN2 => 3 |
Math.exp()
| Math.exp() 方法返回常数 e 的参数次方 |
| |
| Math.exp(1) => 2.718281828459045 |
| |
| Math.exp(3) => 20.085536923187668 |
三角函数方法
Math对象还提供一系列三角函数方法
| Math.sin():返回参数的正弦(参数为弧度值) |
| |
| Math.cos():返回参数的余弦(参数为弧度值) |
| |
| Math.tan():返回参数的正切(参数为弧度值) |
| |
| Math.asin():返回参数的反正弦(返回值为弧度值) |
| |
| Math.acos():返回参数的反余弦(返回值为弧度值) |
| |
| Math.atan():返回参数的反正切(返回值为弧度值) |
| |
| Math.sin(0) => 0 |
| Math.cos(0) => 1 |
| Math.tan(0) => 0 |
| |
| Math.sin(Math.PI / 2) => 1 |
| Math.asin(1) => 1.5707963267948966 |
| Math.acos(1) => 0 |
| Math.atan(1) => 0.7853981633974483 |
Global
Global(全局)对象是ECMAScript中特殊的一个对象,不管你从什么角度看这个对象都是不存在的
Global对象某种意义上作为一种 “兜底儿对象” 来定义的
换句话说不属于任何其他对象的属性和方法,最终都是它的属性和方法
事实上没有全局变量和全局函数;所有全局作用域中定义的属性和函数,都是Global对象的属性
像 isNaN()、isFinite()、parseFloat()、parseInt() 实际上都是 Global 对象的方法,除此之外,还有
获取方式
| let global = function(){ |
| return this |
| } |
URI编码方法
有时候访问自己服务器上的中文名资源,复制网址后粘贴却变成了没有中文的地址
其实这和Global对象的编码方法encodeURI(str)、encodeURIComponent(str)有关
这可以对URI(Uniform Resource Identifiers)进行编码,它们用特殊的字符替换无效的字符,使浏览器可以接受和理解
encodeURI()
| 对 整个 uri 进行编码,但不会对本身属于uri的特殊字符进行编码 |
| |
| encodeURI()不会对本身属于URI的特殊字符进行编码,例如:冒号、正斜杠、问号和井号 |
| |
| encodeURI('http://www.yama.gz.cn/resourse/作者.jpeg') |
| |
| => http://www.yama.gz.cn/resourse/%E4%BD%9C%E8%80%85.jpeg |
encodeURIComponent()
| 对 uri 中的某一段进行编码,会对任何非标准字符进行编码 |
| |
| encodeURIComponent('http://www.yama.gz.cn/resourse/作者.jpeg') |
| |
| => http%3A%2F%2Fwww.yama.gz.cn%2Fresourse%2F%E4%BD%9C%E8%80%85.jpeg |
decodeURI()
| 对 encodeURI() 替换的字符进行解码 |
| |
| decodeURI('"http://www.yama.gz.cn/resourse/%E4%BD%9C%E8%80%85.jpeg"') |
| |
| => http: |
decodeURIComponent()
| 对 encodeURIComponent() 进行解码 |
| decodeURIComponent('http://www.yama.gz.cn/resourse/%E4%BD%9C%E8%80%85.jpeg') |
| |
| => 没问题:http: |
编码解码说明
| 对应的两个解码方法有 decodeURI()、decodeURIComponent() |
| |
| 其中 decodeURI() 只能对使用 encodeURI() 编码的字符进行解码 |
| |
| 而 decodeURIComponent() 由于他对应的编码方法非常全,所以它可以解码任何特殊字符的编码 |
eval () 方法
| eval() 方法用于接受一个字符串参数(这个参数可以不用加引号) |
| |
| 这个参数将会作为 JS代码 被执行 |
| |
| 这是一个危险的函数,eval可能导致被运行恶意的代码, |
| |
| 并且它本身的速度比较慢 |
| |
| 在必须使用的地方可以使用 window.Function() 代替它 |
| |
| (function(){}).constructor === Function |
| |
| Function 构造函数创建一个新的 Function 对象 |
| |
| 直接调用此构造函数可用动态创建函数,但会遇到和 eval 类似的的安全问题和(相对较小的)性能问题。 |
| |
| 然而,与 eval 不同的是,Function 创建的函数只能在全局作用域中运行 |
| |
| Function 创建的函数明确只能在全局作用域中运行,所以不用思考太多 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构