5.7 Global对象

  • 简介
  • URI编码方法
  • URI解码方法
  • eval()方法
  • Math对象

简介

Global(全局)对象可以说是ECMAScript中最特别的一个对象了,不属于任何其他对象的属性和方法,都是它的属性和方法。例如:isNaN()、parseInt()、parseFloat()、String()、Number()、encodeURI和encodeURTComponent()等等,我们会发现这些方法都不是调用某个对象的方法,而是直接写的。比如:

parseInt('5432542')
String(4352523)

URI编码方法

Global对象的encodeURI()和encodeURIComponent()方法可以对URI进行编码,其中,enCodeURI()主要用于整个URI,而encodeURIComponent()主要用于对URI中的某一段进行编码。它们的主要区别在于,前者不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;而后者则会对它发现的任何非标准字符进行编码。

var uri = 'http://www.wrox.com/illegal value.htm#start'
console.log(enCodeURI(uri))
'http://www.wrox.com/illegal%20value.htm#start'
console.log(enCodeURIComponent(uri))
'http%3A%2F%2Fwww.wrox.com%2Fillgal%20value.htm%23start'

我们发现用enCodeURI()编码后除了空格之外都没有变,而使用enCodeURIComponent()方法则会使用对应的编码替换素有非字母数字字符。所以对整个URI编码使用enCodeURI(),而对URI后面的参数使用enCodeURIComponent()进行编码,如果对整个uri编码也用enCodeURIComponent()这个方法就会无法显示正常的uri。

URI解码方法

与enCodeURI()和enCodeURIComponent()方法对应的两个解码方法分别是decodeURI()和decodeURIComponent()。decodeURI()只能对enCodeURI()进行解码,decodeURIComponent()只能对enCodeURIComponent()进行解码。

eval()方法

eval()方法就像是一个完整的ECMAScript解析器,它只接收一个参数,即要执行的js字符串。例:

eval('console.log('hi')')
等价于
console.log('hi')

通过eval()执行的代码被认为是包含本次调用的执行环境的一部分,所以被执行的代码具有与该执行环境相同的作用域链。这意味着通过eval()执行的代码可以引用在包含环境中定义的变量,例:

var msg = 'hello world'
eval('console.log(msg)')    // hello world

上述代码中eval的msg可以直接引用上面的值,所以这两行代码的作用域是一样的。下面的情况也是可以,不过在严格模式下会报错:

eval('var msg = 'hello world'')
console.log(msg)     // hello world

在eval()中创建的任何变量或函数都不会被提升,因为在解析代码的时候,它们被包含在一个字符串中;它们只有在eval()执行的时候创建。
在严格模式下,在外部访问不到eval()中创建的任何变量和函数,因此上面的例子会报错。
eval()的参数必须是字符串,解析的时候会变成脚本,能够解析字符串的能力非常强大,强大在于如果代码是字符串的情况下就可以使用eval()这个方法,但也非常危险。因为eval()方法的作用域跟上下文是一样的,如果eval()中的参数里有input的值,我在input中就可以输入一些代码获取到用户的一些信息,威胁到用户安全,也就是所谓的代码注入。

Math对象

min()和max()方法

min()和max()方法用于确定一组数值中的最小值和最大值。这两个方法可以接收任意多个数值参数,例:

var max = Math.max(3, 54, 32, 16)
console.log(max)        // 54
var min = Math.min(3, 54, 32, 16)
console.log(min)        // 3

要找到数值中的最大或最小值,可以像下面这样使用apply()方法。

var values = [1, 2, 3, 4, 5, 6, 7, 8]
var max = Math.max.apply(Math, values)

舍入方法

(1)Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
(2)Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
(2)Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数;
例:

console.log(Math.ceil(25.5))        // 26
console.log(Math.floor(25.5))       // 25
console.log(Math.round(25.5))       // 26

random()方法

Math.random()方法返回大于等于0小于1的一个随机数。
如果你想选择一个1到10之间的数值,可以这么写

var num = Math.floor(Math.random()*10+1)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,820评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,648评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,324评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,714评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,724评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,328评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,897评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,804评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,345评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,431评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,561评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,238评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,928评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,417评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,528评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,983评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,573评论 2 359

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,151评论 0 13
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,238评论 0 4
  • ECMA-262 对内置对象的定义是「由 JavaScript 实现提供的、不依赖于宿主环境的对象,这些对象在 J...
    劼哥stone阅读 473评论 0 1
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,066评论 0 1
  • 本章内容 使用对象 创建并操作数组 理解基本的 JavaScript 类型 使用基本类型和基本包装类型 引用类型的...
    闷油瓶小张阅读 684评论 0 0