JavaScript 中的单例内置对象Global 与 Math

目录
  • 前言
  • Global
    • 1.URL编码方法
    • 2.eval()方法
    • 3.Gobal对象属性
    • 4.window 对象
  • Math
    • 1.Math 对象属性
    • 2.min()和max()方法
    • 3.舍入方法 Math.ceil(),Math.floor(),Math.round(),Math.fround()
  • random()方法

前言

ECMA-262 对内置对象的定义是“任何由ECMAScript实现提供,与宿主环境无关,并在ECMAScript 程序开始执行时就存在的对象”。这意味着,开发者不用显示的实例化内置对象,因为他们已经实例化 好了。

Global

Global 对象是ECMAScript 中最特别的对象,因为代码不会显示的访问它。ECMA-262 规定Global 对象为一种兜底对象,他所针对的是不属于任何对象的属性和方法。事实上,不存在全局变量或全局函数这种东西。在全局作用域中定义的变量和函数都会变成Global对象的属性。包括isNaN(),isFinite(),parseInt()和parseFloat(),实际上都是Global对象的方法。除了这些,Global 对象上还有另外一些方法。

1.URL编码方法

encodeURI()和encodeURIComponent()方法用于编码统一资源标识符(URI),以便传给浏览器有效的URI不能包含某些字符比如空格。使用URI编码方法来编码URI可以让浏览器能够理解它们,同时又以特殊的UTF—8 编码替换掉所有无效字符。encodeURI()方法用于对整个URI进行编码,比如"www.wrox.com/illegalvalue.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));

2.eval()方法

eval()方法可以说是ECMAScript语言中最强大的。这个方法就是一个完整的ECMAScript解析器,它接收一个参数,即一个要执行的ECNAScript(JavaScript)字符串。
当解释器发现eval()调用时,会将参数解释为实际的ECMAScript 语句,然后将其插入该位置
通过eval()执行的代码属于该调用所在上下文,被执行的代码与该上下文拥有相同的作用域链
通过eval()定义的任何变量和函数都不会被提升,这是因为在解析代码的时候,它们是被包含在一个字符串中。 由于eval()的风险性,大部分时间不会使用这个函数。

3.Gobal对象属性

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的构造函数

4.window 对象

虽然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 对象。

Math

ECMAScript 提供了Math 对象作为保存数学公式,信息和计算的地方。Math对象提供了一些辅助计算的属性和方法。
Math对象上提供的计算要比直接在JavaScript 实现的快的多,因为Math 对象上的计算使用了JavaScript 引擎中更高效的实现和处理器指令。但使用Math计算的问题时精确度会因浏览器,操作系统,指令集和硬件而异。

1.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的平方根

2.min()和max()方法

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

3.舍入方法 Math.ceil(),Math.floor(),Math.round(),Math.fround()

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

