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中serialize() 序列化
Mar 13 Javascript
jQuery插件扩展实例【添加回调函数】
Nov 26 Javascript
js中string和number类型互转换技巧(分享)
Nov 28 Javascript
js评分组件使用详解
Jun 06 Javascript
ECMAscript 变量作用域总结概括
Aug 18 Javascript
你点的 ES6一些小技巧,请查收
Apr 25 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
May 04 Javascript
vuejs 制作背景淡入淡出切换动画的实例
Sep 01 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
Nov 25 Javascript
H5实现手机拍照和选择上传功能
Dec 18 Javascript
vue组件创建的三种方式小结
Feb 03 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
Nov 10 Javascript
日期处理的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
codeigniter框架批量插入数据
2014/01/09 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
提高 DHTML 页面性能
2006/12/25 Javascript
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
Jquery ui css framework
2010/06/28 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
Django Admin实现上传图片校验功能
2016/03/06 Python
python实现SMTP邮件发送功能
2020/06/16 Python
Python列表解析配合if else的方法
2018/06/23 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
python烟花效果的代码实例
2020/02/25 Python
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
黄金酒广告词
2014/03/21 职场文书
倡议书范文格式
2014/05/12 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
党员示范岗材料
2014/12/19 职场文书
表扬信格式模板
2015/05/05 职场文书
四年级语文教学反思
2016/03/03 职场文书
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