关于javascript:JavaScript原始值和引用值

29次阅读

共计 1089 个字符,预计需要花费 3 分钟才能阅读完成。

一、原始值和援用值的概念

1.1 原始值

简略的数据:uderfined,null,boolean,number,string,symbol。
储在 栈(stack)
在许多语言中,字符串都被看作援用类型,而非原始类型,因为字符串的长度是可变的。ECMAScript 突破了这一传统。

1.2 援用值

Object、Function、Array、Date、RegExp。
存储在堆 (heap) 内存
援用值是保留在内存中的对象,因为 JavaScript 不容许间接拜访内存地位,所以不能操作对象所在的内存空间。在操作对象时,实际操作的是对该对象的援用,而非理论对象自身。
因为援用值的 大小会扭转,所以不能把它放在栈中,否则会升高变量查寻的速度。相同,放在变量的栈空间中的值是该对象存储在堆中的地址。地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。

二、动静属性

援用值能够随时增删改其属性和办法

原始值不能有属性,即便不会报错

三、复制值

原始值会被复制到新变量地位,相互独立,援用值复制的实际上是一个指针,它指向存储在对内存的对象,操作实现后,两个变量指向同一个对象。因而一个对象上的变动会在另一个对象上反映。

let a = 111
 let b = a
     b = 222

 let aa = new Object();
 let bb = aa
 aa.age = 2
 console.log(a,b,aa.age,bb.age)//111 222 2 2

四、传递参数

ECMAScript 中所有参数都是按值传递的,而变量有按值和按援用拜访,按值传递参数,值会被复制到一个局部变量。

如果参数按援用传递的,函数外部会反映到内部对象,这是因为函数外部的对象和内部对象都指向同一对象,不象征参数是按值传递。

function setName(obj){
 obj.name = "xt"
 obj = new Object()
 obj.name = "lt"
}
let person = new Object()
setName(person)
console.log(person.name)//"xt" 

五、比拟形式

原始值按值比拟,援用值按援用比拟

let a = 1
let b = true
let aa = new Object()
let bb = new Object()
console.log(a==b,a===b,a==b,a===b)//true false false false 

六、确定类型

用 typeof 判断原始值

用 instanceof 操作符判断对象

result = variable instanceof constructor

console.log(person instanceof Object)// 变量 perdon 是 Object 吗 
正文完
 0