Navigator 对象
浏览器中 `navigator` 对象的环境信息、能力入口与使用边界说明。
#tech / dev / frontend
#type / concept
#status / growing
#resource / javascript
#platform / browser
[!info] related notes
- 所属 MOC: javascript-in-browser-moc
- 上位主题: javascript-in-browser
- 上位主题: javascript-bom
- 前置概念: window-object
Navigator 对象
navigator 是浏览器暴露给脚本的环境信息对象。它既提供浏览器和平台的一些描述信息,也常作为部分宿主能力的入口。
一句话定义
navigator 用来描述当前浏览器运行环境,并挂出一部分和设备、权限、连接、媒体能力相关的入口。
它解决什么问题
当你想知道:
- 当前语言环境
- 在线状态
- 浏览器大致平台信息
- 某些宿主能力有没有入口
通常会先看 navigator。
常见属性
语言相关
languagelanguages
console.log(navigator.language)
console.log(navigator.languages)
在线状态
onLine
console.log(navigator.onLine)
这个值可以作为一个轻量提示,但不能当成绝对可靠的网络可用性判断。
平台 / 代理信息
userAgentplatform(历史上常见)
console.log(navigator.userAgent)
这类字段越来越不适合做强逻辑判断,因为:
- 可伪装
- 可变
- 浏览器在逐步降低 UA 指纹暴露
常见能力入口
不同浏览器会把一些能力挂在 navigator 下面,例如:
navigator.clipboardnavigator.geolocationnavigator.permissionsnavigator.mediaDevicesnavigator.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 不是只告诉你“你在什么浏览器里”,它更像浏览器环境信息和部分能力入口的集合。