前端从0单排之JS------Day2-Day3笔记

本文深入解析JavaScript对象数据类型,包括对象的定义、属性的增删改查操作,以及对象与数组的关系。探讨了对象属性名的多样性,从字符串、数字到更复杂的类型,展示了JS对象的强大灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象数据类型


普通对象

  • 由大括号包裹起来的
  • 由零到多组属性名和属性值(键值对)组成

属性是用来描述当前对象特征的,属性名是当前具备这个特征,属性值是对这个特征的描述(专业语法,属性名称为键[key],属性值成为值[value],一组属性名和属性值称为一组键值对)

var obj = {
    name: 'tail',
    age: 9
};
// => 对象的操作:对键值对的增删改查

// [查]
// 语法:对象.属性 / 对象[属性]
obj.name;
obj['name'] // 一般来说,对象的属性名都是字符串格式的(属性值不固定,任何格式都可以)

// [增/改]
// JS对象中属性名是不允许重复的,是唯一的
obj.name='tail2'; // => 原有对象中存在NAME属性,此处属于修改属性值
obj.sex = '女'; // => 原有对象中不存在SEX,此处相当于给当前对象新增加一个属性SEX
obj['age'] = 28;

// [删]
彻底删除:对象中不存在这个属性了
delete obj['age'];

假删除:并没有移除这个属性,只是让当前属性的值为空
obj.sex = null;

在获取属性值的时候,如果当前对象有这个属性名,则可以正常获取到值(哪怕是null),但是如果没有这个属性名,则获取的结果是undefined

obj['xx'] // => undefined

一个对象中的属性名不仅仅是字符串格式,还有可能是数字格式的

var obj = {
    name: 'tail',
    0:100
}

obj[0] // => 100
obj['0']  // => 100
obj.0  // => 语法错误 SyntaxError


当我们存储的属性名不是字符串也不是数字的时候,浏览器会把这个值转换为字符串(toString),然后再进行存储

obj[{}] = 300;  //  先把{}.toString()后的结果作为对象的属性名存储进来 obj['object Object'] = 300

obj[{}] // => 获取的时候也是先把对象转换为字符串'[object Object]' , 然后获取之前存储的300


数组对象(对象由键值对组成的)

var oo = {
a:12
};

var ary = [12,23]; // => 12和23都是属性值 ,属性名呢?

// 通过观察结果,我们发现数组对象的属性名是数字(我们把数字属性名称为当前对象的索引)

ary[0]
ary['0']
ary.0  // =>  报错

var a = 12;
/*
 *   浅分析JS的运行机制
 *   1、当浏览器(它的内核\引擎)渲染和解析 JS 的时候,会提供一个供
 *      JS 代码运行的环境,我们把这个环境称之为“全局作用域(global)”
 *      
 *    2、代码自上而下执行(之前还有一个变量提升阶段)
 *     => 基本数据类型的值会存储在当前作用域下
 *     var a  = 12;
 *      1) 首先开辟一个空间存储12
 *      2) 在当前作用域中声明一个变量a (var a)
 *      3) 让声明的变量和存储的12进行关联(把存储的12赋值给a => )
 *      
 *      基本数据类型(也叫作值类型),是按照值来操作的;把原来的值复制一份放到新的空间或者位置上,和原来的值  
 *      没有关系
 * 
 *      引用数据类型的值不能直接存储到当前的作用域下(因为可能存储的内容过于复杂)
 *      ,我们需要开辟一个新的空间(理解为仓库),把内容存储到这个空间中
 *      var obj1 = {n:100};
 *      1) 首先开辟一个新的内存空间,把对象中的键值对依次存储起来(为了保证后面可以找到这个空间,此空间有一个16禁止的地址)
 *      2)声明一个变量
 *      3)让变量和空间地址关联在一起(把空间地址赋值给变量)
 *      
 *      引用类型不是按照值来操作,它操作的是空间的引用地址:把原来空间的地址赋值给新
 *      的变量,但是原来的空间没有被克隆,还是一个空间,这样就会出现多个变量关联的是
 *      相同的空间,相互之间就会存在影响了
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值