JavaScript变量无类型,类型属于值;var函数作用域、会提升、允重复声明;let/const块级作用域、不提升、禁重复声明;const需初始化且不可重赋值;原始类型按值访问,引用类型按引用访问;typeof null返回"object"是历史bug。

JavaScript 变量本身没有类型,类型属于值;声明变量只是绑定一个标识符到内存中的值,而这个值随时可能被替换为其他类型的数据。
let/const/var 声明的区别在哪
三者核心差异在作用域、提升(hoisting)和重复声明行为:
-
var有函数作用域,会被提升到函数顶部,且允许重复声明(不报错) -
let和const是块级作用域,不会被提升(但存在“暂时性死区”),重复声明会直接报错Identifier 'x' has already been declared -
const声明后必须初始化,且不能重新赋值(注意:对象或数组内容仍可修改,只是绑定不可变)
原始类型和引用类型怎么区分
原始类型(primitive)按值访问,复制时拷贝的是值本身;引用类型(object)按引用访问,复制时拷贝的是指向堆内存的地址:
- 原始类型共 7 种:
string、number、boolean、null、undefined、symbol、bigint - 引用类型包括:
Object、Array、Function、Date、RegExp、Map、Set、Promise等 - 判断类型优先用
typeof(对null返回"object"是历史 bug),更准确可用Object.prototype.toString.call(x)
为什么 typeof null === "object"
这是 JavaScript 最早版本的实现缺陷:null 在底层被表示为全零的机器码,而当时类型标签恰好把全零解释为 object。后续标准未修正,以保持兼容性:
十天学会易语言图解教程用图解的方式对易语言的使用方法和操作技巧作了生动、系统的讲解。需要的朋友们可以下载看看吧!全书分十章,分十天讲完。 第一章是介绍易语言的安装,以及运行后的界面。同时介绍一个非常简单的小程序,以帮助用户入门学习。最后介绍编程的输入方法,以及一些初学者会遇到的常见问题。第二章将接触一些具体的问题,如怎样编写一个1+2等于几的程序,并了解变量的概念,变量的有效范围,数据类型等知识。其后,您将跟着本书,编写一个自己的MP3播放器,认识窗口、按钮、编辑框三个常用组件。以认识命令及事件子程序。第
立即学习“Java免费学习笔记(深入)”;
- 检查是否为真正对象,不能只靠
typeof x === "object",要额外排除null - 安全写法是:
x !== null && typeof x === "object" && !Array.isArray(x) - ES6 后新增
Symbol.toStringTag允许自定义Object.prototype.toString输出,但不影响typeof
类型系统是动态的,变量可以随时被赋不同类型的值;真正需要关注的是值的行为——比如调用 .push() 前先确认它是数组,而不是纠结变量“应该”是什么类型。










