1. node.js 对象的序列化和反序列化

JavaScript015

1. node.js 对象的序列化和反序列化,第1张

node.js 可以通过 class 关键字声明对象。格式如下:

在实际网络环境中,我们经常将一组属性打包成一个类,然后将这个类序列化,传输到对端,对端接受到之后将其反序列化得到类。序列化的方法如下所示:

这样做有个问题,序列化和反序列化会导致类的方法被丢弃,得到的仅仅有属性。

我在网上百度了一下,基本没有什么好的解决方法,因此我采用的方法很暴力:再创建一个 Rectangle 类,把新对象的属性改为反序列化得到的值。

本来想用构造函数重载的,但是 node.js 不支持构造函数重载,行8...c++把我惯坏了。

顶层对象,在浏览器中指的是window,在node环境中指的是global对象.

在ES5环境中,通过var声明的变量能够通过window对象获取到,

各种环境中顶层对象的区分

1.浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window。

2.浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self。

3.Node 里面,顶层对象是global,但其他环境都不支持。

你好,Node.js归根到底还是JS,在JS中所有的变量都是对象,我们可以通过typeof方法得到一些简单数据类型变量的具体类型,比如:

var str = 'abc',

    num = 123

console.log(typeof abc) // string

console.log(num) // number

但是对于一些复杂对象,我们再使用typeof只能得到object,比如:

var obj = {},

    arr = []

console.log(typeof obj) // object

console.log(typeof arr) // object

如果要得到这类复杂类型的具体类型,可以使用下面这个方法:

function isObject(obj){

    return Object.prototype.toString.call(obj) === '[object Object]'

}

function isArray(arr) {

    return Object.prototype.toString.call(arr) === '[object Array]'

}

// Test

var obj = {},

    arr = []

console.log(isObject(obj)) // true

console.log(isArray(arr)) // true

另外,ES5之后给Array对象增加了isArray方法,你也可以酌情使用:

var arr = []

Array.isArray(arr) // true

好了,最后附一张图,说明一切~~

希望是你想要的答案,望采纳~