JavaScript变量赋值与数据类型判断详解

作者:拾光时间:2026-10-25 05:05:26浏览:373

本文深入解析JavaScript中变量赋值的两种机制:原始值按值复制,引用值按指针复制。详细对比typeof与instanceof在类型判断上的适用场景,并阐述作用域链的变量查找规则及错误处理机制。

1、原始值与引用值

六种基本数据类型的值均属于原始值。当将原始值通过变量赋值给另一个变量时,系统会复制出一个全新的值,这两个变量之间相互独立,互不影响。


let num1 = 5
let num2 = num1


1、原始值与引用值

对于引用值,通过变量进行赋值时同样会复制一个值,但该值实际上是一个指向原对象的指针(引用)。这意味着,尽管复制了指针,两个变量最终仍指向内存中的同一个对象。


let obj1 = new Object()

let obj2 = obj1

1、原始值与引用值

由于两个变量指向同一个引用对象,因此对obj1添加属性时,该操作也会同步反映在obj2上。


obj1.name = "zhangsan"

console.log(obj2.name) // zhangsan


在函数传参过程中,JavaScript始终采用按值传递的方式,这与变量赋值的逻辑一致。区别在于,对于引用类型,传递的是指向对象的指针,而该指针依然指向同一个对象实例。

2、instanceof

typeof 一般适合用来判断原始值,对于引用值并不使用,因为 null 和 其它对象返回的都是 object,具体是什么类型的对象并不知道。 而判断引用值具体是什么类型对象最好的方法就是用 instanceof 表达式。


console.log(1 instanceof Object)  //false
let obj = new Object();
console.log(obj instanceof Object)  //true
console.log(null instanceof Object)  //false



function fun(){
    //
}
console.log(fun instanceof Object)  //true
console.log(fun instanceof Function) //true

console.log([] instanceof Object) //true
console.log([] instanceof Array) //true

3、作用域

变量的可见范围被称为作用域或执行上下文,一旦变量超出该作用域,它将不再可见。系统在查找变量时会遵循作用域链机制:首先从引用该变量的最近块作用域开始查找,若未找到则向外层局部作用域继续查找,最后在全局作用域中搜索。如果全程未找到该变量,系统将抛出错误 ReferenceError: xxx is not defined。

到此这篇关于JavaScript高级程序设计之变量与作用域的文章就介绍到这了,更多相关JavaScript变量与作用域内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章
相关文章
更多