JavaScript中的16进制字符(改进)


Posted in Javascript onNovember 21, 2011

原始的代码:

//将文字转换为16进制 
function textToSix(str) { 
return escape(str).replace(/%/g, function () { 
return "\\"; 
}).toLowerCase(); 
}

改进后的:
//将文字转换为16进制 
function textToHex(str) { 
//escape对0-255以外的unicode值进行编码时输出%u****格式,例如:%u6267%u624b%u6cea%u773c 
//将其中的%替换成\就是十六进制的 
if (typeof str == "string") { 
return escape(str).replace(/%/g, function () { 
return "\\"; 
}).toLowerCase(); 
} else { 
return null; 
} 
}

主要是增加了一个验证是否为字符串的验证。

在完善了这个方法之后,我又觉得是不是要改进下面这个方法:

//将16进制表示为文字 
function sixToText(str) { 
return unescape(str); 
}

本意是将"\unnn"之类的字符转换回文字。其实,只需看看unescape这个方法的原理(工作原理:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。来自百度百科的解释)。就会知道我完全是多此一举。因为浏览器是可以解析十六进制的字符的。例如:

在IE9中:

JavaScript中的16进制字符(改进)

在Chrome中:

JavaScript中的16进制字符(改进)

再补充另外一点收获吧。其实在做这个解析被我替换后的字符时,我最初的想法是将"\"这个字符在替换回"%",然后再用unescape这个解码函数来解析字符。然而,当我在我想将"\"替换为"%"却发现了下面的一个比较有意思的现象:像“\”这个字符如果后面没有碰到“t”,"n"之类可以和t结合在一起组成转意字符的话,是会被浏览器忽略的。用实验来验证我的结论吧:

在IE9中调试:

JavaScript中的16进制字符(改进)

在Chrome下调试:

JavaScript中的16进制字符(改进)

在这里定义了一个变量,变量中含有一些平时可能很少出现的字符"\",调试的时候,看看上面的提示了吗,浏览器很智能的忽略掉了特殊位置的字符。因此在将一些看似很平常的字符(例如文件路径等)放在js的变量中,可能输出来的结果并不是预期的。

Javascript 相关文章推荐
jquery validation插件表单验证的一个例子
Mar 03 Javascript
Web开发者必备的12款超赞jQuery插件
Dec 03 Javascript
jquery导航制件jquery鼠标经过变色效果示例
Dec 05 Javascript
iframe里的页面禁止右键事件的方法
Jun 10 Javascript
判断字符串的长度(优化版)中文占两个字符
Oct 30 Javascript
jQuery 重复加载错误以及修复方法
Dec 16 Javascript
JS实现光滑展开合拢的菜单效果代码
Sep 16 Javascript
Angular学习笔记之angular的$filter服务浅析
Nov 12 Javascript
Angular获取手机验证码实现移动端登录注册功能
May 17 Javascript
基于jQuery实现的设置文本区域的光标位置
Jun 15 jQuery
解决vue打包后刷新页面报错:Unexpected token
Aug 27 Javascript
jquery实现点击左右按钮切换图片
Jan 27 jQuery
日期处理的js库(迷你版)--自建js库总结
Nov 21 #Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
Nov 21 #Javascript
页面调用单个swf文件,嵌套出多个方法。
Nov 21 #Javascript
javascript中xml操作实现代码
Nov 21 #Javascript
js调用activeX获取u盘序列号的代码
Nov 21 #Javascript
15个款优秀的 jQuery 图片特效插件推荐
Nov 21 #Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
Nov 21 #Javascript
You might like
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
python批量修改xml属性的实现方式
2020/03/05 Python
python如何支持并发方法详解
2020/07/25 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
物业管理毕业生个人的求职信
2013/11/30 职场文书
高级护理专业毕业生推荐信
2013/12/25 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
四年级学生期末评语
2014/12/26 职场文书
公务员个人年终总结
2015/02/12 职场文书
创先争优个人总结
2015/03/04 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
聘任书格式及范文
2015/09/21 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python