javascript变量有哪些类型_如何正确声明和使用它们【教程】
技术百科
幻影之瞳
发布时间:2026-01-27
浏览: 次 JavaScript变量无类型,值才有类型;7种原始类型(string、number、boolean、null、undefined、symbol、bigint)和object类型;typeof null为"object"是历史bug;类型检测应使用Array.isArray、instanceof或Object.prototype.toString.call。
JavaScript 变量没有“类型声明”这回事——let、const、var 声明的都是“持有值的容器”,而值本身才有类型,比如 string、number、object 等。所谓“变量类型”其实是值的类型,不是变量本身的属性。
JavaScript 中的 7 种原始值类型(primitive)和 1 种对象类型(object)
ECMAScript 规范定义了 7 种原始类型:string、number、boolean、null、undefined、symbol、bigint。它们都不可变,且按值传递。
所有其他值(包括数组、函数、日期、正则、Promise、class 实例等)都属于 object 类型(typeof null 返回 "object" 是历史 bug,但已保留)。
常见误判:
-
typeof []→"object"(不是"array") -
typeof function() {}→"function"(这是typeof对object的特例返回,实际仍是object的子类型) -
Array.isArray([])才是判断数
组的可靠方式
用 let、const、var 声明时的关键区别
三者不决定值的类型,但影响作用域、提升行为和可重赋值性:
-
var:函数作用域,存在变量提升(hoisting),可重复声明,可重新赋值 -
let:块级作用域,存在暂时性死区(TDZ),不可重复声明,可重新赋值 -
const:块级作用域,TDZ,不可重复声明,**不可重新赋值**(但若值是对象,其内部属性仍可修改)
示例:
const obj = { a: 1 };
obj.a = 2; // ✅ 合法:修改对象属性
obj = {}; // ❌ 报错:尝试给 const 变量重新赋值
为什么 typeof null === "object" 会误导人
这是 V8 引擎早期为兼容性保留的历史遗留问题:null 在底层被表示为全零的机器码,而当时 typeof 对全零对象指针统一返回 "object"。
真正检测 null 应该显式比较:
-
value === null(严格相等) - 避免用
!value或value == null来“泛判空”,因为它们也会匹配undefined、0、""、false - 需要区分
null和undefined时,永远用===
类型检查不要只靠 typeof,尤其对对象子类型
typeof 对大部分对象都返回 "object",无法区分数组、日期、正则等:
- 数组:
Array.isArray(value) - 日期:
value instanceof Date或Object.prototype.toString.call(value) === "[object Date]" - 正则:
value instanceof RegExp - 自定义类:
value instanceof MyClass - 通用安全检测(含
null):Object.prototype.toString.call(value)返回标准字符串,如"[object Array]"
注意:instanceof 在跨 iframe 场景下会失效,此时必须用 toString.call。
最常被忽略的一点:变量本身没有类型约束,但 TypeScript 的类型注解(如 let x: string)只在编译期起作用,运行时完全不生效——JS 引擎根本不认识这些语法。
# js
# javascript
# java
# String
# class
# 值类型
# 区别
# 指针
# 子类
# 字符串
# 为什么
# 无类型
# var
# NULL
# 作用域
# Object
# const
# 值传递
# date
# Array
# 变量类型
# typescript
# Boolean
# ecmascript
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c++的STL算法库find怎么用 在容器中查找指
- 作用域操作符会影响性能吗_php静态调用性能分析【
- Windows10系统怎么查看设备管理器_Win1
- c++如何获取map中所有的键_C++遍历键值对提
- c++中explicit(bool)的用法 c++
- php能跑在stm32上吗_php在stm32微控
- C#怎么创建控制台应用 C# Console Ap
- Win10如何卸载WindowsDefender_
- mac本地php环境如何开启curl_curl扩展
- c++怎么使用类型萃取type_traits_c+
- Python字符串操作教程_切片拼接与格式化详解
- Win11讲述人怎么关闭_Win11误触开启语音朗
- PHP 中如何在函数内持久修改引用变量所指向的目标
- Go 中实现 Python urllib.quot
- 如何使用正则表达式批量替换重复的 *- 模式为固定
- Windows音频驱动无声音原因解析_声卡驱动错误
- Win11怎么关闭自动调节亮度 Win11禁用内容
- 如何在Golang中实现文件下载_Golang文件
- Win11输入法选字框不见了怎么办_Win11输入
- Win11如何设置开机问候语 Win11修改登录界
- 如何使用Golang开发基础文件下载功能_Gola
- Win11怎么关闭用户账户控制UAC_Window
- Win11文件扩展名怎么显示_Win11查看文件后
- Python网络异常模拟_测试说明【指导】
- LINUX下如何配置VLAN虚拟局域网_在LINU
- 使用类变量定义字符串常量时如何实现类型安全的 Li
- Win11怎么更改文件夹图标_自定义Win11文件
- 如何使用Golang读取日志文件_Golang b
- Windows如何查看和管理已安装的字体?(字体文
- Win11怎么关闭自动调节屏幕亮度_Windows
- c# F# 的 MailboxProcessor
- phpstudy本地环境mysql忘记密码_重置m
- 如何在Golang中处理模块包路径变化_Golan
- Win11怎么开启上帝模式_创建Windows 1
- Win11如何设置文件关联 Win11修改特定文件
- 如何将文本文件中的竖排字符串转换为横排字符串
- 如何处理“XML格式不正确”错误 常见XML we
- 如何使用Golang encoding/json解
- Win11怎么清理C盘系统日志_Win11清理系统
- PowerShell怎么创建复杂的XML结构
- c++怎么操作redis数据库_c++ hired
- Win11如何更改任务栏颜色 Win11自定义任务
- Win11如何更改用户账户文件夹名称 Win11修
- windows如何备份注册表_windows导出和
- Win10怎样清理C盘Steam游戏缓存_Win1
- Win11右键反应慢怎么办 Win11优化右键菜单
- c++如何使用std::bitset进行位图算法_
- Python装饰器设计思路_功能增强机制说明【指导
- php中作用域操作符能访问私有静态属性吗_访问权限
- php订单日志怎么记录发货_php记录订单发货操作


QQ客服