Node.js学习笔记(三)

JavaScript对象类型

C++里面,对象和类型创建的内存结构是一样的,除了虚函数

C++里面实现多态,虚函数对象会多一个4字节的指针,除此之外都一样

JS对象和他们完全不一样

  • JS的对象是基于原型的,原型类似JS对象,但是原型和对象是不同的
  • JS对象是动态的,可以新增和删除属性,这点和C++不一样
    • 为什么可以添加:JS对象本质上不是结构体,本质是一个无序的数据集合
    • JS对象本质是哈希表,是key(都是字符串)和value(可以是原始类型或者对象)对照的哈希表
    • 对象类型的拷贝是引用拷贝,指向一个相同的内存地址,
    • 函数也是一种对象,Object函数对象和Object对象是不同的

对象的生成

  • 对象字面量
    • 就是若干key\value组成的一个映射表
    • 整个对象用花括号包起来
  • new构造函数
    • 如果不加new只是一个类型转换函数
    • 加上new变成一个构造函数,初始化一个新创建的对象
    • JS语言核心中的对象类型都包含内置构造函数
  • Object.create(原型对象)
    • 什么是原型:胚胎
//	字面量
var empty = {};	//没有任何属性
var point = {x:0,y:0}
var point2 = {x:point.x+1,y:point.y+2}	//这里x和y都是值类型,不是引用,因为point.x是值


// new构建
var o = new Object();


//	create方法

//	以下三行语句等价
var o1 = {};
var o2 = new Object();
var o3 = Object.create(Object.prototype);	//prototype就是原型(胚胎)

对象属性

  • 点运算符 .
  • 方括号运算符
    • o[‘p’] 如同C++里面的map操作,表姐体现本质,就是一个映射表
  • 读取未声明属性不会报错,返回undefined
  • 给未声明的属性赋值,会动态增加新的属性(和map一样)
快速添加属性
var point  = {x:5,y:6};
var rsdius = 5;

function area(){
  var r = this.radius;
  return Math.PI*r*r;
}

var circle = {point,radius,area};
console.log(circle.area())

删除对象
  • delete可以删除属性,只是断开属性和对象的联系(内存空间是不会释放的)
  • delete运算符不能删除继承属性(要删除继承属性必须从定义这个属性的原型对象删除他,而这会影响到所有集成这个原型的对象)
delete book.author	//删除了属性author

delete book['main title']	//删除main title属性

o = [x:1]

in运算
  • 用于检查对象是否包含某个属性是否包含某个属性(key)

  • 有就是true,否则false

  • 不能区分是自有还是继承

  • 可以用来遍历属性

for(var i in o){	// 遍历O对象的属性
	
}
对象属性元信息

六个独立的元信息属性,保存在对象里

  • Writeable
  • Config

获取对象原信息

var o ={p:'a'}

Object.getOwnProperty(o,'p',{
  value;"b",
  writable:fales
})

//	获取
defineProperty方法
存取器

存取器accessor提供虚拟属性,即该属性的值不是实际存在的,而是每次计算生成


对象的原型

  • 对象采用原型式继承
  • 对象的原型:_proto_
  • 函数会有一个prototype属性,不是一回事
对象原型链

Object.prototype._proto_

  • 字面量的原型:Object.prototype
  • 函数的原型:Function
  • Object也是一个函数,他的原型也是Function
  • 对Object.prototype修改会影响所有的对象

查询时对原型链:当查不到时,就找他的原型对象查,找不到再找原型,直到找到或者null为止

修改属性:如果不存在就创建并赋值;如果其原型链里有改属性,则会在当前对象覆盖

  • instanceof

Object函数的方法

  • Object.keys() 返回可枚举的属性集合数组

  • Object.prototype

类似数组的对象

  • 有类似下标的key和length属性,但是length不随着元素数量变化而变化。
  • 类似数组不是数组,随意对于Array的方法不能对他使用,需要先转化成数组

集合的改进(ES6)

  • 对象和数组是常用的集合
  • ES6添加了set和map
  • 为了实现不同集合的元素遍历,ES6提供便利器对象为各种数据结构进行遍历
For of语法糖
let s = new Set();
[2,3,4,5,6,2,2,].forEach({
  
})

for(let i of s){
  console.log(i)
}
Set.prototype的属性
  • .size:实力成员总数
  • .add(value):增加一个值
  • .delete(value):
  • .has(value):判断是否有值
  • .clear:清空
  • .keys():返回键名的遍历器
  • .values():返回键值的遍历器,其实在这里和上面是一样的
  • .entries():返回键值对
  • forEach():遍历Map的所有成员
Map函数

无参数构造

let m = new Map()
let o = {p:'hello'}
m.set(o.'world')

二位数组为参数

let m = new Map([  ['1','2']]);//	代码可能有误,具体参考ppt

Map.prototype属性

  • size
  • get(key)
  • Keys
  • values
  • keys
  • entries

Iterator遍历器

  • 为不同的数据结构提供统一的访问机制
  • 遍历要求有symbol.iterator
  • map、set可以使用iterator

iterator有两个属性,一个是value一个是done,后者判断是否遍历结束

let arr = ['a','b','c']let iter = arr[Symbol.iterator]();iter.next();
介绍for of循环
  • 所以可以使用iterator的集合都可以使用for of
var arr = ['a','b']for(let item of arr.v)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值