random()方法

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的文章就介绍到这了,更多相关JavaScript 单例内置对象内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JS 设计模式之:单例模式定义与实现方法浅析

    本文实例讲述了JS 设计模式之:单例模式定义与实现方法.分享给大家供大家参考,具体如下: 良好的设计模式可以显著提高代码的可读性,降低复杂度和维护成本.笔者打算通过几篇文章通俗地讲一讲常见的或者实用的设计模式. 今天先从最简单的一个入手:单例模式. 文中的示例代码会使用 ES6 语法,尽量简化不必要的细节 概念 单例模式(Singleton)属于创建型的设计模式,它限制我们只能创建单一对象或者某个类的单一实例. 通常情况下,使用该模式是为了控制整个应用程序的状态.在日常的开发中,我们遇到的单例模

  • 怎样用Javascript实现单例模式

    概述 单例模式也称为单体模式,规定一个类只有一个实例,并且提供可全局访问点: 在读这篇文章之前,也许你对单例模式的概念感到模糊或者不清楚,但是其实在日常的开发中你肯定用到过单例模式: JavaScript中没有类的定义,单例模式的特点是"唯一"和"全局访问",那么我们可以联想到JavaScript中的全局对象,利用ES6的let不允许重复声明的特性,刚好符合这两个特点:是的,全局对象是最简单的单例模式: let obj = { name:"咸鱼"

  • JS实现单例模式的6种方案汇总

    前言 今天在复习设计模式中的-创建型模式,发现JS实现单例模式的方案有很多种,稍加总结了一下,列出了如下的6种方式与大家分享 大体上将内容分为了ES5(Function)与ES6(Class)实现两种部分 单例模式的概念 单例模式就是在系统中保存一个实例,就是一个全局变量,在团队开发中,为了实现一些相似的功能,比如不同页面之间的表单验证,可能需求是不一样的,但是呢命名可能一样,这时就会产生冲突,这时候单例模式就能很好的解决这个问题. 一个实例只生产一次 保证一个类仅有一个实例,并提供一个访问它的

  • JavaScript设计模式---单例模式详解【四种基本形式】

    本文实例讲述了JavaScript设计模式---单例模式.分享给大家供大家参考,具体如下: 单例模式也称为单体模式,其中: 1,单体模式用于创建命名空间,将系列关联的属性和方法组织成一个逻辑单元,减少全局变量. 逻辑单元中的代码通过单一的变量进行访问. 2,三个特点: ① 该类只有一个实例: ② 该类自行创建该实例,即在该类内部创建自身的实例对象: ③ 向整个系统公开这个实例接口 3,单体模式有四种基本形式: 第一种,最简单的单体,只被实例化一次    我简记为json对象 (1)基本结构 va

  • JavaScript单例模式实现自定义弹框

    本文实例为大家分享了JavaScript单例模式实现自定义弹框的具体代码,供大家参考,具体内容如下 功能 自定义弹框标题 自定义弹框内容 自定义弹框确认和关闭时的回调函数 完整代码 const Dialog = (function () { class Dialog { constructor () { this.ele = document.createElement('div') this.ele.className = 'dialog' document.body.appendChild(

  • JavaScript 中的单例内置对象Global 与 Math

    目录 前言 Global 1.URL编码方法 2.eval()方法 3.Gobal对象属性 4.window 对象 Math 1.Math 对象属性 2.min()和max()方法 3.舍入方法 Math.ceil(),Math.floor(),Math.round(),Math.fround() random()方法 前言 ECMA-262 对内置对象的定义是“任何由ECMAScript实现提供,与宿主环境无关,并在ECMAScript 程序开始执行时就存在的对象”.这意味着,开发者不用显示的

  • JavaScript封闭函数及常用内置对象示例

    本文实例讲述了JavaScript封闭函数及常用内置对象.分享给大家供大家参考,具体如下: 封闭函数 在封闭函数内部定义的函数与外部函数尽管同名也没有关系,同理,定义的变量也可以同名. 封闭函数的写法,一是加括号,一是加感叹号. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>封闭函数</title> &

  • javascript 中模板方法单例的实现方法

    javascript 中模板方法单例的实现方法 模板方法单例 模板方法的定义:父类中定义一组操作算法骨架,将一些实现步骤延伸到子类中,使得子类可以不改变父类的算法结构的同时可重新定义算法中某些实现步骤. 代码块 html部分,例如: <div id="content"></div> js部分,例如: //格式化字符串方法 function fromateString(str, data) { return str.replace(/\{#(\w+)#\}/g,

  • JavaScript高级程序设计 读书笔记之十一 内置对象Global

    内置对象 定义:由ECMAScript实现提供的.独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现. 由定义可知开发者不必明确实例化内置对象,它已被实例化了.在ECMAScript-262只定义了两个内置对象,即Global和Math Global Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在. 由于在ECMAScript中不存在独立的对象,所有函数都必须是某个对象的方法,如前面提到的isNaN().isFinite().parseInt()和p

  • javascript function、指针及内置对象

    函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解. javascript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法: 以下是引用片段: function func1(-){-} var func2=function(-){-}; var func3=function func4(-){-}; var func5=new

  • javascript学习笔记(八) js内置对象

    1.URI方法 encodeURI()和encodeURIComponent()对URI进行编码 encodeURI()不会对本身属于URI的特殊字符进行编码,如冒号,正斜杠,问好,井字等 encodeURIComponent()会对任何非标准字符进行编码 2.eval() 方法:解释参数中的代码字符串 复制代码 代码如下: var msg = "hello world"; eval("alert(msg)"); //"hello world"

  • JavaScript内置对象介绍

    目录 一.内置对象 二.Math对象 1.Math对象的使用 2.生成指定范围的随机数 三.日期对象 1.Date()方法的使用 2.日期对象的使用 3.获取时间戳 四.数组对象 1.数组对象的创建 2.检测是否为数组 3.添加删除数组元素的方法 4.数组排序 5. 数组索引方法 6.数组转换为字符串 五.字符串对象 1.根据字符返回位置 2. 根据位置返回字符 3. 字符串操作方法 4.split()方法 一.内置对象 内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一

  • Javascript中prototype属性实现给内置对象添加新的方法

    本文实例讲述了Javascript中prototype属性实现给内置对象添加新的方法.分享给大家供大家参考.具体实现方法如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>prototype

  • Javascript基础知识中关于内置对象的知识

    目录 1.内置对象介绍 1.1 Math对象 1.2 Math中的方法 1.3 Date对象 2.Date中的方法 3.经典案例:倒计时效果: 4.Array数组对象 4.1 数组的创建 4.2 数组中的常用方法 5.字符串String 1.内置对象介绍 JavaScript组成: ECMAScript | DOM | BOM ECMAScript: 变量 , 函数, 数据类型 ,流程控制,内置对象 js中的对象: 自定义对象 , 内置对象 , 浏览器对象(不属于ECMAScript) 1.1

  • javascript中内置对象Math的介绍及用法案例

    目录 前言 Math概述 Math中常用函数的用法 1.绝对值方法 2.三个取整方法 3.求最大值/最小值 4.随机数 结语 前言 今天总结一下javascript 内置对象Math中的函数用法,顺带写一下常见的案例. Math概述 Math 对象不是构造函数,它具有数学常数和函数的属性和方法.跟数学相关的运算(求绝对值,取整.最大值等)可以使用 Math 中的成员. Math中常用函数的用法 Math.PI //圆周率Math.floor () //向下取整Math.ceil () //向上取

随机推荐