这两天翻了jq的源码,今天看到了jq关于数据存储的几个方法,遂总结一下,和小伙伴没分享一下,哪里说的不对,还望批评指正~~~

废话不多说,直接上代码:

 $(function(){
$('#div1').attr('name','one');
console.log($('#div1').attr('name'));//one
$('#div1').prop('name','one');
console.log($('#div1').attr('name'));//one
$('#div1').data('name','one');
console.log($('#div1').attr('name'));//one
})

我们看到attr ,prop, data都可以起到存储数据的作用,那么他们有什么区别呢?

1,首先来看attr ,在jquery源码中attr这个方法是用setAttribute,和getAttribute实现的

document.getElementById('div1').setAttribute('name','one');
console.log(document.getElementById('div1').getAttribute('name')); //one

2,再来看prop,可以看到是通过点或[]操作符实现的

document.getElementById('div1').name = 'one'; //或者
document.getElementById('div1')['name'] = 'one';
console.log(document.getElementById('div1').name); //one

3,上面的两种方法比较适合设置一些属性,或者存储一些数据量不大数据,比如简单的字符串或者简单的数字,但都不适合存储大量的数据,比如一个大的json,或者大的数组,这是为什么呢???

这就得说到js的内存泄漏!!!

什么?什么?你不知道什么是内存泄漏?

好吧,我就献丑了,就当是抛砖引玉了,翻看网上的很多资料都讲的晦涩难懂,对新入手的小白很不友好,我就按照我自己理解的来说,希望能用最通俗直白的话,能让你多少理解一点(大牛跳过);

js这们语言,有个特点,js中没用的变量(即没有被引用)会被垃圾回收机制所销毁掉,这时变量就不存在了,内存就会释放,也就减小内存的开销,但是js中的一些操作是会引起内存泄漏的,所谓的内存泄漏在我看来就是,变量一直存在引用关系,导致变量无法被垃圾回收机制所回收,内存无法释放,计算机的性能就会低,从而引起卡顿现象,比如DOM元素和对象之间的相互引用就会引起内存泄漏

var oDiv = document.getElementById('div1');
var json = {};
oDiv.name = json;
json.aaa = oDiv;

如上代码,就是DOM元素引用了对象,对象也引用了DOM元素

var json = {a:1,b:2,c:3};
$('#div1').attr(name,json);

看了上面的代码,小伙伴们就应该知道了为什么不能用attr和prop了吧

============================================================================================================================

而data,他是可以存储任何数据的,包括json,并且不会引起内存泄漏,那么他是如何做到的呢?

其实再jq源码中使用了一个映射的关系,进行实现的,它并没有直接的将对象挂载到元素的属性上,而只是在元素上加了一个自定义属性,自定义属性的值是一个唯一的id,真正的数据是存储在一个对象上的,这个对象存储的所有的数据,我暂且叫它为cache,且每一个数据都有一个唯一的id,与元素身上自定义的属性的id是对应的,cache在中间起了一个中介的作用,巧妙的联系在了一起,避免了内存泄漏。

支持原创从我做起!!!

jquery中prop,attr,data的区别的更多相关文章

  1. jQuery中prop() , attr() ,css() 的区别

    1.  HTML属性是指页面标记中放在引号中的值,而DOM属性则是指通过JavaScript能够存取的值. (1)在jQuery中,prop()是操作DOM属性,attr()是操作HTML属性. HT ...

  2. jQuery中 prop() attr()使用详解

    对于HTML元素本身就带有的固有属性,在处理时,使用prop方法.  对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. 在高版本的jquery引入prop方法后,什么时候该用p ...

  3. jquery中prop和attr的区别

    jquery中prop和attr的区别 prop: prop(name|properties|key,value|fn) **概述** 获取在匹配的元素集中的第一个元素的属性值. 随着一些内置属性的D ...

  4. jquery中prop()方法和attr()方法

    接着上一篇笔记的疑惑,找了下prop()方法和attr()方法的区别. 原来query1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值. ...

  5. 【jQuery】【转】jQuery中的trigger和triggerHandler区别

    trigger(event, [data]) 在每一个匹配的元素上触发某类事件. 这个函数也会导致浏览器同名的默认行为的执行.比如,如果用trigger()触发一个'submit',则同样会导致浏览器 ...

  6. jquery中this与$this的区别

    来源:http://www.jb51.net/article/19738.htm jQuery中this与$(this)的区别 $("#textbox").hover( funct ...

  7. jQuery中this与$(this)的区别

    起初以为this和$(this)就是一模子刻出来.但是我在阅读时,和coding时发现,总不是一回事,这里就谈谈this与$(this)的区别. jQuery中this与$(this)的区别 $(&q ...

  8. jQuery中this与$(this)的区别总结

    这里就谈谈this与$(this)的区别. 1.jQuery中this与$(this)的区别 $("#textbox").hover( function() { this.titl ...

  9. JQuery中的html(),text(),val()区别

    jQuery中.html()用为读取和修改元素的HTML标签,.text()用来读取或修改元素的纯文本内容,.val()用来读取或修改表单元素的value值. 1.HTML html():取得第一个匹 ...

  10. Jquery中的 height(), innerHeight() outerHeight()区别

    jQuery中的 height innerHeight outerHeight区别 标准浏览器下: height:高度 innerHeight:高度+补白 outerHeight:高度+补白+边框,参 ...

随机推荐

  1. maven:手动上传jar私服

    转:https://www.jianshu.com/p/b8ec688c388e 打包时提示私服中找不到以下jar包 在私服中搜索确实找不到,后来知道这些是老系统的jar包没有deploy到私服 经分 ...

  2. 如何衡量一个人的 JavaScript 水平?

    参考链接:https://blog.csdn.net/weixin_37615279/article/details/103658866

  3. v-bind 绑定属性

    与mustache相区别,他是对内容(content内部)进行修改的.v-bind的语法糖写法是   : v-bind 动态绑定class属性:v-bind:class="对象名" ...

  4. zabbix 批量添加web场景监控

    公司有大量测试环境的url需要监控是否能够访问,即url状态不为200即报警.状态为200即正常.因url比较多,且经常发生改变,如通过web场景配置(我没配过)会比较繁琐,工作量比较大.通过网上查找 ...

  5. windows使用sqlpus连接oracle 数据库

    1.先安装好Instant Client程序. 2.打开cmd 执行sqlplus命令,如果出现如下图 2.说明需要把oracle install 的bin目类 添加系统环境path中,如下图添加环境 ...

  6. MySQL的sql语言分类DML、DQL、DDL、DCL

    SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 1.数据定义语言DDL(Data Definition Language) 对象: 数据库和表 ...

  7. PAT(B) 1021 个位数统计(Java)

    题目链接:1021 个位数统计 (15 point(s)) 代码 /** * Score 15 * Run Time 93ms * @author wowpH * @version 1.0 */ im ...

  8. Python之装饰器笔记

    概述: 用于管理和增强函数和类行为的代码 提供一种在函数或类定义中插入自动运行代码的机制 特点  更明确的语法.更高的代码可维护性.更好的一致性 编写 函数基础: 将函数赋给变量.将函数作为参数传递. ...

  9. Django入门(上)

    一.Web应用程序 1.web应用程序介绍 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件. 应用程序有两种模式 ...

  10. ant build打包

    使用ant build进行增量打包 <?xml version="1.0" encoding="gb2312"?> <project name ...