Navigator 对象

浏览器中 `navigator` 对象的环境信息、能力入口与使用边界说明。

#tech / dev / frontend #type / concept #status / growing #resource / javascript #platform / browser

[!info] related notes

Navigator 对象

navigator 是浏览器暴露给脚本的环境信息对象。它既提供浏览器和平台的一些描述信息,也常作为部分宿主能力的入口。

一句话定义

navigator 用来描述当前浏览器运行环境,并挂出一部分和设备、权限、连接、媒体能力相关的入口。

它解决什么问题

当你想知道:

  • 当前语言环境
  • 在线状态
  • 浏览器大致平台信息
  • 某些宿主能力有没有入口

通常会先看 navigator

常见属性

语言相关

  • language
  • languages
console.log(navigator.language)
console.log(navigator.languages)

在线状态

  • onLine
console.log(navigator.onLine)

这个值可以作为一个轻量提示,但不能当成绝对可靠的网络可用性判断。

平台 / 代理信息

  • userAgent
  • platform(历史上常见)
console.log(navigator.userAgent)

这类字段越来越不适合做强逻辑判断,因为:

  • 可伪装
  • 可变
  • 浏览器在逐步降低 UA 指纹暴露

常见能力入口

不同浏览器会把一些能力挂在 navigator 下面,例如:

  • navigator.clipboard
  • navigator.geolocation
  • navigator.permissions
  • navigator.mediaDevices
  • navigator.serviceWorker

这意味着 navigator 不只是“信息对象”,也经常是宿主能力分发入口。

最小示例

console.log('language:', navigator.language)
console.log('online:', navigator.onLine)

if ('clipboard' in navigator) {
  console.log('clipboard api supported')
}

运行时边界

不要把 UA 当成强判断依据

很多初学者会写:

if (navigator.userAgent.includes('Chrome')) {
  // ...
}

这类逻辑通常不稳,更实用的思路是:

  • 优先做能力检测
  • 不要把浏览器字符串匹配当成长期可靠判断

onLine 不是业务网络可用性的最终真相

navigator.onLine 更像一个粗粒度状态提示。

它不能保证:

  • 你的业务接口一定可达
  • 当前网络一定真的可用

和能力检测的关系

navigator 常用于:

  • 看某个能力入口是否存在
  • 做轻量环境信息读取

比起“判断你是什么浏览器”,更推荐:

  • 判断“你有没有这个 API”

常见误区

  • navigator.userAgent 当成主逻辑分支依据
  • 以为 navigator.onLine === true 就代表接口一定能请求成功
  • navigator 只理解成浏览器名字对象,忽略它还是很多宿主能力的入口

最短记忆方式

navigator 不是只告诉你“你在什么浏览器里”,它更像浏览器环境信息和部分能力入口的集合。

创建于 2026/4/14 更新于 2026/5/27