JS对象

失业焦虑
• 阅读 813

对象
用来存储属性和方法的集合
对象的引用保存在栈区,对象的值保存在堆区

0) 规则

1. 对象以{}为边界
2. {}内部保存的是一个个属性名和属性值组成的键值对
3. 属性名和属性值之间通过:分割
4. 不同的键值对之间通过,分割
5. 属性值除了数字类型之外,所有的都需要使用''
6. 属性名一般不需要加引号,当属性名包含特殊字符(空格)时,需要加引号

1) 创建方式

1. 对象字面量
    var obj = {}
    var obj2 = {
        name:'tom',
        age:13,
    }
   动态的新增键值对:
      obj2.phone = 12345; 

 2. 构造函数Object ---用来创建对象obj
        var obj = new Object();
        obj.name = 'tom';
        obj.gender = 'male';

2) 对象属性的访问

    var obj = {
        name:'tom',
        age:13,
        'my address':'ty'
    };
    1. 通过.
        对象.属性名
        console.log(obj.name); // tom
    2. 通过[]
        对象['属性名'] ---+引号说明是常量,就不会去找变量
        console.log(obj['my address']); // ty
        对象[变量]
var name='age';
obj[name] //等价于obj['age'] 等价于obj.age

3) 对象属性的删除

delete obj.name;

4) 对象的方法

Object.prototype.xxx
    constructor     构造函数
    toString        对象的字符串表示
    hasOwnProperty  检测对象的属性
        ...

5) 对象序列化和反序列化

什么叫序列化?  将内存中的对象转换为字符串描述(对象不能通过io流传输 -http只允许字节流和字符串)
为什么要序列化? 方便网络传输(io流)
序列化: 
1.常规转换
 obj.toString()
2.将对象转换为json字符串
 JSON.stringify(obj)   
3.转换为查询字符串
var qs = require('querystring')
qs.stringify(obj)

反序列化: JSON.parse()
        将json字符串转换为对象

    var obj = {
        name:'tom',
        age:13
    }
    var res = JSON.stringify(obj);
    console.log(typeof res); // string        
     
    obj.toString()            // [Object Object]
    JSON.stringify(obj)   // {''name'' :''tom'',''age'':13}
    qs.stringify(obj)        // name=terry&age=12
    var result = JSON.parse(res);
    console.log('result:',result);

6) 对象的遍历

    for-in循环:for(var key in obj){  }

    var obj = {
        name:'tom',
        age:13,
        'my address':'ty'
    }
    for(var key in obj){
        console.log(key);    ---输出属性名
        console.log(obj[key]); ---输出属性值 (当key为变量时,要obj[key]访问值)
    }
     

7) 自定义属性

var obj ={ name:"terry"}    name 可以迭代,可读可写
假设:
1.name不可迭代,不可写,name不可被删除,当对象属性的值发生改变,想知道改变?
  obj.name=''terry''   
   =       Object.defineProperty(obj,''name'',{
        configurable:true,
        writable:true,
        enumrable:true;
        value:"terry"})
2.当name,age,gender属性发生变化时,都想检测到
    var obj={}
    obj.name = "terry"
     =>
    Object.defineProperties(obj,{
        name:{},
        gender:{}
    })
    

8)对象的冻结

var obj = {
    name:'tom',
    age:13,
    'my address':'ty'
};
Object.freeze(obj);
obj.age = 15;
console.log(obj.age); // 13

对比java对象,js有什么特殊?

1.js对象的属性可以被删除,java对象的属性是固定的
2.js对象的属性可以随意添加,java对象的属性是固定的
3.js对象可以通过字面量及构造函数来获取,java对象只能通过类构造函数

A页面跳转到B页面时,希望将A页面中的某一个对象传递给B页面:

通过路由携带参数
A -> B 将对象序列化成json字符串
B页面访问对象中某一个属性名时,需要将json字符串反序列化

Object 是所有构造函数的父构造函数,所有的构造函数都直接间接的继承Object。
所有的实例对象都可以调用其构造函数及其父构造函数的原型中的方法
Object.prototype.toString()
Object.prototype.valueOf() ...

eg1. 
obj的构造函数是Object,所以obj可以调用Object.prototype的方法
var obj ={} ;//var obj = new Object();
obj.toString();

