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 相关文章推荐
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
Dec 27 Javascript
JS格式化数字金额用逗号隔开保留两位小数
Oct 18 Javascript
了不起的node.js读书笔记之node.js中的特性
Dec 22 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
Jun 14 Javascript
AngularJS实现动态添加Option的方法
May 17 Javascript
vue的安装及element组件的安装方法
Mar 09 Javascript
Angular 如何使用第三方库的方法
Apr 18 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 Javascript
关于layui 下拉列表的change事件详解
Sep 20 Javascript
微信头像地址失效踩坑记附带解决方案
Sep 23 Javascript
实现vuex原理的示例
Oct 21 Javascript
详解Vue router路由
Nov 20 Vue.js
日期处理的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下删除一篇文章生成的多个静态页面
2010/08/08 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
php导入导出excel实例
2013/10/25 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
JS之小练习代码
2008/10/12 Javascript
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
Python实现partial改变方法默认参数
2014/08/18 Python
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
动物科学专业毕业生的自我评价
2013/11/29 职场文书
大学生作弊检讨书
2014/09/11 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang