json的引号之伤
最近读他们的jquery解读的源码,由于版本不同,我可能看的是他们解读的1.7的,但是我本身运行的可能是1.9的,所以有些出处,但是中心思想不变,我有疑问的时候,直接debug,让例子自己走一遍,好处是一目了然,缺点就是有些分支走不到,近我的可能吧!能理解的理解,理解不了的实践;这个是目前我的基本思路;
这几天在解读$.data(),$("").data()方法,之后会单独拿出文章来写自己的心得体会,看源码-》看一些前辈大神们的源码解读-》自己实践-》自己总结体会,扯远了
看到一篇文章写的是html5的属性data-xx的,即使咱们现在浏览器不支持html5,但是用jquery的话依然可以使用这些方法,举例说明(摘自网上):
<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div>
$("div").data("role") === "page";
$("div").data("lastValue") === 43;
$("div").data("hidden") === true;
$("div").data("options").name === "John";
这里我把源码data在这里用到的主要方法说一下:
//elem代表div,key代表我们的role、lastValue等,data=undefined
function dataAttr( elem, key, data ) {
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
//这里主要工作就是解析“data-“形式的属性,判断data是否未定义,并且节点是不是element元素
//如果data有值,则直接返回,因为在调用这个方法之前还有其他的方法调用,可能已经把data计算出来了
if ( data === undefined && elem.nodeType === 1 ) {
//组装name属性,例如name = "data-role"
var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
//js的原生代码得到data的值
data = elem.getAttribute( name );
//是否是string类型
if ( typeof data === "string" ) {
try {
//各种判断,boolean,null,数字,string
data = data === "true" ? true :
data === "false" ? false :
data === "null" ? null :
// Only convert to a number if it doesn't change the string
//这里有个技巧:这个”+“可以用来判断数字,它先强制把对象转化成数字,如果对象本身不是数字,则返回NaN,例如:+5==5(true),+'a'=='a'(false)
+data + "" === data ? +data :
//测试数据是否是以{}包裹,是则尝试转成对象,这里提一下jQuery.paseJSON()这个方法,它会按照json的定义去判断参数,然后返回对象,不符合的转换不了,返回undefined
rbrace.test( data ) ? jQuery.parseJSON( data ) :
data;
} catch( e ) {} // Make sure we set the data so it isn't changed later
//保存数据
jQuery.data( elem, key, data ); } else {
data = undefined;
}
} return data;
}
我这里说一下json对象,里面的属性必须是双引号,不能使用单引号,虽然页面界别不怎么区分,但是在json解析的时候会报错,例如
<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div> ,
cache中的存储是一个obj{name:"John"};
data-options的内容引号互换
<div data-role="page" data-last-value="43" data-hidden="true" data-options="{'name':'John'}"></div>
$("div").data("options").name === "undefined";
cache中的存储是一个字符串:"{'name':'John'}"
关于cache的相关知识同样在实例和静态方法data中会讲解
json的引号之伤的更多相关文章
- Json遇到引号需要转义的问题
首先看一个简单的Json格式的数据: {data:{id:1,text:"this is text",src:"abc/abc/abc.png"},succes ...
- curl -d中的json存在引号怎么处理?
1\将其改写为I'\''m就可以执行 2\ curl -u elastic:mypass -X GET "localhost:9200/_analyze?pretty" -d 'a ...
- java json转义引号
String jsonMapStr = "{\"system\":\"1,\\\"2\\\",3\",\"createD ...
- C#基础-关于用json给控制台程序传值的坑
上周遇到了一个非常诡异的坑,首先写了两个程序,第一个程序输出成dll,第二个程序是控制台程序. 在第一个程序里,我使用了process去启动第二个程序,同时传入了一个Json作为参数,即: Proce ...
- Python json解析
#encoding: utf-8 ''' Author:Siukwan ''' import sys reload(sys) sys.setdefaultencoding('utf8') import ...
- Json+Ajax相关
Ajax前戏之json: 1.什么是json? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 2.json对象和JavaScript ...
- 自定义HttpHandler配置iis8.0
配置环境,window8 ,iis8.0,.net Framework4.0,托管管道模式“经典” 步骤 (1)进入iis管理器,选中要设置的网站-->功能视图-->MIME类型--> ...
- 前端笔记之JavaScript面向对象(一)Object&函数上下文&构造函数&原型链
一.对象(Object) 1.1 认识对象 对象在JS中狭义对象.广义对象两种. 广义:相当于宏观概念,是狭义内容的升华,高度的提升,范围的拓展.狭义:相当于微观概念,什么是“狭”?因为内容狭隘具体, ...
- JSON 的标准:双引号而非单引号!
刚刚测试发现一段很简单的.看似正确的代码却是错误的: <?php $json_str = "{'name':'Eric', 'age':23}"; var_dump(json ...
随机推荐
- Maze
Maze 题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5094 BFS+状态压缩 把身上携带钥匙的状态压缩成一个2^10的整数.这道题难在 ...
- 计算机网络课程优秀备考PPT之第四章介质访问控制层(四)
为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 前期博客是, 计算机网络课程优秀备考PPT之第一章概述(一) 计算机网络课程优秀备考PPT之第 ...
- Chapter 2 Open Book——31
"It's too bad about the snow, isn't it?" Edward asked. I had the feeling that he was forci ...
- hdu_5961_传递(bitset)
题目链接:hdu_5961_传递 题意: 中文,不解释 题解: 上bitset卡常,很优美的就过去了 #include<bits/stdc++.h> #define F(i,a,b) fo ...
- linux screen命令简易使用
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号.输入.输出和窗口缓存,方便在linux系统中后台执行程序. 安装,以centos为例: yum -y install screen 新建 ...
- Spring声明式事务配置中propagation各个值的意思
值 含义 REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务. SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行. MANDATORY 支持当前事务,如果当前没有事务 ...
- kettle连接Hive中数据导入导出(6)
1.hive往外写数据 http://wiki.pentaho.com/display/BAD/Extracting+Data+from+Hive+to+Load+an+RDBMS 连接hive
- MVC3+EF4.1学习系列(十一)----EF4.1常见的问题解决
博客写了10篇了~有很多朋友私信问了一些问题,而且很多问题 大家问的都一样 这里说说这些常见问题的解决办法.如果大家有更好的解决办法~也希望分享出来 问题大概为这几个 一.ef4.1 codeFirs ...
- SignalR的坑爹细节
好吧!SignalR的确是好用,照着官网的例子自己敲了一遍,死活得不到效果... 检查了半天,抱着试一试的心态吧原来在服务端大写开头的Hub类和大写开头的方法在客户端调用的时候,全部改成小写,一刷新, ...
- Java 内部类和匿名内部类
1.内部类: /* 局部内部类: 在一个类 的方法内部定义另外一个类,那么另外一个类就称作为局部内部类. 局部内部类要注意的细节: 1. 如果局部 内部类访问了一个局部变量,那么该局部变量必须使用fi ...