eg2. 
arr的构造函数是Array,Array继承Object,因此,arr可以调用Array.prototype及Object.prototype
中的方法
var arr = new Array(3);
arr.toString();

var obj = {
     name:'tom',
     age:13}
obj.toString()            // [Object Object]
JSON.stringify(obj)   // {''name'' :''tom'',''age'':13}
点赞
收藏
评论区
推荐文章
海军 海军
4年前
关于JavaScript 对象的理解
关于JavaScript对象的理解对象理解对象ECMA262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。我们可以把ECMAScript的对象想象成散列表:无非就是一组名值对,其中的值可以是
Wesley13 Wesley13
3年前
java的内存机制
Java把内存划分成两种:一种是栈内存,另一种是堆内存。 Heap(堆)Stack(栈)JVM中的功能内存数据区内存指令区存储数据对象实例基本数据类型,指令代码,常量,对象的引用地址堆中存储数据堆内存用来存放由new创建的对象和数组。 保存对象实例,实际上是保存对象实例的属性值,属性的类型和
Wesley13 Wesley13
3年前
java8新特性
Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str
Wesley13 Wesley13
3年前
Java(3)
面向对象编程思想:抽象 继承 多态 封装对象:万事万物皆对象. 类:把具有相同属性和方法的对象抽象出来形成的几何体!类是对象的抽象,对象是类的具体!如何描述一个类1.属性(属性不初始化时也有初始值,会自动初始化,整形为0 小数型为0.0  boolea
Stella981 Stella981
3年前
Spring IOC 练习
练习题实验一|通过IOC容器创建对象,并为属性赋值实验二|通过Bean的类型从IOC中获取bean的实例实验三3.1使用构造器在IOC中创建bean3.2通过p名称空间为bean赋值实验四4.1正确的为各种属性赋值测试使用nu11值、引用类型赋值(引用其他bean、引用内部bean)集合类型赋值(Lis
Stella981 Stella981
3年前
JavaScript原型和原型链——构造函数
一、instanceof:判断引用类型(数组、对象、函数)的变量是由哪一个 构造函数派生出来的。(oinstanceofObject)二、原型规则和示例  1、所有的引用类型(数组、对象、函数),都具有对象特性,可以自由扩展属性(除了"null“以外)。  2、所有的引用类型(数组、对象、函数),都具有\_\_p
Wesley13 Wesley13
3年前
JAVA笔记07日
07.01\_面向对象(构造方法Constructor概述和格式)(掌握)\ A:构造方法概述和作用    \ 给对象的数据(属性)进行初始化\ B:构造方法格式特点    \ a:方法名与类名相同(大小也要与类名一致)    \ b:没有返回值类型,连void都没有    \ c:没有具体的返回值ret
Stella981 Stella981
3年前
JVM学习第二天
引用计数算法对象中添加一个引用计数,一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减一两对象互相引用,就会造成死循环,无法回收可达性分析算法通过GCRoots作为起点,向下搜索,到达不了的对象,即证明对象不可用GCRoots包括:虚拟机栈中引用的对象、方法区中类静态属性引用的对象、方法区中常量引用
Easter79 Easter79
3年前
Spring两种依赖注入方式的比较
我们知道,Spring对象属性的注入方式有两种:设值注入和构造注入。先看代码:  假设有个类为People,该对象包含三个属性,name和school还有age,这些属性都有各自的setter和getter方法,还有一个包含这三个属性的构造方法。如果用spring来管理这个对象,那么有以下两种方式为People设置属性:  1.设值注入:
小万哥 小万哥
1年前
灵活配置 Spring 集合:List、Set、Map、Properties 详解
使用标签的value属性配置原始数据类型和ref属性配置对象引用的方式来定义Bean配置文件。这两种情况都涉及将单一值传递给Bean。那么如果您想传递多个值,例如Java集合类型,如List、Set、Map和Properties怎么办?为了处理这种情况,S
小万哥 小万哥
1年前
Java 构造函数与修饰符详解:初始化对象与控制权限
Java构造函数Java构造函数是一种特殊的类方法,用于在创建对象时初始化对象的属性。它与类名相同,并且没有返回值类型。构造函数的作用:为对象的属性设置初始值执行必要的初始化操作提供创建对象的多种方式构造函数的类型:默认构造函数:无参数的构造函数,如果用户