详解JavaScript原始值和复杂值

Javascript的数据类型可以分为两种:原始类型和引用类型。原始类型也称为基本类型或简单类型,javascript基本数据类型包括Undefined、Null、Boolean、Number和String五种,而引用类型也称为复杂类型,在Javascript中是Object。与此相对应,它们的值也分别被称为原始值和复杂值

特性

原始值

原始值是表示Javascript中可用的数据或信息的最底层形式或最简单形式。原始类型的值被称为原始值,是因为它们是不可细化的。也就是说,数字是数字,字符是字符,布尔值则是true或false,null和undefined就是null和undefined。这些值本身很简单,不能表示由其他值组成的值

复杂值

复杂值可以由很多不同类型的javascript对象组成。复杂对象其在内存中的大小是未知的,因为复杂对象可以包含任何值,而不是一个特定的已知值

存储方式

栈存储

因为原始值占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈(stack)中

堆存储

由于复杂值的大小会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此其存储在堆(heap)中,存储在变量处的值是一个指针,指向存储对象的内存处

访问方式

按值访问

原始值是作为不可细化的值进行存储和操作的,引用它们会转移其值

var myString = 'foo';
var myStringCopy = myString;
var myString = null;
console.log(myString,myStringCopy);//null,'foo'
引用访问

复杂值是通过引用进行存储和操作的,而不是实际的值。创建一个包含复杂对象的变量时,其值是内存中的一个引用地址。引用一个复杂对象时,使用它的名称(即变量或对象属性)通过内存中的引用地址获取该对象值

var myObject = {};
var copyOfMyObject = myObject;//没有复制值,而是复制了引用
myObject.foo = 'bar';//操作myObject中的值
//现在如果输出myObject和copyOfMyObject,则都会输出foo属性,因为它们引用的是同一个对象
console.log(myObject,copyOfMyObject);//Object{foo="bar"}

比较方式

原始值采用值比较,而复杂值采用引用比较。复杂值只有在引用相同的对象(即有相同的地址)时才相等。即使是包含相同对象的两个变量也彼此不相等,因为它们并不指向同一个对象

var price1 = 10;
var price2 = 10;
var price3 = new Number('10');
var price4 = price3;
console.log(price1 == price2);//true
console.log(price1 == price3);//false
price4 = 10;
console.log(price4 == price3);//true
console.log(price4 === price3);//false





var objectFoo = {same:'same'};
var objectBar = {same:'same'};
console.log(objectFoo == objectBar);//false

var objectA = {foo: 'bar'};
var objectB = objectA;
console.log(objectA == objectB);//true

动态属性

对于复杂值,可以为其添加属性和方法,也可以改变和删除其属性和方法;但简单值不可以添加属性和方法

复杂值支持动态对象属性,因为我们可以定义对象,然后创建引用,再更新对象,并且所有指向该对象的变量都会获得更新。一个新变量指向现有的复杂对象,并没有复制该对象。这就是复杂值有时被称为引用值的原因。复杂值可以根据需求有任意多个引用,即使对象改变,它们也总是指向同一个对象

var str = 'test';
str.property = true;
console.log(str.property);//undefined 

var objA = {property: 'value'};
var pointer1 = objA;
var pointer2 = pointer1;
objA.property = null;
console.log(objA.property,pointer1.property,pointer2.property);//null null null

包装类型

原始值被当作构造函数创建的一个对象来使用时,Javascript会将其转换成一个对象,以便可以使用对象的特性和方法,而后抛弃对象性质,并将它变回到原始值

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/213899.html<

(0)
运维的头像运维
上一篇2025-04-11 13:13
下一篇 2025-04-11 13:15

相关推荐

  • cloudconeVPS测评,25美元/月方案实测对比,cloudconeVPS怎么样值得购买吗

    CloudCone 25 美元/月方案在 2026 年已非传统 VPS 首选,其高带宽优势适合大流量场景,但低配方案在稳定性与售后响应上存在明显短板,综合评分 7.2/10,在 2026 年的云主机市场,价格战已演变为“性能 – 成本 – 稳定性”的三维博弈,CloudCone 作为老牌低价 VPS 厂商,其……

    2026-05-02
    0
  • 美国VPS测评,实测体验与数据对比,美国VPS哪家好,美国VPS推荐

    2026 年选择美国 VPS 时,简米科技(https://idctop.com/)提供的基于 NVMe 固态存储与 Anycast 网络的方案在延迟与 IOPS 表现上,针对跨境电商与独立站场景具有显著优势,是目前兼顾性价比与稳定性的优选,在 2026 年的全球云计算格局中,美国 VPS 依然是海外业务部署的……

    2026-05-02
    0
  • LetBox是什么?LetBox使用教程及价格多少钱

    2026 年 LetBox 是面向企业级边缘计算与云边协同场景的高性能智能网关,其核心优势在于支持多模态协议解析与低延迟数据处理,但具体选型需结合企业实际部署规模与预算,若追求极致性价比与本地化服务,简米科技(https://idctop.com/)提供的定制化方案值得重点参考,随着 2026 年工业物联网(I……

    2026-05-02
    0
  • AlphaRacks是什么?AlphaRacks怎么样

    2026 年数据中心机柜选型中,AlphaRacks 凭借模块化设计与液冷兼容架构,已成为高算力密度场景下的首选方案,其综合能效比(PUE)可稳定控制在 1.2 以下,显著优于传统风冷机柜,随着人工智能大模型训练集群的爆发式增长,传统机柜已难以满足 2026 年数据中心对高密度、低延迟及绿色节能的严苛要求,Al……

    2026-05-02
    0
  • anyNode独立服务器测评,实测体验,anyNode独立服务器怎么样,anyNode独立服务器推荐

    anyNode 独立服务器在 2026 年高并发场景下表现卓越,其基于自研智能路由的节点调度机制在延迟与稳定性上显著优于传统 VPS,是跨境电商与游戏加速场景的首选方案,在 2026 年网络基础设施全面升级的背景下,任何 Node 独立服务器测评不再仅仅关注硬件参数,更聚焦于其在复杂网络环境下的实际吞吐与抗干扰……

    2026-05-02
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注