
(1)Google Gears,利用Google Chrome浏览器的Gears去访问浏览器的离线数据库,这个数据库就是SQLite,但是非常恶心的是,Chrome的SQLite数据库是存在C盘很深很深的一个目录下面,而且不让改位置!只能连Google默认路径的数据库,不能连我自己的D盘数据库。
(2)貌似HTML5支持WebDB,但是我看了一下好像只是把文件读到内存中,使用SQL语法对内存中的映射的数据库进行 *** 作,无法 *** 作本地D盘下的某个SQLite数据库。
(3)利用第三方编译的一些dll组件,看了一下使用过程非常复杂,要把一大堆文件堆在一起。
总结:安装sqlite驱动可以做的。用sqlite3.dll这个文件可以做,直接在html中写javascript调用SQLite数据库,很爽,很完美。
avascript的数据类型分为基本类型和引用类型(对象)。基本类型分为如下几种:
数字字面量
字符串字面量
布尔字面量
undefined
null
引用类型分为如下几种
new Object()
new Array()
new RegExp()
new String()
new Number()
new Bollean()
new 自定义对象()
通过new的方式生成的对象
{},[],正则字面量。
var a = 'abc'
var b = 123
var c = true
var d = undefined
var e = null
var f = {
n: 'test'
}
f.n = null
var a = {
b: 123,
c: 'abc',
d: true,
e = null,
f = {
h: 'test',
j: {
k: 567 }
}
}
函数的内存使用
functionsay(){
var a = '测试' var b = {
c: 123 }
}
functionsay(){ var a = '测试' var b = {
c: 123 }
}
say()
String;
按值传递,互相不影响
Number
按值传递,互相不影响
Boolean
按值传递,互相不影响
Array
按引用传递,对当前内存指向同一地址:
解决方案:
1.采用es6中Set进行解耦(浅拷贝)
2.使用JSON进行解耦(深拷贝)
3.使用slice函数进行解耦(浅拷贝)
4.利用拓展运算符解决(浅拷贝)
const a2=[...a1]
const[...a2]=a1
Object
按引用传递,对当前内存指向同一地址
采用JSON (深拷贝)
Object.assign()克隆(浅拷贝)
Object.create() 创建(浅拷贝)
浅拷贝只针对单层结构的数组或对象,对于复杂结构的需要采用深拷贝
更多深拷贝 ,可以采用jquery,lodash等类库实现
或者自己实现,对结构一层一层遍历
function copy (obj) {
var newobj = obj.constructor === Array ? [] : {}
if(typeof obj !== 'object'){
return
}
for(var i in obj){
newobj[i] = typeof obj[i] === 'object' ?
copy(obj[i]) : obj[i]
}
return newobj
}
堆是动态分配内存,内存大小不一,也不会自动释放。栈是自动分配相对固定大小的内存空间,并由系统自动释放。
按引用传递的数据 再堆里面存储执行栈的指针
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)