您好,登录后才能下订单哦!
本篇内容主要讲解“JavaScript中的单例内置对象Global与Math怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的单例内置对象Global与Math怎么使用”吧!
ECMA-262 对内置对象的定义是“任何由ECMAScript实现提供,与宿主环境无关,并在ECMAScript 程序开始执行时就存在的对象”。这意味着,开发者不用显示的实例化内置对象,因为他们已经实例化 好了。
Global 对象是ECMAScript 中最特别的对象,因为代码不会显示的访问它。ECMA-262 规定Global 对象为一种兜底对象,他所针对的是不属于任何对象的属性和方法。事实上,不存在全局变量或全局函数这种东西。在全局作用域中定义的变量和函数都会变成Global对象的属性。包括isNaN(),isFinite(),parseInt()和parseFloat(),实际上都是Global对象的方法。除了这些,Global 对象上还有另外一些方法。
encodeURI()和encodeURIComponent()方法用于编码统一资源标识符(URI),以便传给浏览器。有效的URI不能包含某些字符,比如空格。使用URI编码方法来编码URI可以让浏览器能够理解它们,同时又以特殊的UTF—8 编码替换掉所有无效字符。encodeURI()方法用于对整个URI进行编码,比如"www.wrox.com/illegal value.js".而encodeURIComponent()方法用于编码URI中单独的组件,比如前面URL 中的"illegal value.js"。这两个方法的主要区别是,encodeURI 不会编码属于URL组件的 特殊字符,如冒号,斜杠,问号,井号,二encodeURI Component()会编码他发现的所有非标准字符。
let uri = "http://www.wrox.com/illegal value.js#start"; //http://www.wrox.com/illegal%20value.js#start console.log(encodeURI(uri)); //http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start console.log(encodeURIComponent(uri));
这里使用encodeURI()编码后,除空格被替换为%20之外,没有任何变化。而encodeURIComponent()方法将所有非字母字符都替换成了相应的编码形式。这就是使用encodeURI编码整个URI,但只使用encodeURIComponent()编码那些会追加到已有URI后面的字符串的原因。
与encodeURI() 和 encodeURIComponent()相对的是decodeURI()和decodeURIComponent().decodeURI()只对使用encodeURI()编码过的字符解码。例如,%20会被退换为空格,但%23不会被替换为井号(#),因为井号不是由encodeURI()替换的。类似的,decodeURIComponent()解码所有被encodeURIComponent()编码的字符,基本上就是解码所有特殊值。
let uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start"; //http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start console.log(decodeURI(uri)); //http://www.wrox.com/illegal value.js#start console.log(encodeURIComponent(uri));
eval()方法可以说是ECMAScript语言中最强大的。这个方法就是一个完整的ECMAScript解析器,它接收一个参数,即一个要执行的ECNAScript(JavaScript)字符串。
当解释器发现eval()调用时,会将参数解释为实际的ECMAScript 语句,然后将其插入该位置。
通过eval()执行的代码属于该调用所在上下文,被执行的代码与该上下文拥有相同的作用域链。
通过eval()定义的任何变量和函数都不会被提升,这是因为在解析代码的时候,它们是被包含在一个字符串中。 由于eval()的风险性,大部分时间不会使用这个函数。
Gobal 对象由很多属性,其中一些前面已经提到过了。像undefined,NaN和Infinity等特殊值都是Global 对象的属性。此外,所有原生引用类型构造函数,比如Object和Function,也都是Gobal 对象的属性。下表列出了Global对象的属性。
属性 | 说明 |
---|---|
undefined | 特殊值undefined |
NaN | 特殊值NaN |
Infinity | 特殊值Infinity |
Object | Object的构造函数 |
Array | Array的构造函数 |
Function | Function的构造函数 |
Boolean | Boolean的构造函数 |
String | String 的构造函数 |
Number | Number 的构造函数 |
Date | Date的构造函数 |
RegExp | RegExp的构造函数 |
Symbol | Symbol的伪构造函数 |
Error | Error 的构造函数 |
EvalError | EvalError 的构造函数 |
RangeError | RangeError的构造函数 |
SyntaxError | SyntaxError的构造函数 |
TypeError | TypeError的构造函数 |
URIError | URIError的构造函数 |
虽然ECMA-262 没有规定 直接访问Global 对象的方式,但浏览器将window对象实现为Global对象的代理。因此全局作用域中的变量和函数都变成了window对象的属性。
var color = "red"; function sayColor() { cosole.log(window.color); } window.sayColor();// “red”
另外一种获取Global 对象的方式是使用如下的代码:
let global = function () { return this; }();
这段代码创建一个立即调用的函数表达式,返回了this的值。当一个函数没有明确(通过称为某个对象的方法,或者通过call()/apply())指定this值的情况下执行时,this值等于Global 对象。
ECMAScript 提供了Math 对象作为保存数学公式,信息和计算的地方。Math对象提供了一些辅助计算的属性和方法。
Math对象上提供的计算要比直接在JavaScript 实现的快的多,因为Math 对象上的计算使用了JavaScript 引擎中更高效的实现和处理器指令。但使用Math计算的问题时精确度会因浏览器,操作系统,指令集和硬件而异。
属性 | 说明 |
---|---|
Math.E | 自然对数的基数e的值 |
Math.LN10 | 10为底的自然数对 |
Math.LN2 | 2为底的自然对数 |
Math.LOG2E | 以2为底e的对数 |
Math.LOG10E | 以10为底e的对数 |
Math.PI | pi的值 |
Math.SQRT1_2 | 1/2的平方根 |
Math.SQRT2 | 2的平方根 |
Math对象也提供了很多付诸执行简单或复杂数据计算的方法。 min()和max()方法用于确定一组数值中的最小值和最大值。这两个方法接收任意多个参数。
let max = Math.max(3,54,32,16); console.log(max); // 54 let min = Math.min(3,54,32,16); console.log(min);//3
要知道数组中的最大值和最小值,可以像下面这样使用拓展操作符:
let values = [1,2,3,4,5,5,6,7,8]; let max = Math.max(...values);// 8
Math.ceil(),Math.floor(),Math.round(),Math.fround() 是把小数舍入为整数的4个方法。
Math.ceil()方法始终向上舍入为最接近的整数。
Math.floor() 方法始终向下舍入为最接近的整数。
Math.round() 方法执行四舍五入。
Math.fround()方法返回数值最接近的单精度(32位)浮点值表示。
console.log(Math.ceil(25.9));// 26 console.log(Math.ceil(25.5));// 26 console.log(Math.ceil(25.1));// 26 console.log(Math.round(25.9));// 26 console.log(Math.round(25.5));// 26 console.log(Math.round(25.1));// 25 console.log(Math.fround(0.4));//0.4000000059604645 console.log(Math.fround(0.5));// 0.5 console.log(Math.fround(25.9));// 25.899999618530273 console.log(Math.floor(25.9));// 25 console.log(Math.floor(25.5));// 25 console.log(Math.floor(25.1));// 25
Math.random()方法返回一个0~1范围内的随机数,其中包含0 但不包含1。可以基于一下公式使用Math.random()从一组整数种随机选择一个数:
number = Math.floor(Math.random() * totoal_number_of_choices + first_possible_value)
这里使用了Math.floor()方法,因为Math.random()始终返回小数,即便成一个数再加上一个数也是小数。因此,如果想从1~10范围内随机选择一个数,代码就是这样的
let num = Math.floor(Math.random() * 10 + 1);
可以通过下面的通用函数计算出可选总数和最小可能的值:
function selectFrom(lowerValue,upperValue){ let choices = upperValue - lowerValue + 1; return Math.floor(Math.random() * choices + lowerValue); } let num = selectFrom(2,10); console.log(2,10);
Math的其他方法
方法 | 说明 |
---|---|
Math.abs(x) | 返回x的绝对值 |
Math.exp(x) | 返回Math.E的x次幂 |
Math.expm1(x) | 等于Math.exp(x) -1 |
Math.log(x) | 返回x的自然对数 |
Math.log1p | 等于1 + Math.log(x) |
Math.pow(x,power) | 返回x的power次幂 |
Math.hypot(..nums) | 返回nums中每个数平方和的平方根 |
Math.clz32(x) | 返回32位整数x的前置零的数量 |
Math.sign(x) | 返回x符号的1,0,-0或 -1 |
Math.trunc(x) | 返回x的整数部分,删除所有小数 |
Math.sqrt(x) | 返回x的平方根 |
Math.cbrt(x) | 返回x的立方根 |
Math.acos(x) | 返回x的反余弦 |
Math.acosh(x) | 返回x的反双曲余弦 |
Math.asin(x) | 返回x的反正弦 |
Math.asinh(x) | 返回x的反双曲正弦 |
Math.atan(x) | 返回x的反正切 |
Math.atanh(x) | 返回x的反双曲正切 |
Math.atan2(y,x) | 返回y/x的反正切 |
Math.cos(x) | 返回x的余弦 |
Math.sin(x) | 返回x的正弦 |
Math.tan(x) | 返回x的正切 |
到此,相信大家对“JavaScript中的单例内置对象Global与Math怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。