JS对象
Posted liu_kaiyao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS对象相关的知识,希望对你有一定的参考价值。
对象
用来存储属性和方法的集合
对象的引用保存在栈区,对象的值保存在堆区
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}
以上是关于JS对象的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段12——JavaScript的Promise对象