html数据库(JavaScript隐藏大BOSS:原来所有全局函数都住在Global里!)

html数据库(JavaScript隐藏大BOSS:原来所有全局函数都住在Global里!)
JavaScript隐藏大BOSS:原来所有全局函数都住在Global里!

#记录我的2026#

那天晚上,我在公司楼下的便利店买咖啡。写代码写了一整天,大脑已经有点“缓存溢出”的感觉。正准备回家时,隔壁工位的小伙伴突然在群里问了一句:“小米,JavaScript 里的 Global 对象 到底是个啥?为什么有些函数不用声明就能直接用?”

我看着手机笑了笑。这个问题,其实特别像我们每天生活的一个东西城市的公共设施

于是我决定给他讲个故事。

Global单例内置对象:城市的“公共服务中心”

想象一下,你住在一座城市里。城市里有很多公共设施:

  • 邮局
  • 公路
  • 电力系统
  • 派出所
  • 公共广播

这些东西有个特点:任何人都可以直接使用,不需要自己建一套。JavaScript 里的 Global 对象 就是这样一个存在。

在 JavaScript 运行环境中,Global 是一个 顶层对象,它像是一个“公共服务中心”,里面放着很多系统级工具,比如:

  • parseInt
  • parseFloat
  • isNaN
  • encodeURI
  • decodeURI
  • eval
  • Infinity
  • NaN
  • undefined

这些东西之所以我们能直接调用,比如:

其实本质上都是:

只是 JavaScript 帮我们省略了 global 前缀。就像城市里的路灯一样,你不会每次开灯都说:“我现在使用城市公共照明系统。”,你直接走在路上就行了。

Global 就是这样一个 单例对象,整个 JavaScript 运行环境只有一个。

URL 编码方法:给地址“翻译成国际语言”

故事继续。有一次我在做一个搜索功能,URL 长这样:https://example.com/search?keyword=小米手机

浏览器一访问,服务器直接懵了。

为什么?因为 URL 其实只能安全传输 ASCII 字符。而“中文、空格、特殊符号”都需要编码。这时候 Global 就提供了两对非常重要的工具:

1、encodeURI()

用于 编码完整URL

结果:

https://example.com/search?keyword=%E5%B0%8F%E7%B1%B3%E6%89%8B%E6%9C%BA

注意,encodeURI不会编码URL结构符号,比如:

  • :
  • /
  • ?
  • =

因为这些是 URL 的语法。就像寄快递时:地址结构不能改,只翻译内容。

2、encodeURIComponent()

如果你只想编码 参数部分,就要用这个:

结果:

%E5%B0%8F%E7%B1%B3%20%E6%89%8B%E6%9C%BA

区别非常简单:


3、解码方法

Global 还提供了两个反向工具:

  • decodeURI()
  • decodeURIComponent()

就像:翻译 → 再翻译回来

eval()方法:JavaScript 的“魔法咒语”

讲到这里,我突然想起了 JavaScript 世界里最神秘的一个函数:eval()

如果说 Global 是城市服务中心,那 eval() 就像一位 魔法师。它可以把字符串 当作 JavaScript 代码执行

举个例子:eval("console.log('Hello JavaScript')");

运行结果:Hello JavaScript

再来个更刺激的:

输出:30

也就是说:字符串 → 直接变代码执行,是不是有点黑魔法的感觉?

但为什么大家都说不要用?因为它有两个大问题:

1、安全问题

如果代码来自用户输入:eval(userInput)

那攻击者可能输入:deleteAllDatabase()

那可就不是开玩笑了。

2、性能问题

JavaScript 引擎在编译代码时,会做很多优化。但只要出现 eval(),引擎就会想:“等等,这段代码可能会动态生成变量…”,于是很多优化都会 失效

所以现代开发里有一句经典建议:永远不要使用 eval(),除非你非常清楚自己在干什么。

Global对象属性:JavaScript 的“系统常量”

除了函数,Global 里还有一些 系统级属性。就像城市里的 公共规则。最常见的有:

1、Infinity

代表 无穷大

console.log(1/0)

输出:Infinity

2、NaN

代表 不是数字

console.log(0/0)

输出:NaN

经典判断:isNaN("abc")

返回:true

3、undefined

变量未定义时的值

结果:undefined

4、globalThis

这是 ES2020 新加入的一个统一入口。因为不同环境里 Global 对象名字不同:

html数据库(JavaScript隐藏大BOSS:原来所有全局函数都住在Global里!)

为了统一,JavaScript 新增:globalThis

例子:console.log(globalThis)

这样无论在什么环境都能访问 全局对象

window对象:浏览器里的Global

讲到最后,小伙伴突然问:“那浏览器里的 window 是啥?”

我笑了。其实在 浏览器环境中:window === Global 对象

也就是说:parseInt("123")

其实就是:window.parseInt("123")

再比如:varname="小米";

等价于:window.name ="小米";

也就是说:全局变量其实是 window 的属性。

举个例子

输出:31,但如果用 let 或 const:

结果:undefined

原因是:

  • var → 挂到 window
  • let/const → 不会挂

总结一下

如果把 JavaScript 世界比作一座城市:

而我们每天写的 JavaScript 代码,其实就像在这座城市里生活。你不需要自己造路灯、修公路、建邮局。因为 Global 已经帮你准备好了所有公共设施

所以当你下一次写下:parseInt("123"),或者encodeURI(url),记得一件事:你其实正在使用 JavaScript 世界里那个 默默工作的“超级单例”——Global 对象

它就像城市里永远亮着灯的那栋大楼。平时你不会注意它。但整个世界,都离不开它。

END

好朋友们,我们下篇见~

我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有