JavaScript对象详解:定义、创建、访问与内存机制

作者:纸飞机

时间:2026-10-24

浏览:420

本文详细解析JavaScript中对象的定义、分类及创建方式,涵盖字面量与构造函数两种主要手段。深入讲解属性访问、增删、检测运算符in的使用,重点剖析值传递与引用传递的内存区别,并介绍对象序列化为JSON字符串及查询字符串的方法,最后通过for...in循环实现对象遍历。

文章目录

JavaScript对象

1.定义

对象属于引用数据类型,是用于存储复杂数据的容器,它由多个属性(数据)和方法(功能)组合而成。

对象支持动态添加或删除属性,具有高度的灵活性。

2.对象的分类

(1)内建对象

由ECMAScript标准定义的对象,在任何符合标准的ES实现中均可直接使用。

常见的内建对象包括Math、String、Number、Boolean、Object等。

(2)宿主对象

由JavaScript运行环境提供的对象,目前主要指浏览器环境提供的对象。

例如BOM(浏览器对象模型)和DOM(文档对象模型)。

(3)自定义对象

由开发人员根据需求自行创建的对象。

3.定义对象

对象字面量

使用对象字面量可以在创建对象时直接指定其属性。

语法格式为:{属性名:属性值, 属性名:属性值...}。

对象字面量的属性名可以加引号,也可以不加,建议不加引号。

若属性名包含特殊字符或保留字,则必须使用引号包裹。

对象字面量以'{ }'为边界,属性之间用逗号','分隔,属性名与属性值之间用冒号':'连接。


var obj={};

构造函数创建对象

使用new关键字调用的函数称为构造函数(constructor)。

构造函数是专门用于创建特定类型对象的函数。

使用typeof检查一个由构造函数创建的对象时,返回值为object。


var obj = new Object();
console.log(typeof obj);

4.访问对象中的属性

点访问符 .


o.name      =>  'terry'
o.age       =>   12

方括号访问符 []


o['name']   =>  'terry'
o['age']    =>  12

如果读取对象中不存在的属性,不会报错,而是返回undefined。

5.给对象添加属性

语法格式:对象.属性=属性值;。


o.gender='女';

6.删除对象属性

语法格式:delete 对象.属性;。


delete o.gender;

7.Object根构造函数

所有对象都直接或间接继承自Object,因此都能调用Object原型上的方法。


var o=new Object();
var arr=new Array();

8.对象属性的检测

in 运算符

通过该运算符可以检查对象中是否包含指定的属性。

如果存在指定属性,返回true;否则返回false。

语法:

"属性名" in 对象


'name' in Obj;

9.引用传递和值传递

基本数据类型采用值传递:基本数据类型的值直接存储在内存的栈区(Stack)中。


js中的变量都是保存在栈内存中的

         基本数据类型的值是直接在栈内存中存储

         值与值之间是独立存在的,修改一个变量不会影响其他的变量

var a=123;
var b=a;
a++;
console.log('a='+a);    //124
console.log('b='+b);    //123

引用数据类型采用引用传递:引用数据类型的内存地址存储在栈区,而实际数据存储在堆区(Heap),栈区中的地址指向堆区中的数据空间。

对象存储在堆内存中,每创建一个新对象,堆内存就会开辟一个新的空间。

变量保存的是对象的内存地址(即引用)。如果两个变量保存的是同一个对象引用,

当一个变量修改属性时,另一个变量也会受到相应影响。


var obj=new Object();
obj.name='terry';
var obj2=obj;
 
//修改obj的name属性
obj.name='tom';
 
console.log(obj.name);    //tom
console.log(obj2.name);    //tom

比较两个基本数据类型的值时,直接比较它们的值。

比较两个引用数据类型时,比较的是它们的内存地址。

即使两个对象的内容完全相同,只要内存地址不同,比较结果也会返回false。


var c=10;
var d=10;
console.log(c==d);        //true
 
 
var obj3=new Object;
var obj4=new Object;
obj3.name='tom';
obj4.name='tom';
console.log(obj3==obj4);        //false

10.对象的序列化(把对象变为字符串)

1)常规转换

obj.toString()

2)转化为json字符串

JSON.stringify(obj)

3)查询字符串

var qs= require('querystring'); //引入node.js模块

qs.stringify(obj) =>name=tom&age=12

11.增强for循环(for in)

遍历对象

语法: for(var 变量 in 对象){ } for...in语句 对象中有几个属性,循环体就会执行几次

每次执行时,会将对象中的一个属性名赋值给变量


var obj={
    name:'孙悟空',
    age:18,
    gender:'男',
    address:'花果山'
}
 
for(var n in obj){
    console.log('属性名:'+n);
    console.log('属性值:'+obj[n]);
    }

到此这篇关于Java中的Script对象(详细)的文章就介绍到这了,更多相关JavaScript对象内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章